2017-12-12 11 views
0

こんにちは私は数の2乗を計算し、それをr0に格納するlc3アセンブリプログラムを書こうとしています。整数はパラメータとして与えられ、r1にあります。LC3アセンブリ正方形のN

: - デバッグが、それは最初に2を追加し、最初のパスの間にあるが、それはR0に別の2を追加するために失敗した第二のパス私のコードは、任意のヘルプを下回っているが助けたユーザーへ

  .orig x3FF8 
     ld r1,n 
    ld r5,n 

    square 
add r2,r1,#0 

    add r5,r5,#-1 
add r0,r2,#0 
brzp square 
brn theend 

    theend 


halt 
n .fill #2 

.end 

私の最終的なコードのおかげで高く評価され

.orig x3FF8 
    ld r1,n 
    ld r5,n 

    square 


    add r2, r2,r1 

    add r5,r5,#-1 

    brp square 


    theend 


halt 
    n .fill #4 

.end 

答えて

0

LC-3構文が正しく覚えている場合、add r2,r1,#0r2 = r1 + 0のように、実際にはr2に追加することはなく、r1を上書きするだけでした。

の外側にはのループが初期化されますr2です。

しかし、ループ内では、となるadd r2, r2, r1r2 = r2 + r1となります。


ループ内にadd r0,r2,#0がある理由がわかりません。 最終結果をr0にする場合は、最初にr0に蓄積してください。それが合計の合計であるはずだったら、あなたは同じバグを持っています。

add r0, r0, r2からではなく、ループ内で必要なものがすべてではなく、ループブランチに対して条件コードフラグが設定されるように、add r5,r5,#-1を最後にする必要があります。


はまた:theendが次の行にあり、実行には、独自の次の行に続く:brn theendは全く役に立ちません。あなたはソースの空白を飛び越える必要はありません!

+0

1.私はそれがr2の和の合計になると仮定しました、これはそれほど明確になりました。私は加算でconsuedされました。私はレジスタ2を上書きしていたと思います。 – rahulchawla

+0

Question - r0、r2、#0を加算してr0にsumofsumを格納しますが、これは7fffを与えます。r2に25がある場合、r0を25に置き換えてはいけません。 – rahulchawla

+0

@rahulchawla: 'add r5、r5、# - 1'ループカウンタの後ろに' add 'しますか? (もともと@Brandonによって発見された)。その命令をループ外に移動すると、問題が解決されます。デバッガを使用して、コードをシングルステップ実行し、レジスタを変更します(たとえば、2または3のような小さな入力の場合)。 –