bx在哪些方面比ax更好

时间:2016-03-16 12:41:29

标签: assembly x86-16

我目前正在学习装配8086。 有些命令适用于ax,有些命令不适用。 例如:mov [ax],5不起作用。 为什么这个以及bx寄存器优于ax寄存器的优点是什么? 提前谢谢。

2 个答案:

答案 0 :(得分:5)

bx优于ax的主要优势在于它可以被称为 指向数据段中地址的指针。

您无法在有效地址中使用ax

MOV cx, [ax]     ;doesn't work
MOV cx, [bx]     ;works fine and loads cx with the value which is pointed by bx

您可以称为指针的寄存器是:
bxsidibp

那些不能被称为指针的那些:
axcxdxsp

这是16bit addressing modes的限制。另请参阅标记wiki。

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

dividiv只有单操作数形式,将dx:ax除以源操作数,将结果存储在dx和ax中。

8086还需要ax以获取更多内容,因为它没有movsx,因此您需要在al中放置字节以运行cbw }。

答案 1 :(得分:4)

  

例如: msbuild.exe MySolution.sln /t:Rebuild /p:WarningLevel=0 /p:Configuration=Release ^^^^^^^^^^^^^^^^^ Warning Level Meaning -------- ------------------------------------------- 0 Turns off emission of all warning messages. 1 Displays severe warning messages 2 Displays level 1 warnings plus certain, less-severe warnings, such as warnings about hiding class members 3 Displays level 2 warnings plus certain, less-severe warnings, such as warnings about expressions that always evaluate to true or false 4 (the default) Displays all level 3 warnings plus informational warnings 不起作用。这是为什么?

因为在16位寻址中没有SIB byte,它用于32位寻址以允许mov [ax], 5之类的事情。选择了可用的ModR / M字节组合来编码other effective addresses,例如[eax + ecx * 4][bx+si]