【更新中】苹果自家的as汇编器的特色风格(与微软masm汇编器语言风格的不同)
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汇编器语言风格的不同)相关推荐
- 用电脑更新手机ios系统_macOS 11 正式版体验:大更新!苹果把 iOS 风格搬到了电脑上...
原标题:macOS 11 正式版体验:大更新!苹果把 iOS 风格搬到了电脑上 今年的新 macOS 正式版推送,相比往年来得有些迟. 这显然和 Mac 晚发布有关,但往好的方面想,苹果也有了更充裕的 ...
- cocos2d-html5 游戏实战源代码大集合和下载(包括flappy,popstar等----持续更新中----)...
cocos2d-html5 游戏实战源代码大集合和下载(包括flappy,popstar等----持续更新中----) 诚邀您来使用首页新闻日历功能! cocos2dx editor是高效开发跨平台的 ...
- 嵌入式相关开源项目、库、资料------持续更新中
学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...
- ux431黑苹果_UX设计中苹果领导地位的下降
ux431黑苹果 My Samsung Galaxy S10+ just got a software update. It's now running the latest version of O ...
- 【游记】北京-张北草原-锡林郭勒盟自驾4日游(更新中。。。)
OK,又要开始我最擅长的流水账模式了. 趁端午节(6.15-6.18)和一帮小伙伴去草原和内蒙古浪了一波,玩的超级爽,当然代价就是回来疯狂的赶ddl.但是如果让我反过来来想一下,在已经知道这一路的经历 ...
- vue通用后台管理系统(保姆级)--持续更新中
配合目录使用更加友好哦,文章中分享的项目搭建是完全从0-1搭建,完全适用于小白,可用于vue练手项目,目前还在持续更新中,本篇文章不会断更,因工作原因,只能晚上给大家更新,感觉还行的可以给个关注或者收 ...
- Android开源项目源码下载(不断更新中)
原文地址:http://www.cnblogs.com/salam/archive/2010/10/26/1861779.html 最近我搜集了一些提供源码的开源项目,在这里发布出来供大家学习使用. ...
- linux运维常用命令一句话(持续更新中)
整理收集一些Linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...
- 深入理解JS的面向对象(更新中)
面向对象是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世 ...
最新文章
- flash与IPhone
- 数据库存储字符超过2000处理办法;
- 从 6 万用户评论中,选出这 23 门全世界最好的 CS 免费课
- atoi() 与 itoa()函数的内部实现
- ubantu 重启mysql
- [Java基础]System类的常用方法
- 在SQL Server Management Studio(SSMS)中调试存储过程
- asp 后台批量管理程序
- 热烈庆贺:一个月,由70名升级为60名!
- 机器学习案例之_金融反欺诈预测
- 游戏应用快速审核上架
- iGrimaceV8 V8在线威锋源apt.so/tuzhurenv8手机直接下载安装教程图:
- iOS 定位服务编程详解
- icoformat.8bi 64位插件_【茶末余香】这款PS真牛完整官方无精简超强插件集成
- 室内定位方案之蓝牙定位+IBeacon室内定位技术解决方案-新导智能
- 2、AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线
- 【FXCG】纪律管理之入场及建仓原则
- 桑德兰王子会祝福每个战士都有一份不悔的爱情
- python数字转换成中文大写
- div里嵌套div设置不换行的方法
热门文章
- 如何优雅关闭 Netty服务
- 【mud】mud游戏的魅力(拱猪)
- 迷失在那一片蓝海里~
- java毕业生设计大学生网络创业就业管理系统计算机源码+系统+mysql+调试部署+lw
- android 记事本的发展历程,一个android记事本的学习过程记录! (三)
- html5 离线资源缓存,html5的离线缓存使用方法
- 基于Optaplanner和距离矩阵 实践动态路径规划
- BRD、MRD 和 PRD
- std::shared_ptr作为函数形参,通过值传递、引用传递的问题解答
- kettle-JavaScript脚本