标准构型:操作码 操作字段
操作数
指令格式分析
- 字长,操作数个数
- OP长度->指令空间
- 操作数指向寄存器/主存->R/S指令或者程序控制型指令:JMP
寻址方式
立即寻址
操作数是立即数,直接读入.
隐含寻址
操作数在规定的寄存器中.
直接寻址
相当于一级指针,操作数是主存中的数据的地址.
数据在主存中.
间接寻址
相当于二级指针.
操作数是指针的地址.
需要经过两重寻址.
数据在主存中
寄存器寻址
VALUE=(Reg)
寄存器间接寻址
VALUE=*(Reg)
寄存器内放的是地址
基址/变址寻址
基址/变址寄存器
O
P
=
操
作
数
+
基
/
变
址
寄
存
器
OP=操作数+基/变址寄存器
OP=操作数+基/变址寄存器
相对寻址
用于访问大块连续内存区域
A
d
d
r
e
s
s
=
P
C
+
O
f
f
s
e
t
Address=PC+Offset
Address=PC+Offset
此时的PC是下一条指令的PC
堆栈寻址
…?
串联堆栈:一个序列的串联寄存器.
注意在有些时候(特指指令系统的题)设计命令时需要指名寻址方式字段.编码规则参照OP编码规则.
指令格式的设计
- OP定长/变长?HFM编码规则下的操作数位扩展(注意n位字段最多容纳 2 n − 1 2^n-1 2n−1个OP,并且对于未填满的OP类型的最大化利用编排方式.)
- 操作码数量(0,1,2,3)?每种有几种OP?
- 寻址方式有几种?(见上)需要几位寻址方式指名字段?
为了扩展OP空间,考虑使用间接/变址/寄存器(间接)寻址.
CISC/RISC
略
MIPS
Ref:https://www.wikiwand.com/zh-hans/MIPS架構
R-Type
形式为
R
e
g
O
P
R
e
g
→
R
e
g
Reg\ OP\ Reg\rightarrow Reg
Reg OP Reg→Reg
OP=0,操作方式由funct字段决定
shant:移位专用,对rt移位.
I-Type
r
s
+
I
m
m
→
R
e
g
(
r
t
)
rs+Imm\rightarrow Reg(rt)
rs+Imm→Reg(rt)
rt为寄存器位置(编号)
Load/Store指令:
R
s
+
I
m
m
=
A
d
d
r
e
s
s
Rs+Imm=Address
Rs+Imm=Address
条件转移:
R
s
O
P
R
t
→
i
f
∗
∗
∗
J
m
p
I
m
m
+
P
C
Rs\ OP\ Rt\rightarrow if\ ***\ Jmp\ Imm+PC
Rs OP Rt→if ∗∗∗ Jmp Imm+PC
J-Type
无条件转移
A
d
d
r
e
s
s
=
P
C
高
4
位
+
I
m
m
<
<
2
Address=PC_{高4位}+Imm<<2
Address=PC高4位+Imm<<2
寻址方式
- R:寄存器寻址(一切操作都只和寄存器有关)
- I:立即寻址(Imm),基址偏移(Load/Store),相对寻址(条件转移部分),寄存器寻址(Rt)
- J:???
BTW
看样子只有静态存储器SRAM是基于行列的双译码结构.DRAM不是.