计算机组成原理
- 计算机组成原理主要篇幅就是介绍不同指令集的各种架构,这里总结了个导图
复杂指令集CISC
X86架构
- 这里不多介绍,大一下汇编课程主要学的就是x86架构的汇编
精简指令集RISC
ARM架构
寄存器
-
ARM一共有7种寄存器模式,每种寄存器模式都有一些备用寄存器,寄存器的名字相同,但是在其他模式下不可见。
- 用户模式(User) 快速中断模式(FIQ) 普通中断模式(IRQ) 管理模式(Svc)
- 数据访问中止模式(Abort) 未定义指令中止模式(Und) 系统模式(Sys)
-
ARM一共有37种寄存器,但是每种模式下最多只能看到 18 个寄存器。
-
例如,对r13 这个名字来说,在 ARM 中共有6 个名叫r13(又叫 sp)的寄存器,但是在每种特定处理器模式下,只有一个 r13 是当前可见的,其他的 r13 必须切换到它们的对应模式下才能看到。这种设计叫影子寄存器(banked register)。
-
系统模式和用户模式使用相同的寄存器
- ARM寄存器一共被分为3类
- 未备份寄存器(Unbanked Registers),包括 R0~R7。
- 备份寄存器(Banked Registers),包括 R8~R14。
- 程序计数器 PC,即 R15。
- 还有一个例外的标志寄存器。
汇编指令
函数调用
参考博客:ARM调用标准(ATPC)与函数参数传递-CSDN博客
- 函数调用一般从参数传递、返回地址、堆栈操作、指令跳转这四个方面
参数传递
- ARM有两种传参方式,分别是参数个数固定的子程序和参数个数可变的子程序
参数个数可变的传参规则
- 当参数不超过4个,可以使用寄存器R0~R3来进行参数传递。当参数超过4个,还可以使用数据栈来传递参数
- 在参数传递的时,将所以参数看做是存放在连续的内存单元中的字数据。然后,依次将各数据传送到寄存器R0、R1、R2、R3;如果参数多于4个,将剩余的字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。
- 一个浮点参数可以通过寄存器传递,也可以通过数据栈传递,还可以一半通过寄存器传递,另一半通过数据栈传递。
参数个数固定的传参规则
MIPS架构
寄存器
- MIPS指令集中,有32个通用的寄存器,在汇编程序中可以用编号
$0-$31
表示,也可以用寄存器的名字表示
编号 | 寄存器名称 | 寄存器描述 |
---|---|---|
0 | zero | 其值始终为0 |
1 | $at | 保留寄存器 |
2~3 | $v0、$v1 | values,保存表达式或函数返回结果 |
4~7 | $a0、$a1、$a2、$a3 | aruments,作为函数的前四个参数,不够用就堆栈传参 |
8~15 | $t0、$t1、$t2、$t3、$t4、$t5、$t6、$t7 | temporaries,供汇编程序使用的临时寄存器 |
16~23 | $s0、$s1、$s2、$s3、$s4、$s5、$s6、$s7 | saved values,子函数使用时需要保存原寄存器的值 |
24~25 | $t8、$t9 | temporaries,供汇编程序使用的临时寄存器 |
26~27 | $k0、$k1 | 保留,中断处理函数使用 |
28 | $gp | global pointer,全局指针 |
29 | $sp | stack pointer,堆栈指针 |
30 | $fp | frame pointer,保存栈指针 |
31 | $ra | return address,返回地址 |
汇编指令
函数调用
RISC-V架构
寄存器
- 寄存器数量与MIPS架构一样,但是每个编号的寄存器功能不同
汇编指令
函数调用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 iyheart的博客!
评论