LC-3:JSR 不修改 PC
LC-3: JSR does not modify PC
我正在用 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
....
(缩进从markdown看有点乱)
COMPARE
位于不同的位置,在这一行:
COMPARE ST R1, ST1 ; R6 --> current node
指令永远不会移动到 COMPARE
标签。模拟器只是一步一步地执行下一条指令。
它之前按预期工作,但我一定是做了一些更改,但我不知道那是什么,也不知道为什么它不起作用。任何帮助将不胜感激。
The simulator just steps by it, on to the next instruction.
只是一个想法:
COMPARE
标签处的代码是否执行?
或者 - 以不同的方式提问:JSR
指令之后的寄存器是否具有您从子例程返回后期望的值?
如果是,模拟器可能会进入 "step over" 模式,您也可能从高级语言中了解到。
在此模式下,函数(高级语言)或子例程(汇编程序)不会单步执行,但会执行,并且调试器会在函数或子例程完成时停止。
我正在用 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
....
(缩进从markdown看有点乱)
COMPARE
位于不同的位置,在这一行:
COMPARE ST R1, ST1 ; R6 --> current node
指令永远不会移动到 COMPARE
标签。模拟器只是一步一步地执行下一条指令。
它之前按预期工作,但我一定是做了一些更改,但我不知道那是什么,也不知道为什么它不起作用。任何帮助将不胜感激。
The simulator just steps by it, on to the next instruction.
只是一个想法:
COMPARE
标签处的代码是否执行?
或者 - 以不同的方式提问:JSR
指令之后的寄存器是否具有您从子例程返回后期望的值?
如果是,模拟器可能会进入 "step over" 模式,您也可能从高级语言中了解到。
在此模式下,函数(高级语言)或子例程(汇编程序)不会单步执行,但会执行,并且调试器会在函数或子例程完成时停止。