While цикл - Assembler
Формулировка задачи:
Переписываю код с С -ответ выдает 655, а правильно
715
. Где может быть ошибка?#include <stdio.h> main() { int i = 65, sk = 40; while ( i >= 40 ) { sk++; sk = sk + i; i--; } sk = sk / 2; printf ("%d", sk); getch(); }
global _main extern _printf section .data format: db '%d',10,0 i: dd 65 sk: dd -40 section .text _main: mov edi, [i] mov eax, [sk] wh: cmp edi, 40 jle end inc eax add eax, edi dec edi jmp wh end: mov ecx, 2 cdq idiv ecx push eax push dword format call _printf add esp, 8 mov eax, 0 ret
Решение задачи: «While цикл»
textual
Листинг программы
cdq sub eax, edx sar eax, 1
Объяснение кода листинга программы
cdq
- команда, которая выполняет преобразование sign-extend 16-битного числа в 32-битное число, сохраняя знак. Значение регистра edx не изменяется.sub eax, edx
- выполняет вычитание значения регистра edx из значения регистра eax и сохраняет результат в регистре eax.sar eax, 1
- выполняет сдвиг значения регистра eax вправо на 1 бит и сохраняет результат в регистре eax.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д