Mov stdin,eax
Invoke WriteConsoleA, stdout, ADDR st1, 14, NULL, NULL; VIVOD ST1 invoke ReadConsole, stdin, ADDR buf, 20, ADDR cRead, NULL; чтения числа как символа invoke crt_atoi, ADDR buf; преобразовать символ в число mov [esi], eax Add esi, 4 Mov ecx, ebx Loop m1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mov ecx, _c lea esi, mas1; загрузка адреса начала массива mov eax, [esi]; загрузка числа m3: .IF(eax> op1)& & (eax< op2); сложное условие Inc sum add esi, 4; расчет адреса нового числа mov eax, [esi] Loop m3 .ELSE; иначе add esi, 4; расчет адреса нового числа mov eax, [esi] loop m3; перейти, если ecx не равно 0 .ENDIF; окончание директивы высокого уровня Mov ebx, sum Invoke wsprintf, ADDR st3, ADDR ifmt, ebx Invoke MessageBox, NULL, addr st3, addr st2, MB_OK Invoke ExitProcess, 0 Ret end _start; конец программы
Директивы организации цикла
Для организации цикла кроме инструкции loop могут использоваться директивы цикла соответственно с верхним (с предусловием) и нижним окончанием (с постусловием): WHILE …. ENDW и REPEAT …. UNTIL.
Перед циклом в.WHILE в регистр ecx по привычке помещают количество повторений, которое здесь используется в условии. Чило повторений определяется инструкцией dec ecx.
.WHILE ecx! =20 …
|