组原_指令
目录
1. 基础概念
高级语言和机器语言的一个主要区别是:
高级语言不管在哪台机器上,主要的关键字和语法是不变的; 但机器语言是直接指导硬件进行工作的,而硬件在设计上会有很多变化,所以一台计算机只能执行自己的那一套指令,而不能执行其它结构不一样的计算机指令。
用符号语言可以代替冗长的文字语言进行描述。
2. 地址码
这种设计方式下:在主存中,同样是二进制数据,有的是指令,有的是操作数。
在这样的指令格式下,
可以操作的单元数是 2^6=64 个 (每个地址都是6位),也就是说这条指令的操作对象只能放在 64 个单元中,寻址范围非常有限。
需要进行4次访存,取指令(1次) + 取两个操作数(2次) + 结果放回主存(1次) =4 次。
优化 :可以将下一条指令的取指自动化。
方法:将指令和数据分区域存储;在这种情况下,如果程序没有特殊要求(跳转指令),可以自动到下一个地址取指令。
因此也需要设计一个专门的单元(程序计数器 PC) 来控制指令的修改。这样就把指出下一条指令所在位置的任务交给了 PC ,因此可以将指令的结构优化成三地址结构
四次访存的都是:取指1 + 取操作数2 + 结果放入主存1 = 4 次。
三次访存是因为在主存中只取了一个操作数,其它访问主存和四次的类似。
两次访存是因为在主存中取一个操作数,另一个操作数在 ACC 中,且运算结果返回 ACC。
3. 操作码设计
定长操作码: n 位 ==> 2^n 条指令 扩展操作码:操作码长度可变
(指令的条数主要看操作码,因为要分析的主要是指令不同的功能,而不是二进制编码不同数量,所以不考虑地址码部分)
扩展思路:动态的将地址码用作操作码的一部分。
为了区分地址码部分是 作为地址码 还是 作为操作码的一部分,上一层的操作码字段需要留出一个状态来表示现在进入下一层操作码编码。
上面的设计方案是,每层操作码都留出一个状态来进入下一层操作,其它的扩展操作码设计就是不止留出一个状态。
15条三地址指令 ==> 2^4 - 1 =15 ( 减1 是因为留出一个状态位进入下一层操作码 )
12条二地址指令 ==> 如果每次都留出一个状态,那么二地址显然也有15条,显然留出了 2^4 -12 = 4 个状态位进入下一层操作码
62条一地址指令 ==> 上一层的4个状态位即 2 个二进制数,加这一层4个二进制数,状态有 2^6 = 64 ,留了两个状态位进入下一层
32条零地址指令 ==> 上一层的2个状态位即 1 个二进制数, 加这一层5个二进制数,状态有 2^5 =32 至此,设计完毕。
4. 操作类型