Emu8086 - 条件打印不会破坏

时间:2016-03-04 10:27:00

标签: assembly emulation emu8086

所以这是我的问题,每当我按下'a'并且符合条件时它会打印出'a:'下的文字然后打印'b:'中的文字。我如何在不同的条件下互相打破?谢谢:)

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:$"

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

标签不是障碍;它只是程序中某个位置的名称,可以方便地访问所述位置。

与往常一样,如果要更改控制流,请使用某种分支指令,例如:

nba <- read.csv("mydata.csv", sep=",")

row.names(nba) <- nba[,1]
nba <- nba[,2:865]

nba_matrix <- data.matrix(nba)
nba_heatmap <- heatmap(nba_matrix, Rowv=NA, Colv=NA, col = brewer.pal(9, "Blues"), scale="column", margins=c(5,10))

答案 2 :(得分:0)

是的,这就是您编码的行为。它只是从a:b:。所以只需将jmp添加到最后,它就可以正常工作。

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