使用xcode在ios项目中手写汇编代码函数并且调用汇编函数的方法

47 篇文章 1 订阅
22 篇文章 5 订阅

在项目中新建空白文件empty重命名为.s文件

如下图在ios app项目中新建文件->other->empty->名字改成test.s
请添加图片描述
下面是2个方法:

  • text和 add,text方法不带入参只简单测试几条mov指令
  • add带入参,测试带2个入参的加法
  • .text的意思是把西面代码放进代码段.因为macho文件,里面的text段就是代码段
  • .global 是声明后面的方法名全局可用,否则调用add(int int)方法的时候回报错链接错误:Undefined symbol: _add
  • 传递进来的参数前8个都放在x0到x7中,超过8个放在栈中,返回值在x0中
.text
.global _test,_add


_test:
mov x0,#0x1 ;立即数以#井号开头,0x是16进制
mov x1,x0
;mov x2,x0+0x12 ;不合法mov右边不能运算
;ldr w12, [x1, #0x1]
add x2,x1,x0
sub x3,x2,x1
ret

_add:
add x0,x0,x1;传递进来的参数前8个都放在x0到x7中,超过8个放在栈中,返回值在x0中
ret

新建.h头文件声明方法给别的文件使用

test.h文件中只有2行代码,就是声明2个方法

void test();
int add(int,int);

在oc代码中调用方法

需要包含.h文件

#import "test.h"

然后调用方法

test();
int result = add(3, 5);
NSLog(@"result=%d",result);

通过lldb 断点调试验证寄存器结果

下面是在add 方法加了断点,然后使用 si指令调试汇编代码,再用 re read读取寄存器的值验证传入参数是在x0,x1中,返回值在x0中

(lldb) re read x0
      x0 = 0x0000000000000003
(lldb) re read x1
      x1 = 0x0000000000000005
(lldb) si 
(执行完add指令add x0,x0,x1后)
(lldb) re read x0
      x0 = 0x0000000000000008
(lldb) c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值