【问题标题】:LC-3: JSR does not modify PCLC-3:JSR 不修改 PC
【发布时间】:2017-07-11 14:34:41
【问题描述】:

我正在编写一个 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 标签。模拟器只是一步一步地执行下一条指令。

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

【问题讨论】:

    标签: assembly lc3


    【解决方案1】:

    模拟器只是跟着它走,进入下一条指令。

    只是一个想法:

    COMPARE 标签处的代码是否被执行?

    或者 - 换种说法:JSR 指令之后的寄存器是否具有从子程序返回后您期望的值?

    如果是,模拟器可能会进入“跳过”模式,您也可能知道高级语言。

    在这种模式下,函数(高级语言)或子例程(汇编程序)不会单步执行,而是会在函数或子例程完成时执行,并且调试器会停止。

    【讨论】:

    • 感谢您的回答,因为它原来是我的确切问题。今天早上再次检查,发现我在混淆如何使用调试实用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2021-07-18
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多