2011-10-04 31 views
2

装配中的字符串做什么?装配中的字符串

在一个内联汇编电话在C,我写

.string \"Hello World\" 

1)有人可以给我如何.string工程的概况?

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

3)如何在最后追加回车? \ n不起作用

+2

你在用什么汇编语言?加油站? –

+0

是的。那么,我的操作系统是x86 linux,我正在用c_编写__asm__程序集,并在gcc中编译,因此GAS是正确的? – Gabe

+0

这听起来像某种引用/转义问题,所以我们需要看到周围的代码。 – user786653

回答

2

.string是GAS中的汇编指令,类似于.long,.int.byte。它所做的只是创建并初始化内存,供您在程序中使用。在这种情况下,汇编器将为13个连续字节的内存中的13个字符分配空间。如果你要查看内存,你会看到:

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

除了在十六进制而不是字符。我不确定%esi指向字符串的方式或原因(它可能是我不熟悉的汇编程序设置,或者是您未向我们显示的一行代码中设置的那种方式)。这意味着%esi“指向”字符串的第一个字节 - 在本例中为第一个["]。您可以使用%esi寄存器通过使用偏移量(%esi + 5将为[o])或通过增加寄存器本身来遍历字节。

要添加换行符,您可能需要尝试\x0D\x0A而不是\n

+0

该字符串以null结尾。所以你的记忆如下: [“] [H] [E] [L] [L] [O] [] [W] [O] [R] [L] [D] [”] [\ 0] – beardhatcode

1
  1. 它只是发出一个字符序列到适当的代码/数据部分。请参阅thisthis(尽管如此,它们使用.ascii)。
  2. 向我们展示代码。
  3. 尝试\\ n或\ 12或\ xa。