as汇编器是苹果的汇编器,Xcode 生成的汇编代码也是as风格的,而as风格与大部分人在大学里所学的微软的masm风格大相径庭,所以本文会列出二者的不同。不过由于细节太多,没法一次性写出所有的不同,所以会持续更新。

你可能会找到一本手册名为《Mac OS X Assembler Guide》,但是这本手册出自 2005 年,是为了过度到 Intel 所写的。但是现在很多事情已经变了,现在的as手册最近更新日期为 2020 年 4 月 23 日,也就是 M1 登场的日子。

寄存器表达方式

masm中,寄存器直接写,比如:

mov eax, ebx

但是在as中,为了不与标识符(identifier,其实就是常说的变量)搞混,需要在寄存器前面加上百分号%,并且必须小写。如下:

movq    %rsp, %rbp

指令参数(最重要的区别)

这是最重要的一个区别!在masm中,表示a=a+b汇编指令如下:

add a, b

会将后者加到前者上。

但是在as中,表示a=a+b汇编指令是下面的结构:

add b, a

是直接按照顺序执行下去的。

指令中的数值

masm中,如果想将一个指令参数设置为数值,比如说10,那么可以写成以下样式

mov a, 10

但是在as中,要加上$,如下:

mov $10, a

不过虽然麻烦,但是可以在后面加上括号来进行一些简单的计算,如下:

mov $(2*5), a

地址偏移量

masm中,如果想表示一个地址偏移量(很多情况下就是表示一个变量的地址),那么写法如下

mov eax, [ebp+8]

但是在as中,写法为偏移量(基础寄存器, 下标寄存器, 缩放),看着很复杂,但是实际情况大多如下:

movl    %edi, -4(%rbp)

十六进制写法

masm中,十六进制被写成以H或h结尾的,例如5c0dH。但是在 as中,需要写成0x开头的,例如0x1234

【更新中】苹果自家的as汇编器的特色风格(与微软masm汇编器语言风格的不同)相关推荐

  1. 用电脑更新手机ios系统_macOS 11 正式版体验:大更新!苹果把 iOS 风格搬到了电脑上...

    原标题:macOS 11 正式版体验:大更新!苹果把 iOS 风格搬到了电脑上 今年的新 macOS 正式版推送,相比往年来得有些迟. 这显然和 Mac 晚发布有关,但往好的方面想,苹果也有了更充裕的 ...

  2. cocos2d-html5 游戏实战源代码大集合和下载(包括flappy,popstar等----持续更新中----)...

    cocos2d-html5 游戏实战源代码大集合和下载(包括flappy,popstar等----持续更新中----) 诚邀您来使用首页新闻日历功能! cocos2dx editor是高效开发跨平台的 ...

  3. 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...

  4. ux431黑苹果_UX设计中苹果领导地位的下降

    ux431黑苹果 My Samsung Galaxy S10+ just got a software update. It's now running the latest version of O ...

  5. 【游记】北京-张北草原-锡林郭勒盟自驾4日游(更新中。。。)

    OK,又要开始我最擅长的流水账模式了. 趁端午节(6.15-6.18)和一帮小伙伴去草原和内蒙古浪了一波,玩的超级爽,当然代价就是回来疯狂的赶ddl.但是如果让我反过来来想一下,在已经知道这一路的经历 ...

  6. vue通用后台管理系统(保姆级)--持续更新中

    配合目录使用更加友好哦,文章中分享的项目搭建是完全从0-1搭建,完全适用于小白,可用于vue练手项目,目前还在持续更新中,本篇文章不会断更,因工作原因,只能晚上给大家更新,感觉还行的可以给个关注或者收 ...

  7. Android开源项目源码下载(不断更新中)

    原文地址:http://www.cnblogs.com/salam/archive/2010/10/26/1861779.html 最近我搜集了一些提供源码的开源项目,在这里发布出来供大家学习使用. ...

  8. linux运维常用命令一句话(持续更新中)

    整理收集一些Linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...

  9. 深入理解JS的面向对象(更新中)

    面向对象是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世 ...

最新文章

  1. flash与IPhone
  2. 数据库存储字符超过2000处理办法;
  3. 从 6 万用户评论中,选出这 23 门全世界最好的 CS 免费课
  4. atoi() 与 itoa()函数的内部实现
  5. ubantu 重启mysql
  6. [Java基础]System类的常用方法
  7. 在SQL Server Management Studio(SSMS)中调试存储过程
  8. asp 后台批量管理程序
  9. 热烈庆贺:一个月,由70名升级为60名!
  10. 机器学习案例之_金融反欺诈预测
  11. 游戏应用快速审核上架
  12. iGrimaceV8 V8在线威锋源apt.so/tuzhurenv8手机直接下载安装教程图:
  13. iOS 定位服务编程详解
  14. icoformat.8bi 64位插件_【茶末余香】这款PS真牛完整官方无精简超强插件集成
  15. 室内定位方案之蓝牙定位+IBeacon室内定位技术解决方案-新导智能
  16. 2、AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线
  17. 【FXCG】纪律管理之入场及建仓原则
  18. 桑德兰王子会祝福每个战士都有一份不悔的爱情
  19. python数字转换成中文大写
  20. div里嵌套div设置不换行的方法

热门文章

  1. 如何优雅关闭 Netty服务
  2. 【mud】mud游戏的魅力(拱猪)
  3. 迷失在那一片蓝海里~
  4. java毕业生设计大学生网络创业就业管理系统计算机源码+系统+mysql+调试部署+lw
  5. android 记事本的发展历程,一个android记事本的学习过程记录! (三)
  6. html5 离线资源缓存,html5的离线缓存使用方法
  7. 基于Optaplanner和距离矩阵 实践动态路径规划
  8. BRD、MRD 和 PRD
  9. std::shared_ptr作为函数形参,通过值传递、引用传递的问题解答
  10. kettle-JavaScript脚本