在段中的字符串之间保留填充

时间:2016-07-16 16:32:05

标签: assembly mips32 mars-simulator

我使用火星4.5来模拟mips32。 我想要做的是保存字符串(.asciiz)而不是与另一个连续的字符串,而是将它们保存在内存的不同位置。仍然彼此靠近,但有差距。

例如:

.data 
string_1: .asciiz  "\nHello, world"
string_2: .asciiz "\n...assembly....\n"

在我的情况下,string_1会自动保存在数据段的地址0x10010000处。

我希望string_2位于0x10010080之类的地址,而不是string1之后的地址。

我可以编辑数据段地址吗?

1 个答案:

答案 0 :(得分:0)

这看起来像GNU作为语法,所以我假设MARS只使用气体。

使用the .org directive将当前输出位置增加到给定的绝对值。 (阅读手册以确保您理解其中的限制,例如仅在一个部分内,并且您不能倒退。)

.data
    string_1: .asciiz  "\nHello, world"
    .org 0x10010080            # fill with zeros until this address
    string_2: .asciiz "\n...assembly....\n"

另请注意,如果您不打算写字符串常量,通常应将它们放在.rodata中。

更常见的是只需要对齐某些2次幂边界; use .p2align为此。

如果要使用固定数量的字节进行填充,请使用.zero size。例如.zero 1234汇编为1234个字节的零。