2017-11-29 12 views
0

LC3プログラムを作成して正と負の数の合計とカウントを表示しますが、Simulateプログラムでプログラムを実行すると、正の数は追加された最初の+ ve数のみを示します。私のコードは以下の通りです - LC3 /アセンブリを使用する任意の提案は、新しいLC3アセンブリを実行した後のレジスタの値が正しくありません

.ORIG x3000 


and r1, r1,#0 ; clear r1 
and r2, r2, #0 ; neg counter amount of negative numbers 
and r3, r3, #0 ; positive counter amount of pos numbers 
and r4, r4, #0; negative sum 
and r5,r5, #0; positive sum 
and r6,r6,#0; clear register 


LEA R1, DATA 



loop    
     ldr r6, r1, #0 
     BRn negativecountm ;if negative go to branch to ncount method 
     BRp positivecountm ;if positive go to branch to pcount method 
     BRz Escape ;if 0 encountered program done go to escape method 


negativecountm 
     add r2, r2, #1 ; increment count for neg numbers 
     add r4, r4, r6 ; sum of neg number 
     add r1, r1,#1 ; increment pointer to point to next number in data 
     BRp loop ; go back to original loop 

positivecountm 
     add r3, r3, #1 ; increment count for positive num 
     add r5, r5, r6; sum of +ve num 
     add r1, r1, #1 ; increment pointer to point to next num in data 
     BRn loop; 


Escape 
     ST r2, negativecount ; 
     ST r3, positivecount; 
     ST r5, positivesum; 
     ST r4, negativesum; 
     TRAP x25 ; 


    DATA  .Fill 1244 
      .Fill -23 
      .Fill 17 
      .Fill 6 
      .Fill -12 
      .Fill 0 


negativecount .BLKW 1 
positivecount .BLKW 1 
positivesum .BLKW 1 
negativesum .BLKW 1 


.END 

答えて

1
BRp loop ; go back to original loop 
[...] 
BRn loop; 

これらの分岐文の両方がかなり正しくありません。条件コードが

(つまりLD、LEA、LDR、LDI、ADD、AND、NOTである)命令は、レジスタへの書き込みをいつでも設定されているあなたは

add r1, r1, #1 ; increment pointer to point to next num in data 
を行う際の条件コードが設定されていることを忘れないでください

正の数の場合、必ずそのADD命令の後にr1に負の値は含まれません。

ブランチを無条件ブランチに変更するだけで問題は解決します。

だからではなく、BRN/pは単に

BR loop 

は、トリックを行いますというのが。

+0

ありがとう – rahulchawla

関連する問題