内容:
--------------------------------------------------------------------------------
规整的指令编码格式
RICS-V对 指令集编码采取规范化
这有利于 译出指令类型、使用的操作数寄存器索引、立即数。
指令长度指示码放在低位
为提高代码密度---可选压缩指令子集---C----若支持,则有32+16混合情形
为支持16位指令取出---低几位用来表示指令长度----方便顺序取指时快速译码长度----取到16位就可以判断是32还是16
简单化的分支跳转指令
jal--子程序调用--结果存在jal的结果/链接寄存器中
jalr--子程序返回--只需将jal的 结果寄存器 当作jalr的 基地址寄存器
对于带条件跳转--采用两个整形操作数进行比较--条件满足则跳转--没错,一个指令融合两个操作
带条件分支使用--12位有符号数做偏移量--乘以2与当前指令所在地址相加--得到目标地址
------------------
关于16位压缩指令子集--一个16位对应一个32位等效--基本功能一致
没有分支延迟槽指令
分支延迟槽会导致处理器的硬件设计变得很别扭--取值部分很麻烦
RISC-V放弃了分支延迟槽--相信分支预测算法精度
提供明确的RAS依据
RAS用于返回地址预测---RAS需要分开出栈和入栈操作--所以它要学会区分哪些指令属于这两者
RISC-V--对于jal--目标reg的index rd 等于 x1 reg 的值 或 x5 reg 的值--入栈
对于jalr--按照使用的寄存器值(rs1 和 rd)的不同--如图--link表示x1/x5的值