汇编(六)

image.png

函数的参数和返回值

首先我们新建一个项目.然后写一点代码.来到main.m文件.

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int sum(int a,int b){
    return a + b;
}
int main(int argc, char * argv[]) {
    sum(10, 20); 
    return 0;
}

然后选择真机.断点调试sum函数处.如下图


image.png

运行!然后我们看一下汇编代码.选择Xcode的Debug->Debug Workflow->Always Show Disassembly 可以调试查看汇编指令


image.png

然后当我们进入到sum函数里面之后.看下sum函数中的汇编指令.如下图


image.png

可以看到.参数取出来进行加法运算是从w1和w0(x0,x1的低32位) 里面取出来的.
有了这样一个结论.我们就可以使用ARM汇编.写一个不严谨的求和的函数了

新建一个.s文件,代码如下

.text
.global _suma
_suma:
    add x0,x0,x1
    ret

main.m文件代码

int suma(int a,int b);
int main(int argc,char * argv[]){
    int b = suma(10,20);
    printf("%d",b);
    return 0;
}

运算结果没问题.
那么我们可以发现.在汇编中,x0保存的是我们函数的返回值.

ARM64下,函数的参数通常情况下是存放在X0到X7(W0到W7)这8个寄存器里面的.如果超过8个参数,就会入栈.
函数的返回值通常情况下是放在X0 寄存器里面的.

讲解视频

ARM汇编入门(一) — 进制本质
ARM汇编入门(二) — 寄存器&pc&bl指令
ARM汇编入门(三) — 寄存器&cpu补充
ARM汇编入门(四) — 栈SP&FP寄存器
ARM汇编入门(五) — bl&ret函数的调用与返回
ARM汇编入门(六) — 函数的参数和返回值
ARM汇编入门(七) — 函数的局部变量与嵌套调用
ARM汇编入门(八) — 状态寄存器
ARM汇编入门(九) — 内存分区全局变量和局部变量
ARM汇编入门(十) — 循环选择判断
待续…

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容