Проверить, превышает ли количество положительных чисел в массиве 5 или нет - Assembler/FASM
Формулировка задачи:
Форумчане, помогите с программой на FASM'e.
Даны целые числа a1,a2,...,a10. Выяснить, верно ли, что количество положительных чисел не превышает 5.
Решение задачи: «Проверить, превышает ли количество положительных чисел в массиве 5 или нет»
textual
Листинг программы
format PE console 4.0 entry start include 'win32ax.inc' section '.text' code readable executable start: ; получение описателей ввода и вывода консоли invoke GetStdHandle, STD_INPUT_HANDLE mov [hConsoleInput], eax invoke GetStdHandle, STD_OUTPUT_HANDLE mov [hConsoleOutput], eax lea esi, [A] mov ecx, [N] xor edi, edi ;счётчик положительных чисел mov ebx, 1 .for: lodsd xor edx, edx ; eax>0 ? edx=1: edx=0 cmp eax, 0 cmovg edx, ebx add edi, edx ; edi += edx loop .for mov [Result], edi cinvoke printf, aszFmt, [Result] cmp [Result], 5 jbe .Yes .No: cinvoke printf, aszNo jmp .exit .Yes: cinvoke printf, aszYes .exit: ;ожидание нажатия ENTER cinvoke printf, aszPressEnter invoke ReadConsole, [hConsoleInput], Buffer,\ 100, BufLen, NULL invoke ExitProcess, 0 section '.data' data readable writeable N dd 10 A dd 6, -51, 87, 3, -90, -23, 60, 8, -36, -51 aszFmt db 'Count=%d', 0Dh, 0Ah, 0 aszYes db 'Yes', 0Dh, 0Ah, 0 aszNo db 'No', 0Dh, 0Ah, 0 aszPressEnter db 0Dh, 0Ah, 0Dh, 0Ah, "Press ENTER to exit", 0 section '.bss' readable writeable Result dd ? Buffer db 1024 dup(?) BufLen dd ? hConsoleOutput dd ? hConsoleInput dd ? section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ msvcrt, 'msvcrt.dll' include 'api\kernel32.inc' include 'api\user32.inc' import msvcrt,\ printf, 'printf'