Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 组装中的字符串_String_Assembly - Fatal编程技术网

String 组装中的字符串

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个字符分配空间。如果

字符串在汇编中做什么

在c中的一个内联asm调用中,我写道

.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
  • 给我们看看代码
  • 请尝试\\n或\12或\xa

  • 你用的是什么汇编程序?GAS?是的。我的操作系统是x86 linux,我用c编写汇编程序,用gcc编译,所以它是GAS,对吗?听起来像是引用/转义问题,所以我们需要看看周围的代码。