String 组装中的字符串
字符串在汇编中做什么 在c中的一个内联asm调用中,我写道String 组装中的字符串,string,assembly,String,Assembly,字符串在汇编中做什么 在c中的一个内联asm调用中,我写道 .string \"Hello World\" 1) 有人能给我一个关于.string如何工作的概述吗 2) 该值以某种方式保存在%esi中。为什么? 3) 如何在末端附加回车符\n不起作用.string是GAS中的汇编指令,类似于.long、.int或.byte。它所做的只是创建并初始化内存,以便在程序中使用。.string指令将为您自动使用[\0]终止字符串。在这种情况下,汇编程序在14个连续字节的内存中为14个字符分配空间。如果
.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
寄存器使用偏移量(%esi+5
将是[o]
)或通过增加寄存器本身来循环字节
要添加新行,您可能需要尝试\x0D\x0A
而不是\n
.ascii
)你用的是什么汇编程序?GAS?是的。我的操作系统是x86 linux,我用c编写汇编程序,用gcc编译,所以它是GAS,对吗?听起来像是引用/转义问题,所以我们需要看看周围的代码。