0

SO用户

我希望有人可以解释我在使用 SPIM 运行我的 MIPS 代码时遇到的行为。我正在实现一种加密算法,其中一个步骤是加载 64 位宽的加密密钥。例如,如果加密密钥是0x123456789ABCDEF0,我将通过以下方式声明它;

.data
    enc_key_lo: 0x78563412
    enc_key_hi: 0xF0DEBC9A

现在,每当我enc_key_lo首先加载时,我都会检查是否遇到 a0以便我可以加载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,则$s0在加载0后加载 with 78

有人可以解释这种行为吗?亲切的问候。

4

0 回答 0