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

Объяснение кода листинга программы

  1. cdq - команда, которая выполняет преобразование sign-extend 16-битного числа в 32-битное число, сохраняя знак. Значение регистра edx не изменяется.
  2. sub eax, edx - выполняет вычитание значения регистра edx из значения регистра eax и сохраняет результат в регистре eax.
  3. sar eax, 1 - выполняет сдвиг значения регистра eax вправо на 1 бит и сохраняет результат в регистре eax.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы