汇编中的字符串

6

.string 在汇编语言中的作用是什么?

在 C 语言的内联 asm 调用中,我写了以下代码:

.string \"Hello World\"

1) 有人能够给我简要介绍.string是如何工作的吗?

2) 不知何故,那个值被保存在%esi中。为什么?

3) 我如何在结尾添加回车符?\n不起作用。


2
你使用哪个汇编器?GAS吗? - Alexey Frunze
是的。我的操作系统是x86 Linux,我正在使用C语言中的__asm__编写汇编代码,并在gcc中进行编译,所以它是GAS吧? - Gabe
2
听起来像是引用/转义问题,所以我们需要看周围的代码。 - user786653
2个回答

5

.string是GAS汇编语言中的一种指令,类似于.long.int.byte。它的作用是创建和初始化内存,供程序使用。.string指令会自动在字符串末尾添加[\0]来表示字符串的结束。在本例中,汇编器为14个字符分配了14个连续的字节的空间。如果你查看内存,你会看到这样的内容:

["][H][e][l][l][o][ ][W][o][r][l][d]["][\0]

除了十六进制而不是字符外,我不确定为什么%esi指向该字符串(这可能是我不熟悉的汇编设置,或者在您没有展示给我们的代码行上被设置为那样)。它的意思是%esi“指向”字符串的第一个字节-在这种情况下是第一个 [“] 。您可以使用%esi寄存器通过偏移量(%esi + 5 将是 [o] )或递增寄存器本身来循环遍历字节。

要添加换行符,您可以尝试使用\x0D\x0A而不是\n


1
  1. 它只是将一系列字符发射到适当的代码/数据部分。请参见thisthis(虽然它们使用.ascii)。
  2. 展示给我们代码。
  3. 尝试使用\\n或\12或\xa。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接