Передача запросов в отношении 3 операндов (длина + ширина * 2), невозможно рассчитать периметр в NASM

Итак, сегодня я решил снова поиграть с nasm, в последнее время я собираю с ним кое-какие знания, поэтому я решил дать себе несколько проектов, прежде чем смогу подтвердить, что со мной все в порядке

Я пытался вычислить периметр прямоугольника с помощью NASM в C / C ++, код выглядит так

#include <stdio.h>
#include <stdlib,h>
#include <math.h>

int main()
{
int length;
int breadth;
int perimeter;

printf("Enter The Length: \n");
scanf("%d",&length);
printf("Enter The Breadth: \n");
scanf("%d",&breadth);

perimeter = length + breadth * 2;
printf("Perimeter is : %d",perimeter);

return 0;
system("PAUSE");

}

Что должно работать отлично теперь, я пытаюсь сделать то же самое в NASM, часть Length + width * 2 создает некоторые проблемы, поскольку дает довольно возмутительный ответ, отличный от оригинальной вещи, исходный код выглядит следующим образом

section  .data

msg:
msg1: db 'A program to Calculate The Perimiter of A Rectangle',10,0
msg2: db '******************************************************',10,0
;msg3: db ''Length + Breadth * 2 =  Perimeter'
msg3: db 'Enter Length :',0
msg4: db 'Enter Breadth :',0
msg5: db 'Perimeter is = %d ',0
formin : db '%d',0
formout : db '%d',10,0
num1 : times 4 db 0
num2 : times 4 db 0

section  .text

global _main
extern _scanf
extern _printf_main :
push ebp
mov esp ,ebp
push msg1
call _printf

push msg2
call _printf

push msg3
call _printf

mov eax, num1
push num1
push formin
call _scanf

push msg4
call _printf

mov eax, num2
push num2
push formin
call _scanfmov eax,dword[num1]
mov ebx,dword[num2]

mov ecx,2
; Perimeter is always L + B *2

add eax,ebx

imul ecx

push msg5
call _printf

; destroy stack
pop ebp
mov esp, ebp

ret

Обратите внимание, что область периметра вызывает у меня проблемы, почему это так?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]