英特尔8086组装 - 平方寄存器

时间:2010-07-18 20:10:09

标签: assembly micro-optimization x86-16

原则上,平方寄存器的值并不难:

mov ax, [var]
mov cx, [var]
mul cx         // square of answer is in DX:AX

但是我开始思考 - 我正在学习汇集奖励效率的课程;甚至一条线的差异也可能达到5分。

我意识到这是微优化,但下面的代码会以相同的方式执行吗?:

mov ax, [var]
mul ax          // is answer still in DX:AX ?

我想用更简单的方式来表达我的问题:AX(或AL / AH)是8086汇编中mulimul命令的有效参数吗?

2 个答案:

答案 0 :(得分:3)

是的,mul axax*ax置于dx:ax

答案 1 :(得分:1)

你可以使用mul ax它会做DX:AX = AX * AX 但请注意,在这种情况下,您将失去AX中的值,因此如果您需要再次使用此值,则最好使用mul bx选项,因为BX保持不变。

此外,如果您使用mul al或(mul ah),您将不会执行AX = AX AX但AX = AL AL(或AX = AL * AH),因此如果AX中的值更大如果您完全忽略并覆盖值的较高部分(忽略AH),则不会对您进行乘法运算。