我想将“\n”表示为汇编代码!!比如说
#include <stdio.h> int main() { printf("Hi! My name is Joe.\n I'm 11 years old"); return 0; }
如何在程序集中表示“\n”部件?
xzabzqsa1#
这取决于您使用的特定汇编器,但在某些情况下(包括GAS:https://sourceware.org/binutils/docs/as/Characters.html),它仍然是\n,就像C一样。您可以通过许多不同的方式看到组件的外观,但这些天GodBolt非常好。https://gcc.godbolt.org/z/ZLq3Kn
\n
.LC0: .string "Hi! My name is Joe.\n I'm 11 years old"
你可以看到字符串看起来是一样的。在GAS中,.string创建一个以0结尾的字符串。如果您更改为Clang(使用相同的语法,但对发出哪些指令做出不同的选择),您将看到它使用.asciz。
.string
.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代表零。
.ascii
z
6ovsh4lw2#
要在汇编语言中表达\n,尤其是nasm汇编语言(指向来自dvhh的注解),可以使用0x0a。示例:
nasm
0x0a
string1 db "Hi! My name is Joe.", 0x0a string2 db "I'm 11 years old.", 0x0a
3hvapo4f3#
在NASM语法中,C样式转义是在反勾中处理的,因此您可以将\n写成值为0xa = 10的整数常量
mov byte [mem], `\n` newline: equ `\n` ; or 0xa or 10, but not '\n' or "\n" str1: db `Hello\n` str2: db 'Hello', 0xa ; exactly identical to str1
参见手册。关于GNU汇编程序,请参见its manual:'\n'的工作原理与movb $'\n', (%rdi)类似
'\n'
movb $'\n', (%rdi)
3条答案
按热度按时间xzabzqsa1#
这取决于您使用的特定汇编器,但在某些情况下(包括GAS:https://sourceware.org/binutils/docs/as/Characters.html),它仍然是
\n
,就像C一样。您可以通过许多不同的方式看到组件的外观,但这些天GodBolt非常好。https://gcc.godbolt.org/z/ZLq3Kn
你可以看到字符串看起来是一样的。在GAS中,
.string
创建一个以0结尾的字符串。如果您更改为Clang(使用相同的语法,但对发出哪些指令做出不同的选择),您将看到它使用.asciz
。但是在这两个汇编器中,
\n
是相同的。**并非所有汇编器都支持此语法。”””但很多人做。检查你的装配机的手册。
.string
与.asciz
在大多数目标上相同,都附加了一个零。The manual says在某些ISA的GAS语法中,.string
可能不会附加零,而.asciz
总是附加零,而.ascii
从不附加零。z
代表零。6ovsh4lw2#
要在汇编语言中表达
\n
,尤其是nasm
汇编语言(指向来自dvhh的注解),可以使用0x0a
。示例:
3hvapo4f3#
在NASM语法中,C样式转义是在反勾中处理的,因此您可以将
\n
写成值为0xa = 10的整数常量参见手册。
关于GNU汇编程序,请参见its manual:
'\n'
的工作原理与movb $'\n', (%rdi)
类似