MASM Сборка, создание петель
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
Include io.h
cr equ 0DH
Lf equ 0AH
.STACK 4096
.DATA
string byte 40 Dup (?)
number dword ?
rejected byte cr, Lf, "Rejected", 0
.code
_start:
main PROC
forever: input string, 40
atod string
mov number, eax
cmp number,0
jne processing
je finish
jmp forever
processing:
cmp number,10
jg message
cmp number,-10
jl message
message: output rejected
finish:
INVOKE ExitProcess, 0
main endp
PUBLIC _start
END
Что я пытаюсь сделать: прочитать по одному за раз, обработать это число и проверить, является ли оно 0, если так, выйдите из программы, если число> 10 или <-10 распечатать сообщение "отклонено. " У меня много проблем с созданием операторов перехода, как мне заставить цикл продолжать обрабатывать числа до 0? Даже когда я ввожу "правильный" номер, он все равно печатает сообщение "отклонено", но затем выходит из программы. Может быть, я не могу иметь несколько операторов перехода после сравнения?
1 ответ
Решение
Вы поставили петлю в неправильном порядке. когда 0
вводится, вы выходите, в противном случае вы обрабатываете и THEN
Вы хотите повторить цикл до 0
вводится, при желании вы должны распечатать сообщение, когда введено неверное значение.
cmp number,0
je finish
processing:
...
jmp forever ; So everything is fine and you continue
message:
output rejected
jmp forever