第四章 指令系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 指令系统
一、本章主要内容 内 容
要 求 指令格式(含定长操作码指令格式和扩展操作码指令格
式)
***** 寻址方式(数据寻址和指令寻址,常见寻址方式的特点
和表示方法)
***** CISC 和RISC 的基本概念
* 二、知识结构
三、具体内容介绍
(一) 指令格式 1. 指令的基本格式:机器内部的指令格式由两大字段组成,操作码和操作数;
● 操作码规定本条指令所要进行的操作或完成的功能;
● 操作数字段给出本条指令操作的数据对象以及下一条将要执行的指令的地址,操作数字段有可能包含寻
址方式字段。
● 指令系统中各指令的长度可以相同,也可以不同,一般取机器字长的倍数。
2. 定长操作码指令格式:所有指令的操作码位数相同。
重点掌握内容:操作码位数和指令总统所含指令条数的关系。n 位操作码,指令系统最多2n 条指令;反之,指令系统有n 条指令,至少log 2n 位操作码。
寻址方式 存储器寻址 定长操作码
不定长操作码 操作码
指 令 格
式
操作数
操作数的个数 立即数寻址 直接寻址 间接寻址
寄存器间接寻址 变址寻址 寄存器寻址 系统寻址 基址寻址
操作码 寻址1 数1 …… 寻址I 数i …… 寻址n 数n
3. 扩展操作码指令格式
在高级语言中,各语句的使用频率相差较大,比如C语言中,goto语句是限制使用的,一般程序不会使用goto语句,而几乎所有的程序都需要多次使用赋值语句。同样,指令系统中各条指令的使用频率也不一定相同,定长操作码指令给所有指令分配相同位数的操作码,使得极少使用的指令和经常使用的指令具有相同位数的操作码,对操作码的译码效率会产生影响。扩展操作码指令格式将根据指令的使用频率不同,分配不同位数的操作码,以提高指令系统的整体译码速度。比如使用频率高的指令操作码位数较短,使用频率低的指令操作码位数长一些。
二指令的寻址方式
指令的寻址方式指确定本条指令中所有操作数的地址以及下一条将要执行的指令的地址的方法。
1. 形式地址和有效地址
通常,指令中的操作数的位置有:指令中、内存中、CPU的寄存器中或者I/O接口中,所以指令中的操作数字段提供的值称为形式地址,把按照约定的寻址方式计算得到的地址称为有效地址。
2. 数据寻址及常见寻址方式
数据寻址:确定本条指令中所有操作数的地址,即寻找指令将要操作的数据的方法,常见数据寻址方式如下所示:
立即数寻址:指令的操作数字段给出的是操作数本身(操作数在指令中)。这是最简单最直接的寻址方式,执行指令时,数据随指令由内存读入CPU。
优点:简单、明确、速度快
缺点:由于操作数字段的位数是有限的,所以立即数表示数的范围也是有限的。比如每个操作数占6位,则无符号数的表数范围是0--63,有符号数的表数范围是-32---+31。
所以立即数寻址方式只适合操作数较小的情况,大一些的操作数无法应用。
直接寻址:操作数在内存,指令的操作数字段给出的是操作数的内存地址。执行指令时,指令由内存读入CPU后,再按照直接寻址字段给出操作数的内存地址读一次内存,即可将数据从内存
读入CPU。
优点:由于操作数在内存,操作数所占的内存单元数由数据的类型决定,所以数据的范围可以较大。比如操作数字段占6位,对应数据为16位,则无符号数的表数范围是
0--65535,有符号数的表数范围是-32768---+32767。
缺点:由于操作数字段的位数是有限的,所以操作数可存放的内存地址的范围也是有限的。
比如每个操作数占6位,操作数只可在0-63内存单元存放。所以直接寻址中操作数
的存放位置有限,可定义的操作数的个数就受限。
间接寻址:操作数在内存,指令的操作数字段给出的是操作数的内存地址所存放的内存单元地址,即操作数字段给出的是操作数的地址的地址。执行指令时,指令由内存读入CPU后,再按照
间接寻址字段给出操作数的内存地址的内存地址读一次内存,可得到操作数的内存地址,
按照这个地址再读一次内存,即将数据从内存读入CPU。
优点:由于操作数在内存,操作数所占的内存单元数由数据的类型决定,所以数据的内存地址以及范围可以较大。比如操作数字段占6位,内存单元均以16位为单位读写,
则对应操作数的内存地址占16位,则操作数的可存放地址范围是0—65535;对应
操作数占16位,则无符号数的表数范围是0--65535,有符号数的表数范围是
-32768---+32767。
缺点:首先由于操作数字段的位数是有限的,所以操作数的地址可存放的内存地址的范围也是有限的。比如每个操作数占6位,操作数的地址只可在0-63内存单元存放。
其次读写操作数需要两次读写内存,速度较慢。
寄存器寻址:操作数在CPU内的寄存器中,指令的操作数字段给出的是相应寄存器的编号。执行指令时,指令由内存读入CPU后,可直接按照寄存器编号读寄存器,读出内容即为本条指令需
要的操作数。
优点:由于操作数在CPU中,取数速度较快。
由于CPU中寄存器的数量是有限的,所以需要的寄存器编号也较短,可以有效减少
操作数字段的位数。
缺点:由于CPU中寄存器的数量是有限的,所以同时进行寄存器寻址的操作数个数是有限的,一旦超出,只能通过其他方式使用,比如将暂时不用的寄存器内容入栈保存,
需要时再出栈使用。
寄存器间接寻址:操作数在内存,操作数的内存地址在CPU内的寄存器中,指令的操作数字段给出的是相应寄存器的编号。执行指令时,指令由内存读入CPU后,可直接按照寄存器编号读寄
存器,读出内容即为本条指令所需要的操作数的内存地址;再按照读出的内存地址读内存,
即可读出本条指令所需要的操作数。
优点:由于操作数的地址在CPU中,获得操作数内存地址的速度较快。
由于CPU中寄存器的数量是有限的,所以需要的寄存器编号也较短,可以有效减少
操作数字段的位数。
缺点:由于CPU中寄存器的数量是有限的,所以同时进行寄存器间接寻址的操作数个数是有限的,一旦超出,只能通过其他方式使用,比如将暂时不用的寄存器内容入栈保
存,需要时再出栈使用;由于读操作数需要访问内存一次,速度较寄存器寻址较慢。
变址寻址:操作数在内存,操作数的内存地址由CPU内的变址寄存器的内容和指令中给出的偏移量求和得到。执行指令时,指令由内存读入CPU后,可直接按照变址寄存器编号读寄存器,读
出内容和指令中的偏移量求和即为本条指令所需要的操作数的内存地址;再按照计算出的
内存地址读内存,即可读出本条指令所需要的操作数。
优点:一般将数组首地址放入指令的操作数字段,变址寄存器用来提供下标,在循环体中顺序修改变址寄存器的值,可实现数组功能。
缺点:由于操作数地址需要计算得到,速度较慢。
特点:读写一次内存可完成操作。
3. 指令寻址及常见寻址方式
相对寻址:下一条将要执行的指令所在的内存地址由CPU内的PC寄存器的内容(直接用或加1后使用)和指令中给出的偏移量求和得到,注意偏移量为有符号数,补码表示。
特点:可实现循环和选择结构。
4. 其他常见寻址方式