Я работаю над программой на ассемблере LC-3, и у меня возникла проблема с JSR
. Вместо изменения ПК, перехода к метке и записи предыдущего ПК в 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
. Симулятор просто переходит к следующей инструкции.
Раньше он работал, как и ожидалось, но я, должно быть, что-то изменил, и я понятия не имею, что это такое и почему это не работает. Любая помощь будет принята с благодарностью.