2015-09-12 52 views
-1

我應如何區分AH作爲CPU寄存器和Ah作爲10號?區分x86中的Ah和10

mov BH, AH 
+0

通過預先設定零(即'0ah'),因爲彙編器肯定需要。或者,使用前綴形式'0xa'(由某些x86彙編程序支持,如NASM)。 – Michael

回答

2

寫在它前面的零:

mov BH, 0AH 
+0

如果A之前沒有零,該怎麼辦?我已經看到'db \t B1h'是一個有效的代碼。 – barej

+0

@barej'db'不允許寄存器作爲操作數,因爲預計在編譯時評估常量。此外,至少在x86上,'B1h'不是有效的寄存器。 – Downvoter

+0

所以你的意思是取決於上下文嗎? – barej

4

一般而言,以字母開頭的十六進制數將不會在彙編器解釋爲十六進制數,因爲它可以是困惑帶有標識符。這就是爲什麼許多彙編程序強迫您要麼添加前綴「$」,「#」或「0x」,要麼用一個數字開始您的十六進制數(例如「0」,以不更改其值),以避免被解析爲一個標識符。

MOV BH,AH ;AH is a CPU register. It cannot be a symbol (equate or variable) 
MOV BH,0AH ;AH is the hexadecimal value "0A" (10 in decimal) 
MOV BH,$A ;A is the hexadecimal value "0A" in some assemblers 
MOV BH,#A ;A is the hexadecimal value "0A" in some assemblers 
MOV BH,0xA ;A is the hexadecimal value "0A" in some assemblers 
+0

那麼,PE反彙編器怎麼給我'db B1h'? – barej

+2

反彙編器不需要將文本輸入解析成二進制輸出,反過來也是如此,其中不存在混淆 –

+0

我的意思是PE將機器代碼轉換爲文本。其中一條獲得的行是'db B1h' – barej

相關問題