原则上,平方寄存器的值并不难:
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汇编中mul
和imul
命令的有效参数吗?
答案 0 :(得分:3)
是的,mul ax
将ax*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),则不会对您进行乘法运算。