2016-08-06 107 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: