0

LC2K ISA を使用して、誰かこのプログラムが何をしているのか説明してもらえますか?

        lw      0       1       five    load reg1 with 5 (symbolic address)
        lw      1       2       3       load reg2 with -1 (numeric address)
start   add     1       2       1       decrement reg1
        beq     0       1       2       goto end of program when reg1==0
        beq     0       0       start   go back to the beginning of the loop
        noop
done    halt                            end of program
five    .fill   5
neg1    .fill   -1
stAddr  .fill   start                   will contain the address of start (2)

記号アドレスと数値アドレスの違いは何ですか? たとえば、なぜ 2 行目で reg2 に -1 をロードするのでしょうか? -1 はどこから来るのですか?

3行目の「開始」はどういう意味ですか?また、addを使用しているときにその行がreg1をデクリメントするのはなぜですか? また、4 行目から 5 行目と 7 行目から 9 行目はどのように機能していますか?

誰かがプログラムを簡潔に説明できるなら、私は大いに感謝します。

ありがとうございました。

4

1 に答える 1

3

これは、いくつかの学術目的で使用されるこれらの構成された命令セットの1つのように見えますが、十分に明白なようです。

'symbolic'と'numeric'の違いは、記号の場合は記号(名前)を使用して何かを参照するのに対し、数値の場合は数字を使用することです。シンボルは組み立て時に数値に置き換えられるため、最終的なコードに違いはありません。シンボルfiveは一部のデータを指しているため、コードがアセンブルされるときにそのデータのアドレスが置き換えられます。

(私は、reg0が数値0のショートカットである、またはレジスターに常に0が含まれていると仮定しています。これは一部の実際のアーキテクチャーに当てはまり、ここに反映されているようです)

2行目は、1行目にロードされたレジスタの内容(記号で示された場所に格納されたデータである5を含むfive)を取得し、3を加算して、この新しく計算されたアドレスにデータをロードするようです。 。3 + 5 = 8であり、各行がメモリ内の1つの場所を占め、0から番号が付けられていると仮定すると、場所8のデータは、neg1-1を含むとして示される行になります。

start3行目には別の記号があり、プログラマーはコードのこの部分を別の場所から参照できます。この場合、それは明らかにループです。

この行は、を追加するときにレジスタをデクリメントします-1。(レジスタ1、2、および1を再度参照しているようです。したがって、おそらくreg1は入力と出力の両方であり、-1を含むreg2はもう一方の入力です)。

コードの残りの部分は単純にループします(beq命令は比較を可能にするように見えます-2つのレジスタが等しいかどうかをチェックし、等しい場合は分岐します)。最初の分岐は、reg1 == 0であるかどうかをチェックし、2の数値分岐ターゲットを使用します。これは、おそらく2命令だけ先にジャンプします。2番目のブランチは、0 == 0であるかどうかをチェックします。これは常に真であり、シンボルstartにジャンプします。シンボルは、アセンブル時に再び数値に変換されます(2つの命令をstart実際の場所に戻すために-2)。

最後の3行は、プログラムが使用するデータを宣言しているだけです(実際、最後の行は不要に見えますが、この架空のアーキテクチャはわかりません)。

于 2013-01-19T09:33:47.053 に答える