我在8086集会上读到的那本书
XCHG AX, VAR
相当于:
MOV DX, AX ; DX is a temporary register
MOV AX, VAR
MOV VAR, DX
它是否真的使用数据寄存器(如DX),内部执行相当于三个移动指令,还是在8086中执行其他操作? 如果前一种情况是真的,那么数据寄存器内容会发生什么?
答案 0 :(得分:1)
有两种方法可以实现XCHG指令。
一个。使用隐藏的寄存器。 8085 has 2 hidden registers,但不知道它是否将这些寄存器用于xchange指令。 8086尚未进行逆向工程,因此我们不知道它有多少隐藏的寄存器。
Temp = A
A = B
B = Temp
A = A xor B
B = A xor B
A = A xor B (Now A and B are swapped).
请注意,方法A和B都使用3个步骤,因此无法使用指令时序告知使用哪种方法。
请注意,方法A可以并行化,方法B不能,但8086不会进行这种花哨的优化。
在modern CPU's上,xchg
始终是mov
的一半,并且需要两倍的uop,暗示正在使用的临时寄存器,这可以分两步完成,因为前两个赋值使用寄存器重命名融合为一个。
如果指令是硬连线的,它可以以与mov
相同的速度完成,但似乎并非如此,大概是因为很少使用它。
答案 1 :(得分:-2)
非流水线处理器上有3到4个时钟,有两个读取和两个写入,因此也许可以并行一个。
part = cell(4,1);
所以它组成3到4.如果有一个临时寄存器或一些xors,它将是另外几个/三个时钟。