Assembly bx在哪些方面优于ax

Assembly bx在哪些方面优于ax,assembly,x86-16,x86,Assembly,X86 16,X86,我目前正在学习汇编8086。 有些命令可以使用ax,有些则不能。 例如:mov[ax],5不起作用。 这是为什么?bx寄存器比ax寄存器有哪些优点? 提前感谢。与ax相比,bx的主要优点是它可以被称为 指向数据段中地址的指针 您不能在有效地址中使用ax: MOV cx, [ax] ;doesn't work MOV cx, [bx] ;works fine and loads cx with the value which is pointed by bx 可以称为指针的寄存器

我目前正在学习汇编8086。 有些命令可以使用ax,有些则不能。 例如:mov[ax],5不起作用。 这是为什么?bx寄存器比ax寄存器有哪些优点?
提前感谢。

ax
相比,
bx
的主要优点是它可以被称为 指向数据段中地址的指针

您不能在有效地址中使用
ax

MOV cx, [ax]     ;doesn't work
MOV cx, [bx]     ;works fine and loads cx with the value which is pointed by bx
可以称为指针的寄存器是:
bx
si
di
bp

这些是不能被称为指针的:
ax
cx
dx
sp

这是一个限制。另请参见标记wiki


ax
在数学运算方面具有优势,因为一些函数,如
mul
会隐式使用它。
mul-cx
将ax乘以cx,并将结果存储在
dx:ax
中。在386或更高版本上,您可以使用例如
imul bx、cx
来执行
bx*=cx
。它是一个较长的操作码,只产生乘法结果的下半部分(无论有符号还是无符号,这都是相同的,这就是为什么没有两个或三个操作数形式的
mul

div
idiv
仅具有将
dx:ax
除以源操作数的单操作数形式,将结果存储在dx和ax中

8086还需要
ax
来实现比更高版本的CPU更多的功能,因为它没有
movsx
,所以需要在
al
中放入字节才能运行
cbw

例如:
mov[ax],5
不起作用。为什么会这样


因为在16位寻址中没有,这在32位寻址中被用来允许像
[eax+ecx*4]
这样的事情。并且选择了可用的ModR/M字节组合进行编码,例如
[bx+si]
[bp+di]

您有上一条语句的参考吗?是的,我有,例如
mul
操作将指定值相乘或专门注册为ax并将结果存储在dx:axNo,您不能使用
dx
sp
ip
在有效地址中。只要与调试器检查一下,您是对的,我会更正/使最后一句话更清楚,谢谢您指出。这是错误的,双重错误
imul
是有符号的,但是2或3操作数版本对于有符号和无符号都可以正常工作,正如指令集参考中提到的那样。对于
div
/
idiv
,情况并非如此。字母
b
的ascii值高于
a
,因此
b
更优越;-)