• 计算机组成原理主要篇幅就是介绍不同指令集的各种架构,这里总结了个导图

汇编指令集

复杂指令集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)

  • 系统模式用户模式使用相同的寄存器

img

  • 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架构一样,但是每个编号的寄存器功能不同

img

汇编指令

函数调用