C/C++知识点之C指针原理(2)-AT&T汇编
小标 2019-02-19 来源 : 阅读 642 评论 0

摘要:本文主要向大家介绍了 C/C++知识点之C指针原理(2)-AT&T汇编,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了 C/C++知识点之C指针原理(2)-AT&T汇编,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C/C++知识点之C指针原理(2)-AT&T汇编

.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(有符号)

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程