3 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
這取決于您的匯編程序的風(fēng)格。
AT&T:
movl $0xFFFFFFBB, %ecx
英特爾:
mov ecx, 0FFFFFFBBh
FYI,AT&T語法由GNU Assembler之類的匯編器使用,而NASM和其他大多數(shù)語言則使用Intel的匯編器。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
請參閱x86標(biāo)簽Wiki,以獲取到匯編器手冊的鏈接,以及許多其他內(nèi)容。
不同的x86匯編器對十六進(jìn)制常量支持以下一種或兩種語法:
0xDEADBEEF:NASM(和兼容),GNUas,F(xiàn)ASM,MSVC內(nèi)聯(lián)匯編(但不是 MASM)
0DEADBEEFh:NASM(和兼容),F(xiàn)ASM,MASM和TASM。
僅限D(zhuǎn)OS / Windows的匯編器通常僅支持...h語法。
便攜式匯編程序通常支持0x...語法,或兩者都支持。
請注意0開頭:數(shù)字常量始終必須以數(shù)字開頭,以將其與符號(hào)名稱區(qū)分開。
還要注意,匯編器(如C編譯器)可以在匯編時(shí)評估表達(dá)式,因此可以編寫foo & 0xF(如果foo是用foo equ 0xABC或定義的匯編器常量)。您甚至可以從標(biāo)簽中添加/減去標(biāo)簽(它們是鏈接時(shí)常量,而不是匯編時(shí)),因此諸如此類的東西mov eax, OFFSET label - 20仍會(huì)匯編為mov r32, imm32。
從NASM手冊的常量部分:
一些示例(都產(chǎn)生完全相同的代碼):
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
大多數(shù)匯編器還允許使用字符文字,例如'0'ASCII零。甚至'0123'對于打包成32位整數(shù)的四個(gè)ASCII數(shù)字。有些支持轉(zhuǎn)義序列(\n'),有些則支持(例如YASM)。NASM僅支持反引號(hào)內(nèi)的轉(zhuǎn)義序列,而不支持雙引號(hào)。
其他平臺(tái):
ARM匯編器:0xDEADBEEF有效。
我認(rèn)為0x是典型的。0 ... h主要是DOS的東西。
- 3 回答
- 0 關(guān)注
- 694 瀏覽
添加回答
舉報(bào)