在这种情况下,lw和bne是什么意思?

时间:2015-10-25 20:21:42

标签: assembly mips

我对编程很陌生,我想知道lw(两次)和bne在这个问题上究竟做了什么?我很抱歉这个问题有任何错误,因为我不得不把它翻译成英文。

这里开始提问:

部分数据存储器包含以下值:

地址值

100-1

104-2

108-4

112-8

116-16

鉴于下面的代码,执行此代码后寄存器r1的值是多少?

addi    r2,r0,104
lw  r1,-4(r2)
addi    r3,r0,116
label:  addi    r2,r2,4
lw  r4,-4(r2)
add r4,r4,r4
add r1,r4,r1
bne r2,r3,label

1 个答案:

答案 0 :(得分:0)

正如迈克尔所说,阅读说明书并在每行后面放置评论将有助于您理解代码。

addi    r2,r0,104       ;r2 = 0d104
lw      r1,-4(r2)       ;r1 = (0d100)
addi    r3,r0,116       ;r3 = 0d116
label:addi    r2,r2,4   ;r2 += 4
lw      r4,-4(r2)       ;r4 = (r2-4)
add     r4,r4,r4        ;r4 *= 2
add     r1,r4,r1        ;r1 += r4
bne     r2,r3,label     ;if(r2 ≠ r3), branch to label
nop

LW 表示加载Word 。它将一个字加载到指定地址的寄存器中。

BNE 表示不等于分支。它执行跟随它的指令没有延迟(这就是为什么我在你的代码后添加了一个nop),并且如果作为参数提交的两个寄存器不相等,则转移到指定的地址。

所以会发生的是r1的初始化值为(0d100),即1.然后r3设置为0d116。

r2递增4,r4等于(0d104)处的值,乘以2,然后加到r1。然后循环直到r2 = 0d116,这意味着永远不会读取0d116处的值。

r1 = 1 + 2×2 + 4×2 + 8×2 = 29