0

仲間の SO ユーザー

SPIM を使用して MIPS コードを実行しているときに発生している動作について、誰かが説明してくれることを願っています。暗号化アルゴリズムを実装していますが、手順の 1 つは 64 ビット幅の暗号化キーをロードすることです。たとえば、暗号化キーが の場合0x123456789ABCDEF0、次のように宣言します。

.data
    enc_key_lo: 0x78563412
    enc_key_hi: 0xF0DEBC9A

今では、最初にロードするときはいつでも、ロードできるようenc_key_loに に遭遇するかどうかを確認します。以下は私のコードです。0enc_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

誰かがこの動作を説明してもらえますか? 敬具。

4

0 に答える 0