2017-07-11 1 views
0

LC-3アセンブリのプログラムで作業していますが、JSRに問題があります。 PCを変更したり、ラベルにジャンプしたり、以前のPCをR7に書き込んだりする代わりに、単に次の命令に進むだけです。ここで関連するセクションである:LC-3:JSRはPCを変更しません

.... 
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ラベルに移動したことはありません。シミュレータは、次の命令に進むだけです。

以前は予想どおりに動作していましたが、何かを変更したに違いありません。それが何であるかわからない、または動作しない理由がわかりません。どんな助けでも大歓迎です。

答えて

2

シミュレータは次の命令に進むだけです。

ジャストアイデア:

が実行COMPAREラベルのコードですか?

または - 別の質問:JSR命令の後のレジスタに、サブルーチンから戻った後に期待する値がありますか?

もしそうであれば、シミュレータは高水準言語から知っているかもしれない "ステップオーバー"モードに入るかもしれません。

このモードでは、関数(高級言語)またはサブルーチン(アセンブラ)は実行されず、実行され、関数またはサブルーチンが終了するとデバッガが停止します。

+0

答えてくれてありがとう、それは私の正確な問題でした。今朝もう一度チェックし、デバッグユーティリティの使い方が混ざっていることに気付きました。 –

関連する問題