LC-3: JSR не модифицирует ПК

Я работаю над программой на ассемблере 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. Симулятор просто переходит к следующей инструкции.

Раньше он работал, как и ожидалось, но я, должно быть, что-то изменил, и я понятия не имею, что это такое и почему это не работает. Любая помощь будет принята с благодарностью.


person avery_laird    schedule 11.07.2017    source источник


Ответы (1)


Симулятор просто переходит к следующей инструкции.

Просто идея:

Выполняется ли код на метке COMPARE?

Или, если спросить по-другому: Имеют ли регистры после инструкции JSR значения, которые вы ожидаете получить после возврата из подпрограммы?

Если да, симулятор может перейти в режим «перехода», который вы также можете знать из языков высокого уровня.

В этом режиме функция (язык высокого уровня) или подпрограмма (ассемблер) не пошагово выполняются, а выполняются, и отладчик останавливается, когда функция или подпрограмма завершает работу.

person Martin Rosenau    schedule 11.07.2017
comment
Спасибо за ответ, как оказалось, это была моя точная проблема. Сегодня утром снова проверил и понял, что путаю, как использовать утилиту отладки. - person avery_laird; 12.07.2017