博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS相关的ARM汇编
阅读量:6972 次
发布时间:2019-06-27

本文共 1751 字,大约阅读时间需要 5 分钟。

一、iOS汇编

1、真机:arm64汇编
寄存器
指令
堆栈
2、模拟器:x86汇编
二、lldb

(lldb)register read x0(lldb)register read w0(lldb)register write x0  0x002a1b(lldb)register read w0(lldb)register read

 

三、生成汇编文件

xcrun -sdk iphoneos clang -S -arch arm64 main.c -o main.s

 

四、寄存器
1、 通⽤寄存器
64bit的:x0 ~ x28
32bit的:w0 ~ w28(属于x0 ~ x28的低32bit)
x0 ~ x7通常拿来存放函数的参数,更多的参数使用堆栈来传递 x0通常拿来存放函数的返回值
2、 程序计数器
pc(Program Counter) 记录CPU当前指令的是哪一条指令 存储着当前CPU正在执⾏的指令的地址 类似于8086汇编的ip寄存器
3、 堆栈指针
sp(Stack Pointer)
fp(Frame Pointer),也就是x29
4、 链接寄存器
lr(Link Register),也就是x30
存储着函数的返回地址
 
5、 程序状态寄存器
cpsr(Current Program Status Register)
spsr(Saved Program Status Register),异常状态下使⽤
![程序状态寄存器1](https://upload-images.jianshu.io/upload_images/8285086-429a8c7b1240c185.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![程序状态寄存器2](https://upload-images.jianshu.io/upload_images/8285086-df56d274823a76c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
五、怎么编写汇编指令
1、在Xcode的OC文件中内嵌写入

__asm{        "mov x0, 100"}

2、用Xcode新建.s文件里面写汇编代码
arm.h

#ifndef arm_h#define arm_hvoid test();int add(int a, int b);int sub(int a, int b);#endif /* arm_h */

 

arm.s

// 声明一个代码段.text.global _test, _add, _sub// 内部\私有函数mycode:mov x0, #0x1mov x1, #0x2add x2, x0, x1ret// test函数的实现_test:; bl指令(函数调用)bl mycodemov x3, #0x2mov x4, #0x1; b指令带条件; mov x0, #0x5; mov x1, #0x5; cmp x0, x1; bgt mycode; mov x0, #0x5; ret; mycode:; mov x1, #0x6; b指令; b mycode; mov x0, #0x5; mycode:; mov x1, #0x6; cmp指令; mov x0, #0x1; mov x1, #0x3; cmp x0, x1; mov指令; mov x0, #0x8; mov x1, x0; add指令; mov x0, #0x1; mov x1, #0x2; add x2, x0, x1; sub指令; mov x0, #0x5; mov x1, #0x2; sub x2, x0, x1ret// add函数的实现_add:add x0, x0, x1ret// sub函数的实现_sub:sub x0, x0, x1ret

使用的时候跟C语言的使用方式一致,导入头文件,直接调用全局(global)函数。

转载于:https://www.cnblogs.com/gkp307/p/10738578.html

你可能感兴趣的文章
移动端web开发 chapter 1 – introduction
查看>>
获取时间的方法及常用时间类
查看>>
Git忽略文件
查看>>
如何删除或重置spfile中的参数
查看>>
Spring Boot 之 HelloWorld详解
查看>>
【RAC】如何修改vip 或者vip 对应的hostname
查看>>
Sql Server之旅——第三站 解惑那些背了多年聚集索引的人
查看>>
【LINUX】磁盘格式化 创建文件系统
查看>>
expect使用详解
查看>>
IOS(CGGeometry)几何类方法总结
查看>>
Quart2D setNeedsDisplay
查看>>
Android TextView点击效果
查看>>
GIX4中懒加载
查看>>
数据仓库专题(1)-数据仓库生命周期模型
查看>>
[华为机试练习题]43.在字符串中找出连续最长的数字串
查看>>
LogCat大量Unexpected value from nativeGetEnabledTags: 0
查看>>
一分钟了解阿里云产品:补丁管理
查看>>
区间调度问题
查看>>
一键U盘启动快捷方式
查看>>
阿里云容器服务体验: 部署 ShellPays 条码支付整合服务平台 -- (一)系统概要与环境准备...
查看>>