LC-3:JSR不修改PC

时间:2017-07-11 14:34:42

标签: assembly lc3

我正在制作LC-3装配程序,我遇到JSR的问题。它不是修改PC,跳转到标签,而是将前一台PC写入R7,而只是继续下一条指令。以下是相关部分:

....
NXTNODE     LDR     R2, R2, #0  ; get next node
BRz DONE    ; now that node is loaded in R2, compare the first and last name

AND R6, R6, #0
AND R3, R3, #0
AND R3, R4, #0  ; copy search term pointer to R3
ADD R6, R2, #0  ; copy node pointer to R6
ADD R6, R6, #3  ; point to last name
AND R5, R5, #0
ADD R5, R5, #1  ; init loop counter

OUTP    JSR     COMPARE         ; uses R6 to compare first and last name to search term.
                                ; if they match, continue (R0 = 1). Otherwise, go to NXTNODE.
ADD R0, R0, #-1
BRnp    NXTNODE         ; no match, don't print

LDR R0, R6, #0  ; there was a match. Load first name to R0      

TRAP    x22
LEA R0, SPACE
TRAP    x22
....

(缩进在降价处有点乱)

COMPARE位于不同的位置,在此行中:

COMPARE ST  R1, ST1     ; R6 --> current node

指令永远不会移动到COMPARE标签。模拟器只需按步骤操作即可进入下一条指令。

之前它按预期工作,但我必须改变一些东西,我不知道那是什么,或者为什么它不起作用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

  

模拟器只需按步骤操作即可进入下一条指令。

只是一个想法:

COMPARE标签上的代码是否已执行?

或者 - 以不同的方式提出问题:JSR指令后的寄存器是否具有从子程序返回后所期望的值?

如果是,模拟器可能会进入“跳过”模式,您也可以从高级语言中了解。

在此模式下,函数(高级语言)或子程序(汇编程序)不会步进但执行时调试器会在函数或子程序结束时停止。