2006年12月26日

BSWAP(Byte Swap)

对一个32位寄存器的字节序进行反转,字节0(位0~7)与字节3(位24~31)进行交换,字节1(位8~15)与字节2(位16~23)进行交换。

该指令通常用于将little-endian(低位在前)与big-endian(高位在前) 格式进行互换(按,比方说IPv4的地址通常用网络序,也就是高位在前的方式表示,但Intel x86平台上32位整型却是低位在前)。

如果要交换16位整型值的两个字节,可以使用XCHG指令,BSWAP不可于16位寄存器。

该指令仅被486及486以后的CPU所支持。

该指令不产生异常,也不影响标志寄存器。


XADD(Exchange and Add)

将第1个操作子(目标寄存器或目标内存地址)和第2个操作子(源寄存器)交换,然后将两个操作数的和值赋给目标。目标可以是寄存器或内存,源必须是寄存器。

该指令允许使用LOCK前缀

该指令仅被486及486以后的CPU所支持。

指令执行后,目标操作子中的值为和值,源寄存器中的值是目标操作子中原始值

TEMP = SRC + DESTSRC = DESTDEST = TEMP

标志寄存器中的CF, PF, AF, SF, ZF和OF标志,受加法操作影响(最终目标操作子中的值)。

注意,在保护模式下,如果对齐检查被打开,而内存操作地址并未对齐,且当前特权级是3,则引发异常