仲間の SO ユーザー
SPIM を使用して MIPS コードを実行しているときに発生している動作について、誰かが説明してくれることを願っています。暗号化アルゴリズムを実装していますが、手順の 1 つは 64 ビット幅の暗号化キーをロードすることです。たとえば、暗号化キーが の場合0x123456789ABCDEF0
、次のように宣言します。
.data
enc_key_lo: 0x78563412
enc_key_hi: 0xF0DEBC9A
今では、最初にロードするときはいつでも、ロードできるようenc_key_lo
に に遭遇するかどうかを確認します。以下は私のコードです。0
enc_key_hi
.text
la $a1, enc_key_lo
la $a2, enc_key_hi
load_lo:
lbu $s0, 0($a1)
addi $a1, $a1, 1
beq $s0, $zero, load_hi #If 0, then we need to load enc_key_hi
j load_lo
load_hi:
lbu $s1, 0($a2)
addi $s2, $s2, 1
/* DO SOME OPERATIONS ETC ETC */
コードを実行すると、ループの連続した繰り返しでレジスター$s0
が次のようにロードされることがわかります。load_lo
12, 34, 56, 78, 9A, BC, DE, F0
$s0
ロード後にレジスタが 0 でロードされることを期待してい78
ましたが、 までロードし続けF0
ます。したがって、これload_hi
はコードにセグメントを含める目的に反します。宣言をコメントアウトするとenc_key_hi
、 then$s0
がロード0
後にwith がロードされることに気付きました78
。
誰かがこの動作を説明してもらえますか? 敬具。