为了账号安全,请及时绑定邮箱和手机立即绑定

C指针原理(2)-AT&T汇编

标签:
C++


.section .text

data:

.byte 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01#8字节

.globl main

main:

movl $0x12345678,%edx

bswap %edx#反转字符顺序 ,结果为0x87654321 

movl %edx,%eax

movl $1,%ebx

xadd %ebx,%eax#交换%eax和%ebx的值,并相加,结果放在目标位置%eax

cmpxchg %edx,%ebx#如果目标操作数%ebx等于%eax、16位是ax,8位是al,则把源操作数%edx的值加载到%eax中、16位

#是ax,8位是al,如果不等,则把目标操作数%ebx加到源操作数%edx加载到%eax中、16位是ax,8位是al

movl $2,%edx#高位

movl $3,%eax#低位

cmpxchg8b data#如果%edx:%eax组成的8字节值与目标值data匹配,则把%edx:%eax组成的8字节值传送到目标内存位置

#,否则将目标值data加载到%edx:%eax

pushad 

popad

#pusha/popa 压入弹出所有16位通用寄存器

#pushad/popad 压入弹出所有32位通用寄存器 

#pushf/popf 压入弹出EFLAGS寄存器的低16位

#pushf/popf 压入弹出EFLAGS寄存器的全部32位

AT&T汇编关于地址和取地址操作的示例代码如下:

.section .data

   mynum:

   .int 8

   mygs:

   .asciz "%x----%x----%x\n"

.section .text

   .globl main

   main:

      leal mynum,%eax #将mynum地址复制到%eax  

      movl (%eax),%ebx#将%eax内地址所指内容复制到%ebx

      movl mynum,%ecx#将mynum内容复制到%ecx中

      push %ecx

      push %ebx

      push %eax

      push $mygs

      call printf

      push $0

      call exit

乘法和除法操作如下:

.section .data

.section .text

  .globl main

  main:

    movl $2,%eax

    movl $5,%ebx

    mul  %ebx#%eax*%ebx->%eax,无符号乘法

    movl $-2,%eax

    movl  $5,%ebx

    imul  %ebx#%eax*%ebx->%eax,有符号乘法 

 #除法使用dev和idev(有符号)

©著作权归作者所有:来自51CTO博客作者myhaspl的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消