.string 在汇编中有什么作用?
内联 组装 调用c,我写了
.string \"Hello World\"
1) 有人能给我一个关于 .string 如何工作的概述吗?
2)该值以某种方式保存在 %esi 中。为什么?
3)如何在末尾附加回车?\n 不起作用
最佳答案
.string
是 GAS 中的汇编指令,类似于 .long
, .int
, 或 .byte
.它所做的只是创建和初始化内存供您在程序中使用。 .string
指令将自动用 [\0]
将字符串空终止为你。在这种情况下,汇编器为 14 个连续字节的内存中的 14 个字符分配空间。如果你要查看内存,你会看到:
["][H][e][l][l][o][ ][W][o][r][l][d]["][\0]
除了十六进制而不是字符。我不确定如何或为什么
%esi
指向字符串(它要么是我不熟悉的汇编程序设置,要么是在您未向我们展示的代码行中以这种方式设置的)。这意味着%esi
“指向”字符串的第一个字节——在本例中是第一个 ["]
.您可以使用 %esi
register 使用偏移量( %esi + 5
将是 [o]
)或通过增加寄存器本身来循环遍历字节。要添加换行符,您可能想尝试
\x0D\x0A
而不是 \n
.
关于程序集中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7646721/