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 關注
- 704 瀏覽
添加回答
舉報