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
Другие вопросы по тегам