您现在的位置是:首页 >学无止境 >【更新中】苹果自家的as汇编器的特色风格(与wasm的不同)网站首页学无止境
【更新中】苹果自家的as汇编器的特色风格(与wasm的不同)
简介【更新中】苹果自家的as汇编器的特色风格(与wasm的不同)
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。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结