assembly 以MIPS为单位访问特定内存地址的值

eeq64g8w  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(198)

我试图写一个程序在mips创建一个字数组的内存地址。
数据类型:数据类型
然后,我需要遍历数组,并检索数组中指定的每个内存地址的值。
我有几个问题:
1.如何使数组最初存储的内存地址不是0x10010000,而是0x10010080?
1.然后,我如何将数组中声明的内存地址视为内存地址而不是值,以便程序可以转到0x10010008并获取存储在那里的值?

nnt7mjpx

nnt7mjpx1#

如何使数组最初存储的内存地址不是0x 10010000,而是0x 10010080?
因为你要讨论的是一个初始化的全局数据数组,并且在一个通常用于全局数据存储的内存区域中,你有几个选择。默认情况下,MIPS上的.data从0x 10010000开始。所以,如果你想让你的数组位于0x 10010080,你可以要求0x 80字节的填充,如下所示:

.data
    .space 0x80
array:
    .word ...

接下来,一些汇编器允许在.data之后放置一个数字,如

.data 0x10010080
array:
    .word ...

然后,我如何将数组中声明的内存地址视为内存地址而不是值,以便程序可以转到0x 10010008并获取存储在那里的值?
如果您已经将值移到了0x 10010080,则尝试访问地址0x 10010008以获取存储在那里的值是没有意义的。
地址是数字常量,而标签用于将名称等同于地址的数字值。
如果你想要某个内存位置的内容,你必须解引用一个指针--形成一个指针(例如使用一个标签)或者使用一个作为参数传递的指针,并使用lwsw来解引用它。
要从标签形成指针,请使用la伪指令(它将生成一个指向标签的32位地址,并将其放入寄存器中),然后您可以将其用作指向数组基址的指针,并通过使用该基址+常量访问元素,或执行进一步的寻址/索引以访问数组元素。

相关问题