Итак, сегодня я решил снова поиграть с 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
Обратите внимание, что область периметра вызывает у меня проблемы, почему это так?
Задача ещё не решена.