【问题标题】:Access value at a specific memory address in MIPS访问 MIPS 中特定内存地址的值
【发布时间】:2022-08-17 02:46:49
【问题描述】:

我正在尝试在 mips 中编写一个程序,该程序创建一个内存地址的字数组。

数组:.word 0x10010008,0x1001000C, 0x1001000D, 0x10010007, 0x1001000A

然后我需要遍历数组并检索数组中指定的每个内存地址的值。

我有几个问题:

  1. 如何让数组最初存储的内存地址不是 0x10010000,而是 0x10010080?

  2. 然后如何将数组中声明的内存地址视为内存地址而不是值。这样程序就可以转到 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 位地址,然后您可以将其用作指向数组基址的指针,并使用该基址 + 常量访问元素或进行进一步寻址以访问数组的元素。

    【讨论】:

      猜你喜欢
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2018-10-10
      • 2010-11-01
      • 1970-01-01
      • 2012-08-31
      相关资源
      最近更新 更多