繁体   English   中英

XCHG如何在8086处理器中实现?

[英]How is XCHG implemented in a 8086 processor?

我正在阅读的有关8086汇编的书指出:

XCHG AX, VAR

等效于:

MOV DX, AX        ; DX is a temporary register
MOV AX, VAR
MOV VAR, DX

它是否真的是在使用数据寄存器(例如DX)并在内部执行相当于三个移动指令的指令,还是在8086中做了其他事情? 如果前一种情况成立,那么数据寄存器的内容将如何处理?

有两种方法可以实现XCHG指令。

一种。 使用隐藏的寄存器。 8085具有2个隐藏的寄存器 ,但未知是否将这些寄存器用于xchange指令。 8086到目前为止尚未进行反向工程,因此我们不知道它有多少个隐藏寄存器。

Temp = A
A = B
B = Temp    

b。 使用异或技巧。

A = A xor B
B = A xor B
A = A xor B  (Now A and B are swapped).  

请注意,方法A和方法B都使用3个步骤,因此无法通过指令时序告诉使用哪种方法。

请注意,方法A可以并行化而方法B不能并行化,但是8086并没有进行这种优化。

现代CPU上xchg速度始终是mov一半,并且需要两倍的uops,这暗示着正在使用的临时寄存器,这可以分两步完成,因为使用寄存器重命名将前两个分配合并为一个。

如果指令是硬连线的,则可以与mov相同的速度完成,但事实并非如此,大概是因为很少使用它。

在非流水线处理器上3至4个时钟,有两次读取和两次写入,因此可能并行执行。

read register
read external
swap (logic, route signals, no time for xor nor extra register stuff) same clock cycle as one of the reads.
write both if one is external, if both are registers then an additional clock.

这样就构成了3到4。如果有一个临时寄存器或一些xor,则将是另外两个/三个时钟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM