[英]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
....
(縮進從降價有點混亂)
COMPARE
在此行中的其他位置:
COMPARE ST R1, ST1 ; R6 --> current node
該指令永遠不會移至COMPARE
標簽。 模擬器會逐步執行,直到下一條指令。
它以前按預期運行,但是我必須進行了一些更改,我不知道那是什么,或者為什么它不起作用。 任何幫助將不勝感激。
模擬器會逐步執行,直到下一條指令。
只是一個想法:
是否執行了COMPARE
標簽上的代碼?
或-提出不同的要求: JSR
指令后的寄存器是否具有從子例程返回后所需的值?
如果是,則模擬器可能會進入“跳過”模式,您也可能會從高級語言中了解到。
在此模式下,函數(高級語言)或子例程(匯編器)不會步進,但會執行,並且當函數或子例程完成時調試器將停止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.