MIPS汇编语言遍历数组

时间:2013-10-24 19:50:14

标签: syntax mips

要遍历一个数组,你会向左移动逻辑2次,还是每次将指针增加到基地址4?什么是首选方法?什么是更好的方法?

1 个答案:

答案 0 :(得分:2)

让我们假设您从$ t0开始指向单词数组开头的内存位置:

.data
mywords: .word 0:100 # 100 words, initialized to 0x0
.text
la $t0, mywords

假设你从$ t0的值开始,我们不想转移,这里有一些选择:

sll方法

# $t0 points to base address, $t1 word counter initialized to zero
loop:
sll $t2, $t1, 2 # Turn word pointer into a byte pointer
add $t2, $t0, $t2 # Get pointer to the word we want
lw $s0, 0($t2) # Load the word into $s0
addi $t1, $t1, 1 # Point to next word
# (do something useful here)
j loop

添加方法,保留$ t0

# $t0 points to base address, $t1 byte counter initialized to zero
loop:
add $t2, $t0, $t1 # Get pointer to the word we want
lw $s0, 0($t2) # Load the word into $s0
addi $t1, $t1, 4 # Point to next word
# (do something useful here)
j loop

添加方法,废弃$ t0

# $t0 points to base address
loop:
lw $s0, 0($t0) # Load the word into $s0
addi $t0, $t0, 4 # Point to next word
# (do something useful here)
j loop

我们刚刚在课后讨论,这些构建循环的方法中哪一种更有效。我一直在做sll方法,因为我喜欢玩位...但它看起来效率最低(通过一条指令)。

我想这取决于你需要保留哪些变量。

  • sll方法:$ t0告诉你你从哪里开始,$ t1告诉你哪个单词 你在,$ t2是划痕

  • 添加方法1:$ t0告诉你你从哪里开始,$ t1告诉你哪个 您正在使用 byte ,$ t2是划痕

  • 添加方法2:不知道你在哪里,但它释放了$ t1和$ t2

哪一个“更好”将像往常一样依赖于您的计划的需求。