汇编语言抵消了多种存储单词的方式?

时间:2013-09-29 20:02:24

标签: assembly mips offset

我在火星编辑器中使用MIPS,我想知道是否像

sw $s0,8($v0)

相当于:

sw $s0,$v0(8)

我的直觉告诉我情况并非如此,因为它取括号中的whatevers的地址并添加其外部的值。然而,在codeknight在链接中发布的解决方案中,他使用:

循环遍历字符串
lb $t1,mystring($t0)

这几乎就像索引一个数组一样,对于我来说,“添加即时地址()”逻辑对我没有意义。有人可以解释一下吗?

http://www.masmforum.com/board/index.php?PHPSESSID=786dd40408172108b65a5a36b09c88c0&topic=1062.0

1 个答案:

答案 0 :(得分:0)

不可否认,语法有点令人困惑,因为它暗示这两个部分不在同一级别,实际上它们是。因此,一些汇编程序允许您将括号括在直接部分周围,但这是例外。

imm(reg)仅表示内存地址imm+reg,因此mystring($t0)表示内存地址mystring+$t0,因此它确实是索引。无论是直接部分是基础还是相反,都没有区别。这两个都加载mystring的第5个(偏移4)字节:

li $t0, 4
lb $t0, mystring($t0)

la $t0, mystring
lb $t0, 4($t0)