Skip to content

10月18日笔记

lirui edited this page Oct 18, 2020 · 2 revisions

指令和数据都是被存储在存储器中,分支和转移指令在跳转时都使用这些地址信息

C语言中常用的指针,其实就是一个内存地址值,它能指向存储器中的任何位置,但是无限制使用这些地址信息,常常会导致程序运行错误

跟地址相关的寄存器是程序计数寄存器,PC寄存器(Program Counter,PC),他保存着正在执行指令的地址,指向内存地址空间的指针

在intel处理器中,这种寄存器被称为IP寄存器,即指令指针寄存器

大多数参与运算的数据都是以32位字的形式存在的,比如寄存器中存放一个字的数据,lw和sw指令也都是访问存储器中一个字的内容

在存储程序的计算系统中,我们使用什么样的编码方法来表示我们的指令,0/1,riscv最求简单性原则,32位字

R型 寄存器与寄存器之间算术运算

I型 寄存器与立即数之间算术运算和读存储器操作

S型 写存储器操作

B型 分支转移操作的,S型指令小的变体

U型 高20比特位立即数操作

J型 直接跳转,U型指令小的变体

3.2 I型指令和S型指令

移位操作只能在0~31的范围内移动

立即数中第二比特位区分逻辑右/左移动和算术左移动和算术

LBU指令,装载无符号字节指令

LH指令,装载半字指令

LHU指令,装载无符号半字指令 0扩展

区别:功能码3不同,反应被装载数据粒度大小与符号

3.3 B型指令和U型指令

分支语句通常用于条件语句或循环体中,一般不会特别大,一般在50条指令范围内

最大分支转移距离受代码量限制,当前指令执行的地址都是保存在PC寄存器中

PC相对寻址的方法得到分支转移的地址

Clone this wiki locally