-
Notifications
You must be signed in to change notification settings - Fork 1
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相对寻址的方法得到分支转移的地址