IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> arm64汇编str和stur和stp指令在ios中调用 -> 正文阅读

[移动开发]arm64汇编str和stur和stp指令在ios中调用

str指令作用

str r0,[r1] str作用是把左边r0寄存器里的值,存入到 右边[r1]内存地址中
str x0,[x1,#0x10] //x->[x1+0x10]

#str 在函数中的作用
oc代码调用int fn1(int a,int *b);

    int a = 1;
    int b = 10;
    int result = fn1(a,&b);
_fn1:
str x0,[x1]//把fn1(参数1,参数2) x0里是参数1,把x0的值存入到 x1(参数2的指向的内存地址里)
ret

下面是lldb调试结果:, x0的值赋值给了x1地址里的内存. x1地址里的值也变成了x0的值:1

(lldb) re read x1
      x1 = 0x000000016af09418
(lldb) x 0x000000016af09418
0x16af09418: 0a 00 00 00 01 00 00 00 80 28 5e 80 02 00 00 00  .........(^.....
0x16af09428: 60 7a 0c 83 02 00 00 00 ec 1d de ef 01 00 00 00  `z..............
(lldb) re read x0
      x0 = 0x0000000000000001
(lldb) si
(lldb) x 0x000000016af09418
0x16af09418: 01 00 00 00 00 00 00 00 80 28 5e 80 02 00 00 00  .........(^.....
0x16af09428: 60 7a 0c 83 02 00 00 00 ec 1d de ef 01 00 00 00  `z..............

str和 stur的区别是,stur右边的立即数是负数,u代表立即数是负数

跟ldr和ldur一样,u都是负数

str x0,[x1,#0x10] //正数 x0->[x1+0x10]
stur x0,[x1,#-0x10] //负数 x0->[x1-0x10]

stp p是pair,把一对寄存器写入到右边内存

stp w0,w1,[x2] //把w0和 w1里面的值,写入到右边内存,[x2]中,w0在左边,w1在右边 

在oc中的调用
fn2的声明

	int fn2(int a,int b,int *c);//fn2的声明

调用

    int c = 1;
    int d = 2;
    int e = 0;
    result = fn2(c, d,&e);
    NSLog(@"result=%d",result);

汇编函数定义

_fn2:
//w0 存储参数1,w1存储参数2.因为w0和w1共同组成x0,第三个参数向后延续一个寄存器,所以参数3存入x1中
stp w0,w1,[x2] //把w0和 w1里面的值,写入到右边内存,[x2]中,w0在左边,w1在右边
mov x0,x2//把x2的值存入返回值x0中
ret

调试结果

(lldb) re read x2
      x2 = 0x000000016fd9540c
(lldb) x 0x000000016fd9540c
0x16fd9540c: 00 00 00 00 02 00 00 00 01 00 00 00 0a 00 00 00  ................
0x16fd9541c: 01 00 00 00 c0 e4 6d 83 02 00 00 00 00 88 3e 80  ......m.......>.
(lldb) re read w0
      w0 = 0x00000001
(lldb) re read w1
      w1 = 0x00000002
(lldb) si
(lldb) x 0x000000016fd9540c
0x16fd9540c: 01 00 00 00 02 00 00 00 01 00 00 00 0a 00 00 00  ................
0x16fd9541c: 01 00 00 00 c0 e4 6d 83 02 00 00 00 00 88 3e 80  ......m.......>.
(lldb) si
(lldb) re read x0
      x0 = 0x000000016fd9540c

这个x0就是返回值,赋值给int类型是取走后8位,就是 0x6fd9540c,转换成10进制就是1876513804
打印结果:

result=1876513804

在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:41:16  更:2022-03-10 22:42:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:56:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码