Я пытаюсь реализовать следующую программу в ассемблере:
int number;
printf("\n%s","Enter an integer: ");
scanf("%d",&number);
number=7-number*3;
printf("\n%s%d\n\n","The integer is: ",number);
Пока моя попытка такова:
.386
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte, printlist:VARARG
scanf PROTO arg2:Ptr Byte, printlist:VARARG
.data
in1fmt byte "%d",0
msg1fmt byte 0Ah,"%s",0
msg1 byte "Enter an integer: ",0
msg2fmt byte 0Ah,"%s%d",0Ah,0Ah,0
msg2 byte "The integer is: ",0
number sdword ?
.code
main proc
INVOKE printf, ADDR msg1fmt, ADDR msg1
INVOKE scanf, ADDR in1fmt, ADDR number
mov eax, number
mov ebx, 3
imul ebx
mov number, eax
mov eax, 7
sub eax, number
INVOKE printf, ADDR msg2fmt, ADDR msg2, eax
ret
main endp
end
Первая проблема заключается в том, что eax не сохраняетсяв количествеКогда я распечатываю значение числа после ввода eax в число, он выводит значение как 21 для ввода 30. eax равно 90, но после перемещения eax в число число 21.
Я уверенМне не хватает чего-то простого, но я просто не могу понять, где я ошибся.