程序集中的字符串

标签 string assembly

.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/

相关文章:

java - Java 编译器是否有效地处理内联字符串?

java - 与 "*"一起使用时 String::replaceFirst() 有问题吗?

c++ - 如何从文件中识别数据类型

assembly - x86 汇编中的 mov 指令

assembly - 了解汇编语言操作数形式

c++ - 内存屏障到底要解决什么问题?

java - 在Java中使用 "@"的文字字符串?

javascript - 跨语言字符串转义

c++ - RDTSC 在 Ubuntu 中运行缓慢

GCC 内联汇编副作用