目录
4.1指令的概念及基本格式
- 指令(机器指令)是指示计算机执行某种操作的命令。
- 一台计算机的所有指令的集合构成该机的指令系统,也称指令集。
- 指令系统是一台机器硬件能执行的指令全体,是计算机硬件的语言系统,位于硬件和软件的交界面上。
- 一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。Eg:x86架构、ARM架构。
根据冯·诺依曼机的特点,指令和数据同样是一串二进制代码,一条指令通常包括操作码字段和地址码字段两部分。
- 操作码指出指令中该指令应该执行什么性质的操作以及具有何种功能。
- 地址码给出被操作的信息(指令或数据)的地址。
指令字长取决于一条指令中操作码的长度和地址码的长度及地址码的个数。
根据地址码的个数不同可分为以下指令:
注:A指某个主存地址,(A)表示A所指向的地址中的内容。
一地址指令又称单地址指令。
按指令的操作类型分类
- 中断隐指令不是指令系统中存在的指令,它是由硬件自动完成的。
- 特权指令(如I/O指令)是指仅用于操作系统等系统软件的指令,不提供给用户使用。
- 零地址的运算类指令又称堆栈运算指令,参与的两个操作数来自栈顶和次栈顶单元。
半字长指令、单字长指令、双字长指令——指令长度是机器字长的多少倍
指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存。
定长指令字结构:指令系统中所有指令的长度都相等。
变长指令字结构:指令系统中各种指令的长度不等。
4.2扩展操作码指令格式
为了使指令字长有限的情况下仍保持比较丰富的指令种类,可采取可变长操作码。
当为定长指令字结构+可变长操作码时:
为了便于取指,指令的长度通常为存储字长的整数倍。
4.3指令寻址的寻址方式
寻址方式是指寻找指令或操作数有效地址的方式,即确定本条指令的数据地址及下一条待执行指令的地址的方法。
寻方式分为指令寻址和数据寻址两大类。
从指令的作用来理解这两种寻址方式比较容易:
指令集终究是要依次执行的,那么我们就需要一个明确的指令寻址的方式去确定我们接下来要执行指令集中的哪个指令。
而一个指令执行时,操作码字段指明了这个指令的操作类型,操作的对象在地址码字段中,我们需要明确数据寻址的方式去寻找指令执行需要用到的数据或信息。
4.3.1指令寻址
寻址下一条欲执行的指令地址称为指令寻址。
而指令寻址的而下一条欲执行的指令始终存放在程序计数器PC中。
4.3.1.1顺序寻址
(PC)+“1”=PC
这里的1为相隔一个指令的具体地址增量,与指令长度和编址方式有关。(PC)表示是PC内容加“1”后的内容放入PC。
4.3.1.2跳跃寻址
JMP:无条件跳转指令,将当前PC中的值4修改为7.
4.3.2数据寻址
数据寻址是指如何在指令中表示一个操作数的地址 。
指令中的地址码字段并不代表操作数的真实地址,这种地址称为形式地址(A)。形式地址结合寻址方式,可以计算出操作数在存储器中的真实地址。
每个地址码都要表明是哪种数据寻址方式。
4.3.2.1隐含寻址
4.3.2.2立即寻址
4.3.2.3直接寻址
4.3.2.4间接寻址
4.3.2.5寄存器寻址
4.3.2.6寄存器间接寻址
相对寻址、基址寻址、变址寻址都属于偏移寻址。
4.3.2.7相对寻址
4.3.2.8基址寻址
4.3.2.9变址寻址
在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。
实际应用过程中通常是基址寻址和变址寻址相结合。如通过基址寻址将数组的起始地址放到100这个实际地址,通过变址寻址将数组元素的地址进行迭代。
4.3.2.10堆栈寻址
上图看不清就看下图:
堆栈可分为硬堆栈和软堆栈两种。寄存器堆栈又称硬堆栈;而从主存中划出一段区域用来做堆栈是最合算且最常用的方法,这种堆栈称为软堆栈。
- 下表访存次数不含本条指令的访存。
二轮补充(一轮时没有理解的这么到位)
寻址方式中的指令寻址和数据寻址是并存的,
对于一些运算类指令,它的指令寻址方式是顺序寻址(默认),数据寻址方式就是那些各种各样的方式。
但对于转移类指令来说,它的指令寻址方式就是跳跃寻址,它的所谓数据寻址其实是如何来表示这个跳跃的量,和介绍的数据寻址方式差不多,格式不重要,思想类似,转移类指令的目标就是正确转移。
4.4 CISC和RISC的基本概念
复杂指令系统计算机(CISC)的主要特点如下:
- 指令系统复杂庞大,指令数目一般为 200 条以上。
- 指令的长度不固定,指令格式多,寻址方式多。
- 可以访存的指令不受限制。
- 各种指令使用频度相差很大。
- 各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成。
- 控制器大多数采用微程序控制。有些指令非常复杂,以至于无法采用硬连线控制。
- 难以用优化编译生成高效的目标代码程序。
精简指令系统计算机(RISC)的主要特点如下:
- 选取使用频率最高的一些简单指令,复杂指令的功能由简单指令的组合来实现。
- 指令长度固定,指令格式种类少,寻址方式种类少。
- 只有 Load/Store (取数/存数)指令访存,其余指令的操作都在寄存器之间进行。
- CPU 中通用寄存器的数量相当多。(目的是减少访存次数)
- RISC一定采用指令流水线技术,大部分指令在一个时钟周期内完成。
- 以硬布线控制为主,不用或少用微程序控制。
- 特别重视编译优化工作,以减少程序执行时间。
从指令系统兼容性看,CISC 大多能实现软件兼容,即高档机包含低档机的全部指令,并可加以扩充。但 RISC 简化了指令系统,指令条数少,格式也不同于老机器,因此大多数 RISC 机不能与老机器兼容。
对比项目\类别 | CISC | RISC |
指令系统 | 复杂,庞大 | 简单,精简 |
指令数目 | 一般大于 200 条 | 一般小于 100 条 |
指令字长 | 不固定 | 定长 |
可访存指令 | 不加限制 | 只有 Load/Store 指令 |
各种指令执行时间 | 相差较大 | 绝大多数在一个周期内完成 |
各种指令使用频度 | 相差较大 | 都比较常用 |
通用寄存器数量 | 较少 | 多 |
目标代码 | 难以用优化编译生成高效的目标代码程序 | 采用优化的程序编译,生成代码较为高效 |
控制方式 | 绝大多数为微程序控制 | 绝大多数为组合逻辑控制 |
指令流水线 | 可以通过一定方式实现 | 必须实现 |
4.5 总结
①指令系统采用不同寻址方式的优缺点:
- 优点:可缩短指令字长,扩大寻址空间,提高编程的灵活性。
- 缺点:提高了指令译码的复杂度。
②关于指令中某个地址段的位数 :
- 隐含寻址:当为单地址指令时通常是两个操作数,只有一个被隐含了。故其形式地址位数还是主存地址位数。
- 立即寻址:与立即数的位数有关。如果地址段位数太少则立即数的表示范围会很小。所以一般地址段长度最长
- 直接、间接寻址:形式地址是主存地址。
- 寄存器、寄存器间接寻址:形式地址是寄存器的编号,而寄存器很少。
- 变址、基址、相对寻址:形式地址与主存寻址空间有关。
- 综上,为了缩短指令中某个地址段的位数,有效的方法是寄存器(间接)寻址。
③ 简化地址结构的基本方法是尽量采用隐地址。
- 解释:当有两个操作数时简化为只用指示一个操作数;当为一个操作数时为零地址指令。
④在数据寻址的各种方式中,获取操作数最快的方式是立即寻址。
定长指令集立即寻址执行速度最快;但如果是变长指令集,执行速度最快的是寄存器寻址方式,立即寻址指令码最长,取指令访存花费时间较多。
⑤在数据寻址的各种方式中,寻址方式可以结合使用,如变址间接寻址:
- 变址寄存器为X,指令中的地址码为A,则EA=((X)+A )。
⑥在多道程序设计中,最重要的寻址方式是相对寻址。
- 多道程序设计技术是指在内存同时放若干道程序,使它们在系统中并发执行,共享系统中的各种资源。当一道程序暂停执行时,CPU立即转去执行另一道程序。
- 在程序 (特别是用ASM写的程序)中制定的一些数据的位置是不确定的,比如你原来想读一个1500位置上的数据,但是实际上这个1500到底存了什么是不确定的,所以,采用了相对地址的策略,即所有的数据都是假设程序开始 (ORG)位置为0的相对地址.... 所谓程序浮动,就是针对这样一种情况,在运行过程中采取相对地址的技术来实现的.
二轮注:不重要不清楚不了解,背熟三字口诀。
⑦转移指令、子程序调用与返回指令用于解决变动程序中指令执行次序的需求,而不是数据调用次序的需求。
⑧指令格式规整且长度一致、指令和数据按边界对齐存放、只有Load/Store指令才能对操作数进行存储访问。
⑨基址、变址寄存器内容、内存地址都是真值,而形式地址一般用补码表示,我们计算有效地址时EA=(X)+A时需要把形式地址A转换为真值。(整数负数补码拓展位补一)。