LaTeX 渲染有问题。将就着看吧。
# 指令
指令是计算机处理的最基本单位
操作码(指令执行的内容)+ 操作数(要操作的对象)
多周期实现方案
取指令
译码 / 取寄存器
执行 / 有效地址 / 完成分支
访问内存,存储结果
要素:
操作码
源操作数引用
结果操作数引用
下一指令引用
# 指令格式
# 扩展操作码
不同地址数的指令具有不同长度的操作码
怎么区分?看最前面有多少个 1.
例题:
假设指令字长为 16 位,操作数的地址码为 6 位,指令有零地址、一地址、二地址 3 种格式。
设操作码固定,若零地址指令有 M 种,一地址指令有 N 种,则二地址指令最多有几种?
由于操作码固定,最多有二地址,则 16 - 6 * 2 = 4,操作码有 4 位
那么总共有 16 种指令。
二地址指令有 16 - M - N 种。
采用扩展操作码技术,二地址指令最多有几种?
对于二地址指令操作码有 4 位,全 1 不可用
0000~1110, 15 种
采用扩展操作码技术,若二地址指令有 P 条,零地址指令有 Q 条,则一地址指令最多有几种?
2^4 - P:二地址没有用的操作码(指令前缀)个数(4 位)
(2^4 - P)* 2^6:一地址总共可以表示的总数(一地址操作码为 10 位)
(2^4 - P)* 2^6 - R:一地址没有用的操作码个数
[(2^4 - P)* 2^6 - R] * 2^6:零地址总共可以表示的总数
Q = [(2^4 - P) 2^6 - R] * 2^6*
# 寻址方式
# 记号
A: 指令中地址字段的内容
R: 指向寄存器的指令地址字段内容
EA: 被访问位置的实际(有效)地址
(X): 存储器位置 X 或寄存器 X 的内容
操作数 = (EA),即操作数为 EA 内的内容
# 立即寻址
操作数 = A
立即数。
# 直接寻址
EA = A
把地址写在指令里面,进行一次存储器访问
# 间接寻址
EA = (A)
两次存储器访问
# 寄存器寻址
EA = R
给出寄存器编号,读寄存器内的值
# 寄存器间接寻址
EA = (R)
寄存器里存的是地址,拿到地址再读一次存储器
# 偏移寻址
EA = (R) + A
在读出的地址上加一个立即数得到新的地址
类型
相对寻址
基址寄存器寻址
变址寻址
# 偏移寻址:相对寻址
隐含引用的寄存器是程序计数器(PC)
EA = (PC) + A
在 PC 寄存器读出的地址上加一个立即数得到新的地址
# 偏移寻址:基址寄存器寻址
EA = (B) + A
在寄存器读出的地址上加一个立即数得到新的地址
# 偏移寻址:变址寻址
EA = A + (IX)
A 是基地址,从寄存器 IX 里读出一个数与它相加得到新的地址
# 栈寻址
方式:栈指针保存在寄存器中,对寄存器中栈位置的访问实际上是一种寄存器间接寻址方式
# 指令格式的设计原则
指令尽量短
有足够的操作码位数
操作码的编码必须有唯一的解释
指令长度是字节的整数倍
合理选择地址字段的个数
指令尽量规整