【问题标题】:Access value at a specific memory address in MIPS访问 MIPS 中特定内存地址的值
【发布时间】:2022-08-17 02:46:49
【问题描述】:
我正在尝试在 mips 中编写一个程序,该程序创建一个内存地址的字数组。
数组:.word 0x10010008,0x1001000C, 0x1001000D, 0x10010007, 0x1001000A
然后我需要遍历数组并检索数组中指定的每个内存地址的值。
我有几个问题:
-
如何让数组最初存储的内存地址不是 0x10010000,而是 0x10010080?
-
然后如何将数组中声明的内存地址视为内存地址而不是值。这样程序就可以转到 0x10010008 并获取存储在那里的值?
标签:
arrays
assembly
mips
mips32
mips64
【解决方案1】:
如何让数组最初存储的内存地址不是 0x10010000,而是 0x10010080?
由于您正在谈论初始化的全局数据数组,并且在通常用于全局数据存储的内存区域中,您有多种选择。默认情况下,MIPS 上的.data 从 0x10010000 开始。因此,如果您希望您的数组位于 0x10010080,您可以要求 0x80 字节的填充,如下所示:
.data
.space 0x80
array:
.word ...
接下来,一些汇编器将允许在.data 之后放置一个数字,如
.data 0x10010080
array:
.word ...
然后如何将数组中声明的内存地址视为内存地址而不是值。这样程序就可以转到 0x10010008 并获取存储在那里的值?
如果您已将它们移至 0x10010080,则尝试访问地址 0x10010008 以获取存储在那里的值是没有意义的。但是,一般来说,la 伪指令用于为寄存器中的标签创建一个 32 位地址,然后您可以将其用作指向数组基址的指针,并使用该基址 + 常量访问元素或进行进一步寻址以访问数组的元素。