【问题标题】:MIPS String StorageMIPS 字符串存储
【发布时间】:2018-04-17 02:24:55
【问题描述】:

所以在 MIPS 中,我们可以在程序的 .data 部分为字符串分配空间。但是,这仅适用于预定义的字符串变量。假设有人在我们的代码中的某处调用了一个函数,如下所示:

myFunc("blablabla"); 

要在 MIPS 中执行此操作,我们需要将 blablabla 存储在内存中。我们如何分配内存来将blablabla 存储在我们程序的.text 段中,而不是在.data 中?

【问题讨论】:

  • “我们如何分配内存来存储 blablabla 在我们程序的 .text 段中” 这与将数据放在 .data 部分没有什么不同,除了你有以确保所有指令都是字对齐的。但是编译器可能会将该字符串文字放在其中一个数据部分中。

标签: c arrays string assembly mips


【解决方案1】:

我认为你有些困惑。您的字符串常量不必在文本部分中。它们可以像其他变量一样放入数据部分。

一天结束时的函数调用只获取字符串的地址(您将在数据部分创建的标签)。

您可以在移动指令的文本部分中引用它。

【讨论】:

    【解决方案2】:

    你试过这个吗?

    li      $v0, 9                  # Code in %v0: 9 -> Allocate heap memory 
    li      $a0, 8                  # Allocate 8 bytes
    syscall                         # System call for allocating space
    

    您可以从堆中分配内存并存储字符串。您可以更改我使用的 8 个字节,例如您的字符串具有的字符数。如何计算字符的问题已经得到解答。

    syscall之后,寄存器$v0保存了分配空间的地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      相关资源
      最近更新 更多