Здравствуйте, Алина!
Во-первых, Вы пишете 32-битный код, какая необходимость использовать 16-битные регистры?
Во-вторых, используя 16-битную переменную
х для параметра при вводе, функция все равно запишет 32-битное значение!
Т.е. в
х и в следующую переменную
F запишется 32-битная величина, причем в
F запишется 0!!! И на которую Вы потом собираетесь делить!!!!
В-третьих, посмотрите формат функций scanf, printf. Они требуют строку формата, которой у Вас нет.
В-четвертых, в нашем случае getchar() надо вызвать два раза. Первый извлекает из потока символ 0x0a, оставленный scanf(), и тут же завершается.
Только второй будет ждать нажатия на клавишу
В-пятых, числа у нас зо знаком, поэтому надо везде использовать idiv
Еще кое-что подправил, по мелочам...
[code lang=asm]format PE Console 4.0
entry Start
include '..\..\include\win32a.inc'
section '.text' code readable executable
Start:
invoke scanf, sformat, x ; функция для ввода х
; умножение, деление и тд.
mov eax,[x]
inc eax
imul [L]
idiv [F]
sub eax,150
sbb edx,0
idiv [x]
mov [y], eax
; Вывод результата на экран
invoke printf,sformat,eax
invoke getchar
invoke getchar
invoke ExitProcess, 0
section '.data' data readable writeable
sformat db "%d",0
y dd ?
x dd 0
F dd 3
L dd 10
section '.idata' import data readable
library kernel, 'KERNEL32.DLL', msvcrt, 'msvcrt.dll'
import msvcrt, printf,'printf', getchar,'getchar', scanf,'scanf'
import kernel, ExitProcess,'ExitProcess'
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен