Заменить минимальный положительный элемент массива нулем - Assembler
Формулировка задачи:
Заменить минимальный положительный элемент массива нулем.
написала программу, но мне надо её решить, используя массив. подскажите, пожалуйста
include "D:\fasm\fasmw\INCLUDE\win32ax.inc" .data r db "%d",0 r1 db "%d",0 r2 db "%d",0 r3 db "%d",0 caption db "Результат",0 tr db 100 DUP(?) m dd 10, 1, 17, 39 .code main: mov ebx, 0 mov edx, [m+ebx] add ebx, 4 mov eax, [m+ebx] cmp edx, eax jge m1 add ebx, 4 mov eax, [m+ebx] cmp edx, eax jge m2 add ebx, 4 mov eax, [m+ebx] cmp edx, eax jge m3 jmp l1 m1:nop add ebx, 4 mov edx, [m+ebx] cmp eax, edx jge m2 add ebx, 4 mov edx, [m+ebx] cmp eax, edx jge m3 jmp l2 m2:nop add ebx, 4 mov edx, [m+ebx] cmp eax, edx jge m3 jmp l3 m3:nop mov ebx,0 mov eax, [m+ebx] add ebx,4 mov ebp, [m+ebx] add ebx,4 mov esi, [m+ebx] invoke wsprintfA, addr tr, addr r,eax invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r1,ebp invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r2,esi invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r3, 0 invoke MessageBoxA, 0, addr tr, addr caption,0 jmp l4 l3:nop mov ebx,0 mov eax, [m+ebx] add ebx,4 mov edi, [m+ebx] add ebx,8 mov esi, [m+ebx] invoke wsprintfA, addr tr, addr r,eax invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r1,edi invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r2,0 invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r3,esi invoke MessageBoxA, 0, addr tr, addr caption,0 jmp l4 l2:nop mov ebx,0 mov eax, [m+ebx] add ebx,8 mov edi, [m+ebx] add ebx,4 mov esi, [m+ebx] invoke wsprintfA, addr tr, addr r,eax invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r1,0 invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r2,edi invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r3,esi invoke MessageBoxA, 0, addr tr, addr caption,0 jmp l4 l1:nop mov ebx,4 mov ebp, [m+ebx] add ebx,4 mov edi, [m+ebx] add ebx,4 mov esi, [m+ebx] invoke wsprintfA, addr tr, addr r,0 invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r1,ebp invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r2,edi invoke MessageBoxA, 0, addr tr, addr caption,0 invoke wsprintfA, addr tr, addr r3,esi invoke MessageBoxA, 0, addr tr, addr caption,0 l4:nop invoke ExitProcess,0 .end main
Решение задачи: «Заменить минимальный положительный элемент массива нулем»
textual
Листинг программы
;FASM format PE console 4.0 include 'win32a.inc' mov esi, arr mov ecx, arr_sz push esi push ecx push esi push ecx @@: lodsw movsx eax, ax push ecx cinvoke printf, fm, eax pop ecx loop @B pop ecx pop esi mov bx, -1 mov edi, dummy @l: lodsw bt ax,0Fh jc @F cmp bx, ax jbe @F mov bx, ax mov edi, esi @@: loop @l mov word [edi-2],0 movzx ebx,bx pop ecx pop esi @@: lodsw movsx eax, ax push ecx cinvoke printf, fm, eax pop ecx loop @B invoke _getch gtfo: invoke exit,0 arr dw 101,34,11,-24,12,54,16,9,12,-19,72,-14,121,61,22,39 arr_sz = ($-arr)/2 fm db '%3d, ',0 nl db 0Dh,0Ah,0 data import library msvcrt,'MSVCRT.DLL' import msvcrt,\ printf,'printf',\ exit,'exit',\ _getch,'_getch' end data