c - '\n'如何在汇编中表达?

标签 c assembly

我想将 '\n' 表示为汇编代码!!

例如,

#include <stdio.h>

int main() {
    printf("Hi! My name is Joe.\n I'm 11 years old");

    return 0;
}

如何在Assembly中表达'\n'部分?

最佳答案

这取决于你使用的特定汇编器,但在某些(包括 GAS: https://sourceware.org/binutils/docs/as/Characters.html )中,它仍然是 \n,就像 C 一样。你可以看到汇编的样子以多种不同的方式,但如今 Godbolt 相当不错。

https://gcc.godbolt.org/z/ZLq3Kn

.LC0:
        .string "Hi! My name is Joe.\n I'm 11 years old"

可以看到字符串看起来是一样的。在 GAS 中,.string 创建一个以 0 结尾的字符串。如果您更改为 Clang(它使用相同的语法但对要发出的指令做出不同的选择),您会看到它使用 .asciz

.L.str:
        .asciz  "Hi! My name is Joe.\n I'm 11 years old"

但是在两个汇编器中,\n 是一样的。

并非所有汇编器都支持这种语法。但很多都支持。查看您的汇编器手册。

.string 在大多数目标上与 .asciz 相同,都附加了一个零。 The manual says在某些 ISA 的 GAS 语法中,.string 可能不会附加零,而 .asciz总是如此,.ascii 永远不会。 z 代表零。

关于c - '\n'如何在汇编中表达?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58279528/

相关文章:

c - 显示输入数字指定的矩阵的对角线

c - 如何正确分配新的字符串值?

linux - 如何统计ARM程序执行的指令数?

assembly - jmp 和 ja 有什么区别?

c - 如何将可变参数传递给接受可变参数的函数?

c - 如何清除linux中的socket缓冲区

assembly - 使用 NASM 中调用 malloc 返回的内存

assembly - 如何在没有 XOR 指令的 CPU 上进行 XOR

c++ - 如何定位 WinRT 异步方法调用中出现错误的位置?

c - C 中带索引的指针和数组