Intel汇编-CMPXCHG8B数据交换

# An example of using the CMPXCHG8B instruction (数据交换)

########################## swap instruction ###############
# xchg operand1, operand2    # reg<->reg, reg<->mem, (不能同时是 mem)。当一个操作数是内存位置时,处理器的LOCK信号被自动标明
#                # 防止在交换过程中任何其他处理器访问这个内存位置。缺点是LOCK太耗时,对程序性能有不良影响。
# bswap    operand1        # 当所使用的系统具有不同的字节排列方式时,它很有用。
#                # 反转寄存器中字节的顺序。第0~7位和第24~31位进行交换,第8~15位和第16~23位交换。
#                # 记住这一点很重要:位的顺序没有被反转;被反转的是寄存器中包含的各个字节。
#                # 这样就从小尾数(little-endian)的值生成了大尾数(big-endian)的值,反之亦然。
# xadd source, destination    # 用于交换两个寄存器或者内存位置和寄存器的值,把两个值相加,然后把结果存储在目标位置(reg or mem).
#                # source 必须是寄存器,destination 可以是寄存器或内存位置,并包含相加的结果。
# cmpxchg source, destination    # 比较目标操作数和EAX、AX、AL寄存器中的值。相等,把源操作数的值加载到目标操作数中。
#                # 不相等,就把目标操作数加载到EAX、AX或AL寄存器中。
# cmpxchg8b destination        # 和cmpxchg相似,但它处理8字节值。destination操作数引用一个内存位置,其中的8字节值会与EDX和EAX
#                # 寄存器中包含的值进行比较(EDX高位,EAX低位)。匹配,就把位于ECX:EBX寄存器对中的64位值传送给
#                # 目标内存位置。不匹配,就把目标内存地址中的值加载到EDX:EAX寄存器对中。
########################## swap instruction ###############


.section .data
output:
    .asciz "The swap value is 0x%x\n"
data:
    .byte 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88

.section .text

.globl main
main:
    nop
    movl $0x44332211, %eax
    movl $0x88776655, %edx
    movl $0x11111111, %ebx
    movl $0x22222222, %ecx
    
    push $data
    push $output
    call printf            
    add $8, %esp            
    
    cmpxchg8b data
    
    push %edx
    push $output
    call printf            
    add $8, %esp            

    push $data
    push $output
    call printf            
    add $8, %esp            

    push $0
    call exit


# gcc -o cmpxchg8b 06-cmpxchg8b.s -m32
# The swap value is 0x565d4020
# The swap value is 0x88776655
# The swap value is 0x565d4020    // 我的机器上没有起作用,有空gdb一下看看为何。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值