2011-06-20 57 views
1

在下面的intel彙編代碼中,我在條件跳轉之前使用了cmp(compare)指令,但對於下面的代碼,它不應該跳轉,但它會打印字符串。 (Flat assembler,Win-7 x32)。這個彙編代碼有什麼問題,有條件的jmp

ORG 100h 
USE16 


     mov ah, 09 
     mov dx, message 
     cmp ah, 10d 
     je condjmp 


condjmp: 
     int 21h 

     mov ah,01 
     int 21h 

     mov ah,4ch 
     int 21h 

message db 'conditional jump', 0Ah, '$' 
+0

je和標籤之間有什麼東西嗎?也許它只是在流逝? – Kevin

+2

我從來沒有編寫x86程序集,所以也許我的方法是基礎的,但是如果'je condjmp'和實際的'condjmp'地址之間沒有指令,那麼condjmp將不會被執行嗎?或者,您沒有包含'je'指令後面的代碼? – Andrew

回答

6

跳轉去那是JMP指令後立即標籤,因此,如果將跳轉與否,你總是在標籤最終也沒關係。

+0

是的,它有點落下。添加一個'返回'等效mov ah,4ch,int21幫助。 – goldenmean

0

是Goldenmean,像西蒙對你說,

如果你按照你的程序的邏輯流程,你會發現,在條件跳轉的這兩種情況下,對執行下一條指令將是:

INT爲0x21

我的意思是,

如果JE不是真的--->下一條指令= INT爲0x21 如果JE真------->下一條指令= INT爲0x21

希望這對你來說已經夠清楚了。