汇编(五)

image.png

上篇文章我们了解了内存读写的指令,关于栈的操作.
接下来我们看下这个Demo

  • 新建项目(单个视图的空项目)
    CMD + SHIFT + N 选择真机(如果是模拟器汇编指令将不一样)


    image.png
  • CMD + N 新建文件,选择 Assembly File(Empty也可以,后缀名加上.s就OK)
image.png
  • 写点汇编代码
.text
.global _A,_B
_A:
    mov x0,#0xaaaa
    bl _B
    mov x0,#0xcccc
    ret
    
_B:
    mov x0,#0xbbbb
    ret
  • 来到main.m文件
void A();
int main(int argc, char * argv[]){
    printf("A");
    A();
    printf("B");
}

运行的结果是怎样? 死循环为什么会这样?带着这样的疑问我们来看下接下来的两条指令和一个寄存器.

bl和ret指令

bl标号

  • 将下一条指令的地址放入lr(x30)寄存器
  • 转到标号处执行指令

ret

  • 默认使用lr(x30)寄存器的值,通过底层指令提示CPU此处作为下条指令地址!

ARM64平台的特色指令,它面向硬件做了优化处理的

x30寄存器

x30寄存器存放的是函数的返回地址.当ret指令执行时刻,会寻找x30寄存器保存的地址值!

注意:在函数嵌套调用的时候.需要将x30入栈!

讲解视频

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

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

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,403评论 8 114
  • 编写一个完整的汇编 汇编语言由2类指令组成assume cs:codecode segmentmov ax,112...
    Stone_熊小叔阅读 265评论 0 0
  • 一. 编写一个完整的汇编 汇编语言由2类指令组成:assume cs: codecode segmentmov a...
    林大鹏阅读 370评论 0 1
  • 编写一个完整的汇编语言 汇编语言由2类指令组成assume cs:codecode segment mov ax...
    为自己丶拼个未来阅读 350评论 0 0
  • 文|在昔 夜,静静的。 耳边传来外甥女粗重的呼吸声,相反儿子睡觉太安静了,我不由得伸手摸了摸他的鼻子。这两个家伙今...
    在昔阅读 237评论 0 1