装配中的字符串做什么?装配中的字符串
在一个内联汇编电话在C,我写
.string \"Hello World\"
1)有人可以给我如何.string工程的概况?
2)不知何故,价值被保存在%esi。为什么?
3)如何在最后追加回车? \ n不起作用
装配中的字符串做什么?装配中的字符串
在一个内联汇编电话在C,我写
.string \"Hello World\"
1)有人可以给我如何.string工程的概况?
2)不知何故,价值被保存在%esi。为什么?
3)如何在最后追加回车? \ n不起作用
.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
。
该字符串以null结尾。所以你的记忆如下: [“] [H] [E] [L] [L] [O] [] [W] [O] [R] [L] [D] [”] [\ 0] – beardhatcode
你在用什么汇编语言?加油站? –
是的。那么,我的操作系统是x86 linux,我正在用c_编写__asm__程序集,并在gcc中编译,因此GAS是正确的? – Gabe
这听起来像某种引用/转义问题,所以我们需要看到周围的代码。 – user786653