我试图写一个程序在mips创建一个字数组的内存地址。数据类型:数据类型然后,我需要遍历数组,并检索数组中指定的每个内存地址的值。我有几个问题:1.如何使数组最初存储的内存地址不是0x10010000,而是0x10010080?1.然后,我如何将数组中声明的内存地址视为内存地址而不是值,以便程序可以转到0x10010008并获取存储在那里的值?
nnt7mjpx1#
如何使数组最初存储的内存地址不是0x 10010000,而是0x 10010080?因为你要讨论的是一个初始化的全局数据数组,并且在一个通常用于全局数据存储的内存区域中,你有几个选择。默认情况下,MIPS上的.data从0x 10010000开始。所以,如果你想让你的数组位于0x 10010080,你可以要求0x 80字节的填充,如下所示:
.data
.data .space 0x80 array: .word ...
接下来,一些汇编器允许在.data之后放置一个数字,如
.data 0x10010080 array: .word ...
然后,我如何将数组中声明的内存地址视为内存地址而不是值,以便程序可以转到0x 10010008并获取存储在那里的值?如果您已经将值移到了0x 10010080,则尝试访问地址0x 10010008以获取存储在那里的值是没有意义的。地址是数字常量,而标签用于将名称等同于地址的数字值。如果你想要某个内存位置的内容,你必须解引用一个指针--形成一个指针(例如使用一个标签)或者使用一个作为参数传递的指针,并使用lw或sw来解引用它。要从标签形成指针,请使用la伪指令(它将生成一个指向标签的32位地址,并将其放入寄存器中),然后您可以将其用作指向数组基址的指针,并通过使用该基址+常量访问元素,或执行进一步的寻址/索引以访问数组元素。
lw
sw
la
1条答案
按热度按时间nnt7mjpx1#
如何使数组最初存储的内存地址不是0x 10010000,而是0x 10010080?
因为你要讨论的是一个初始化的全局数据数组,并且在一个通常用于全局数据存储的内存区域中,你有几个选择。默认情况下,MIPS上的
.data
从0x 10010000开始。所以,如果你想让你的数组位于0x 10010080,你可以要求0x 80字节的填充,如下所示:接下来,一些汇编器允许在
.data
之后放置一个数字,如然后,我如何将数组中声明的内存地址视为内存地址而不是值,以便程序可以转到0x 10010008并获取存储在那里的值?
如果您已经将值移到了0x 10010080,则尝试访问地址0x 10010008以获取存储在那里的值是没有意义的。
地址是数字常量,而标签用于将名称等同于地址的数字值。
如果你想要某个内存位置的内容,你必须解引用一个指针--形成一个指针(例如使用一个标签)或者使用一个作为参数传递的指针,并使用
lw
或sw
来解引用它。要从标签形成指针,请使用
la
伪指令(它将生成一个指向标签的32位地址,并将其放入寄存器中),然后您可以将其用作指向数组基址的指针,并通过使用该基址+常量访问元素,或执行进一步的寻址/索引以访问数组元素。