2016-03-04 2 views
0

, так что это моя проблема, всякий раз, когда я нажимаю 'a', и он удовлетворяет условию, что он печатает текст под «a:», а затем печатает текст в «b:». как я разорвать друг друга в разных условиях? спасибо :)Emu8086 - Условная печать не прерывается

cmp byte ptr [temp+2], 'a'  ;condition 
je a 

cmp byte ptr [temp+2], 'b'  ;condition 
je b 

a: 
mov dx, offset msgA    ;land 
mov ah, 09 
int 21h 

b: 
mov dx, offset msg14   ;water 
mov ah, 09 
int 21h 


ret         
msgA db 10, 13, "       Land:$" 
msg14 db 10, 13, "       Water:$" 

ответ

0

Да, это поведение, которое вы закодированы. Он просто падает от a: до b:. Так что просто добавьте jmp s до конца, и он будет работать по желанию.

cmp byte ptr [temp+2], 'a'  ;condition 
je a 

cmp byte ptr [temp+2], 'b'  ;condition 
je b 
jmp finish      ; --- add this for the case, that neither 'a' nor 'b' was the input 

a: 
mov dx, offset msgA    ;land 
mov ah, 09 
int 21h 
jmp finish      ; --- JMP to the end - do not fall through 

b: 
mov dx, offset msg14   ;water 
mov ah, 09 
int 21h 
jmp finish      ; --- JMP to the end - in this case not necessary, but just in case you'd add more cases 

finish: 
ret 
0

поток программы продолжается после int 21h инструкции - в вашем случае, то есть код на b: этикетки. Если вы не хотите, что вам нужно, чтобы перейти на другой адрес после того, как int инструкция делается:

... 
a: 
    mov dx, offset msgA   ; land 
    mov ah, 09 
    int 21h 
    jmp done     ; program continues here after the `int` instruction 

b: 
    mov dx, offset msg14  ; water 
    mov ah, 09 
    int 21h 

done: 
    ret 
... 

Поскольку все, что вы делаете, когда вы сделали это возвращение из процедуры, вы также можете просто использовать ret вместо jmp.

0

Метка не является барьером; это просто имя для некоторого местоположения в программе, которое обеспечивает удобный доступ к указанному местоположению.

Как всегда, если вы хотите изменить поток управления, использовать какое-то разветвления инструкции, например .:

a: 
mov dx, offset msgA    ;land 
mov ah, 09 
int 21h 
jmp done 

b: 
mov dx, offset msg14   ;water 
mov ah, 09 
int 21h 

done: 
Смежные вопросы