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
。
有人可以解释这种行为吗?亲切的问候。