<span>CMPXCHG指令</span>
一、CMPXCHG汇编指令详解。
这条指令将al\ax\eax\rax中的值与首操作数比较:
1.如果相等,第2操作数的直装载到首操作数,zf置1。(相当于相减为0,所以0标志位置位)
2.如果不等, 首操作数的值装载到al\ax\eax\rax,并将zf清0
二、举例说明。
例如:
CMPXCHG CX,DX 首操作数: CX 第2操作数:DX
(1) 如果指令执行前:
(AX) = 2300H (CX) = 2300H (DX) = 2400H
则指令执行后, 因(CX)= (AX), 故
第2操作数(DX)直装载到首操作数(CX),ZF置1。
(CX)=2400H,ZF=1
(2) 如果指令执行前:
(AX) = 2500H (CX) = 2300H (DX) = 2400H
则指令执行后因首操作数(CX)不等于(AX), 即(CX)!=(AX) 。
寄存器( al\ax\eax\rax )中的值与首操作数(CX)不等, 那么首操作数的值 (CX)直接装载到al\ax\eax\rax中,即(AX)= (CX 的值2300H),并将zf清0。
最终得到:
(AX)=2300H,ZF=0
CMPXCHG隐含使用EAX寄存器。象这种隐含使用其他寄存器的指令还有不少。对于哪种操作影响标志位也需要慢慢熟悉。