Intel汇编-BSWAP数据交换

# An example of using the BSWAP 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"
.section .text

.globl main
main:
    nop
    xor %ebx, %ebx
    movl $0x12345678, %ebx
    bswap %ebx    
    push %ebx
    push $output
    call printf            # printf(output, ebx)
    add $8, %esp            # 还原esp
    push $0
    call exit

# gcc -o swap 04-swap.s -m32
# The swap value is 0x78563412        # 和原始值相反的尾数顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值