Skip to content

assembly

ShenYj edited this page Jul 24, 2023 · 14 revisions

assembly

简介

iOS 汇编主要分为

  • 真机(arm64) -> arm64汇编
  • 模拟器(x86) -> AT&T汇编

都属于 GNU 汇编

这里学习的目的并非是来编写汇编代码,而是为了更好的学习底层、调试问题,读懂汇编代码

基础语法

  • 文件后缀 .s结尾

  • 注释

    在汇编中正常情况下以 分号(;) 标识注释,但是默认 Xcode下没有注释的颜色区分,Xcode 中也可以使用 // 的形式来进行注释

  • 基本语法规则

    • 无参函数

      • .h

        void test(void);
      • .m

        .text           ; 存在于代码段
        
        // 否则默认对外不可见, 报错: Undefined symbols for architecture arm64: "_test"
        .global _test   ; 全局符号
        
        _test:          ; 函数名
            mov x0, #0x8
        ret             ; 函数返回

      示例中的 #0x8 是一个立即数,推荐以 # 开头并以 十六进制 表达

      通常把在 立即寻址方式 指令中给出的数称为立即数

      • 汇编中不区分大小写
    • 有参函数

      • .h

        void add(int a, int b);
      • .m

        .text
        .global _test, _add
        
        
        _test:
            mov x0, #0x8
        ret
        
        _add:
            // 将 x1 与 x0 参数相加,存放在 x0中
            add x0, x0, x1  
        ret

学习汇编的主要部分

参考资料

Getting Started

Social

Clone this wiki locally