Assembly 在x86中区分Ah和10

Assembly 在x86中区分Ah和10,assembly,x86,cpu-registers,Assembly,X86,Cpu Registers,如何区分AH作为CPU寄存器和AH作为数字10 mov BH, AH 在其前面写一个零: mov BH, 0AH 在其前面写一个零: mov BH, 0AH 通常,在汇编程序中,以字母开头的十六进制数不会被解释为十六进制数,因为它可能与标识符混淆。这就是为什么许多汇编程序强制您添加前缀“$”、“#”或“0x”,或以数字开头十六进制数(“例如,0”表示不改变其值),以避免被解析为标识符 MOV BH,AH ;AH is a CPU register. It cannot be a symb

如何区分
AH
作为CPU寄存器和
AH
作为数字10

mov BH, AH

在其前面写一个零:

mov BH, 0AH

在其前面写一个零:

mov BH, 0AH

通常,在汇编程序中,以字母开头的十六进制数不会被解释为十六进制数,因为它可能与标识符混淆。这就是为什么许多汇编程序强制您添加前缀“$”、“#”或“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

通常,在汇编程序中,以字母开头的十六进制数不会被解释为十六进制数,因为它可能与标识符混淆。这就是为什么许多汇编程序强制您添加前缀“$”、“#”或“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


按照汇编程序的要求,预先加上一个零(即
0ah
)。或者,使用前缀形式
0xa
(某些x86汇编程序支持,如NASM)。按照汇编程序的要求,预先加上零(即
0ah
)。或者,使用前缀形式
0xa
(由一些x86汇编程序支持,如NASM)。如果在一个?我认为
db B1h
是有效的代码。@barej
db
不允许寄存器作为操作数,因为需要在编译时计算常量。此外,
B1h
不是有效的寄存器,至少在x86上是这样。那么你的意思是它取决于上下文吗?@barej那么,
B1h
就像我说的,没有有效的寄存器,所以它在任何上下文中都不会被解释为寄存器。但是,如果它是有效的,那么
db
指令肯定会将其解释为常量,即
0xb1
。我想知道的不是
B1h
作为人类读者的实际含义。但是汇编程序的标准。有什么标准吗?如果A前面没有零呢?我认为
db B1h
是有效的代码。@barej
db
不允许寄存器作为操作数,因为需要在编译时计算常量。此外,
B1h
不是有效的寄存器,至少在x86上是这样。那么你的意思是它取决于上下文吗?@barej那么,
B1h
就像我说的,没有有效的寄存器,所以它在任何上下文中都不会被解释为寄存器。但是,如果它是有效的,那么
db
指令肯定会将其解释为常量,即
0xb1
。我想知道的不是
B1h
作为人类读者的实际含义。但是汇编程序的标准。有什么标准吗?那么,PE反汇编程序如何给我提供
DBB1H
?反汇编程序不必将文本输入解析为二进制输出,反之亦然,在这种情况下不会产生混淆。我的意思是,PE将机器码转换为文本。其中一行是
db B1h
考虑到我们正在讨论如何解释某个文本输入:文本序列“MOV AX,ABCDh”可以解释为十六进制常数的中间MOV到寄存器AX,或者符号ABCDh到AXH的中间移动是否意味着没有关于数字的严格汇编规则?那么,PE反汇编程序如何给我提供
DBB1H
?反汇编程序不必将文本输入解析为二进制输出,反之亦然,其中没有混淆,我是指PE将机器代码转换为文本。其中一行是
db B1h
考虑到我们正在讨论如何解释某个文本输入:文本序列“MOV AX,ABCDh”可以解释为十六进制常数的中间MOV到寄存器AX,或者符号ABCDh到ax的值中间移动,这是否意味着没有关于数字的严格汇编规则?