2016-08-06 141 views
-3

我在使用指令JSR指令的68k彙編語言指令RTS中遇到問題。我試圖將D0中的數據與數字01進行比較,如果它是01,則跳出到ValueIs01,如果不是,則將D0中的數據與數字02進行比較,如果它是02,則跳出到ValueIs02 ,但它似乎只是完全忽略了Valueis1Valueis2標籤的指令,這裏是代碼:68k彙編語言中的RTS指令

CMP.B #$01, D0 
    JSR ValueIs1 

    CMP.B #$02, D0 
    JSR ValueIs2 

ValueIs1: 
    MOVE.B #$00, D1 
    RTS 
Valueis2: 
    MOVE.B #$01, D1 
    RTS 

有沒有人有一個解決方案?

回答

3

IIRC,JSR是跳轉子程序,而RTS是子程序返回。所以它們是無條件的函數調用和返回指令,並且不關心設置了哪些標誌。 This tutorial shows how they work (and maybe has more parts that say something about conditional branches).這是m68k rts的第一個谷歌搜索,所以這種東西不是很難找到。

代碼中的指令都不是有條件的,因此無論傳入數據如何,指令的相同順序都會運行。


它似乎只是完全忽略了Valueis1指令和Valueis2標籤

這似乎不太可能。兩者都應該運行。

在調試器中單步執行代碼會向您顯示發生了什麼,並且一旦您添加了某些條件分支指令,就會使得邏輯正確無誤。

3

在你的代碼中,ValueIs1和ValueIs2之後的兩個部分都運行,因爲JSR不是跳轉到子例程的條件:它總是跳轉。
事實上,您可能需要使用條件分支,例如:

CMP.B #$01, D0 
    BNE.S ValueIsNot1 
    MOVE.B #$00, D1 
    BRA.S EndOfCode 
ValueIsNot1: 
    CMP.B #$02, D0 
    BNE.S EndOfCode 
    MOVE.B #$01, D1 
EndOfCode: