3 回答
TA贡献2037条经验 获得超6个赞
这取决于您的汇编程序的风格。
AT&T:
movl $0xFFFFFFBB, %ecx
英特尔:
mov ecx, 0FFFFFFBBh
FYI,AT&T语法由GNU Assembler之类的汇编器使用,而NASM和其他大多数语言则使用Intel的汇编器。
TA贡献1836条经验 获得超3个赞
请参阅x86标签Wiki,以获取到汇编器手册的链接,以及许多其他内容。
不同的x86汇编器对十六进制常量支持以下一种或两种语法:
0xDEADBEEF:NASM(和兼容),GNUas,FASM,MSVC内联汇编(但不是 MASM)
0DEADBEEFh:NASM(和兼容),FASM,MASM和TASM。
仅限DOS / Windows的汇编器通常仅支持...h语法。
便携式汇编程序通常支持0x...语法,或两者都支持。
请注意0开头:数字常量始终必须以数字开头,以将其与符号名称区分开。
还要注意,汇编器(如C编译器)可以在汇编时评估表达式,因此可以编写foo & 0xF(如果foo是用foo equ 0xABC或定义的汇编器常量)。您甚至可以从标签中添加/减去标签(它们是链接时常量,而不是汇编时),因此诸如此类的东西mov eax, OFFSET label - 20仍会汇编为mov r32, imm32。
从NASM手册的常量部分:
一些示例(都产生完全相同的代码):
mov ax,200 ; decimal
mov ax,0200 ; still decimal
mov ax,0200d ; explicitly decimal
mov ax,0d200 ; also decimal
mov ax,0c8h ; hex
mov ax,$0c8 ; hex again: the 0 is required
mov ax,0xc8 ; hex yet again
mov ax,0hc8 ; still hex
mov ax,310q ; octal
mov ax,310o ; octal again
mov ax,0o310 ; octal yet again
mov ax,0q310 ; octal yet again
mov ax,11001000b ; binary
mov ax,1100_1000b ; same binary constant
mov ax,1100_1000y ; same binary constant once more
mov ax,0b1100_1000 ; same binary constant yet again
mov ax,0y1100_1000 ; same binary constant yet again
大多数汇编器还允许使用字符文字,例如'0'ASCII零。甚至'0123'对于打包成32位整数的四个ASCII数字。有些支持转义序列(\n'),有些则支持(例如YASM)。NASM仅支持反引号内的转义序列,而不支持双引号。
其他平台:
ARM汇编器:0xDEADBEEF有效。
我认为0x是典型的。0 ... h主要是DOS的东西。
- 3 回答
- 0 关注
- 634 浏览
添加回答
举报