指令系统

指令是指只是计算机执行某些操作的命令,一台计算机的所有指令的集合构成该机的指令集

1、指令格式

1.1、机器指令的基本格式

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如下:

操作码字段+地址字段

其中操作码指明了指令的操作性质及功能,地址码则给出了操作数的地址。

指令的长度是指一条指令中所包含的二进制代码的位数,它取决于操作码字段的长度、操作数地址的个数及长度。指令长度与机器字长没有固定的关系

在一个指令系统中,若所有指令的长度都是相等的,称为定长指令字结构,若各种指令的长度随指令功能而异,就称为变长指令字结构

1.2、指令的地址码结构

计算机执行一条指令所需要的全部信息都必须包含在指令中,对于一般的双操作数指令来说,除去操作码OP之外,指令还应该包含以下信息:

第一操作数地址,A1

第二操作数地址,A2

操作结果存放地址,A3

下条将要执行指令的地址,A4

这些信息可以在指令中明显的给出,称为显地址,也可以按照某种事先的约定,用隐含的方式给出,称为隐地址

四地址指令:OP A 1 A 2 A 3 A 4

指令的含义:(A1)OP(A2)——>A3A4=下条将要执行的指令的地址

三地址指令:OP A 1 A 2 A 3

指令的含义:(A1)OP(A2)——>A3(PC)+1——>PC(隐含)

二地址指令:OP A 1 A 2

指令的含义:(A1)OP(A2)——>A1(PC)+1——>PC(隐含)

一地址指令:OP A1

指令的含义:(Acc)OP(A1)——>Acc(PC)+1——>PC(隐含)

Acc称为累加寄存器,在连续性运算时,用于保存多条指令连续操作的累计结果

零地址指令:OP

用于堆栈式计算机,参加运算的两个操作数隐含地从堆栈顶部弹出,送到运算器中进行运算,运算的结果再隐含地压入堆栈中

1.3、指令的操作码

指令系统中的每一条指令都有唯一确定的操作码,指令不同,其操作码的编码也不同。指令操作码的编码可以分为规整型和非规整型两类

规整型:操作码字段的位数和位置是固定的,为了能表示整个指令系统中的全部指令,指令的操作码字段应当具有足够的位数

非规整型:操作码字段的位置不固定,且分散地放在指令字的不同位置上。最常见的非规整型编码方式是扩展操作码法

2、寻址技术

所谓寻址,指的是寻找操作数的地址或下一条将要执行的指令的地址

2.1、编址方式

编址单位:字编址、字节编址、位编址

指令中地址码的位数:指令格式中每个地址码的位数是与主存容量和编址单位有关联的

2.2、数据寻址和指令寻址

数据寻址:寻找操作书的地址

指令寻址:寻找下一条要执行的指令地址,细分为顺序寻址和跳跃寻址

2.3、基本的数据寻址方式

数据寻址方式是根据指令中给出的地址码字段寻找真是操作数地址的方式

指令中的形式地址——>有效地址

立即寻址:指令中在操作码字段后面的部分不是通常意义上的操作数地址,而是操作数本身,也就是说数据就包含在指令中,只要取出指令,也就取出了可以立即使用的操作数,这样的数称为立即数

指令格式:OP 立即数

寄存器寻址:寄存器寻址指令的地址码部分给出一个通用寄存器的编号,这个指定的寄存器中存放着操作数

指令格式:OP R

操作数:S=(R)

直接寻址:指令中地址码字段给出的地址A就是操作数的有效地址

指令格式:OP 直接地址

操作数:S=(A)

寄存器间接寻址:寄存器间接寻址指令中的地址码字段给出某一通用寄存器的编号,在被指定的寄存器中存放操作数的有效地址,而操作数则存放在主存单元中

指令格式:OP R

操作数:S=((R))

间接寻址:指令中给出的地址A不是操作数的地址,而是存放操作数地址的主存单元的地址,称为操作数地址的地址。通常在指令格式中划出一位作为直接或间接寻址的标志位,间接寻址时,标志位@=1

指令格式:OP A

操作数:S=((A))

变址寻址:把变址寄存器R的内容与指令中给出的形式地址A相加,形成操作数的有效地址。在具有变址寻址的指令中,除去操作码和形式地址之外,还应用变址寻址编址,当有多个变址寄存器时,还必须指明具体使用哪一个变址寄存器

指令格式:OP R A

操作数:S=((R)+A)

基址寻址:基址寻址是将基址寄存器R的内容与指令中给出的位移量D相加,形成操作数的有效地址。

指令格式:OP R D

操作数:S=((R)+A)

一般来说,变址寻址中变址寄存器提供修改量,而指令中提供基准值。基址寻址中基址寄存器提供基准值,而指令中提供位移量。这两种寻址方式应用的场合也不同。变址寻址是面向用户的,用于访问字符串、向量和数组等成批数据;而基址寻址面向系统,主要用于逻辑地址和物理地址的变换,用以解决程序在主存中的再定位

相对寻址:相对寻址是基址寻址的一种变通,由程序计数器PC提供基准地址,指令中的地址码字段作为位移量,两者相加后得到操作数的有效地址

指令格式:OP D

操作数:S=((PC)+D)

页面寻址:页面寻址相当于将整个主存空间分成若干个大小相同的区,每个区称为一页,每页有若干个主存单元。每页都有自己的编号,称为页内地址,页面内的每个主存单元也有自己的编号,称为页内地址。这样,存储器的有效地址就被分为两部分:前部为页面地址,后部为页内地址。页内地址由指令的地址码部分自动直接提供,它与页面地址通过简单的拼接就可以得到有效地址,无须进行计算。根据页面地址的来源不同,页面寻址又分为三种不同的方式:基页寻址,当前页寻址,页寄存器寻址

为了能够区分出各种不同的寻址方式,必须在指令中给出标识。标识的方式有两种:显式和隐式。显式的方式是在指令中设置专门的寻址方式字段,用二进制编码来表明寻址方式类型,隐式的方式是由指令的操作码字段说明指令格式并隐含约定的寻址方式

3、指令类型

3.1、数据传送类指令:主要用于实现寄存器与寄存器之间,寄存器与主存单元之间以及两个主存单元之间的数据传送

3.2、运算类指令:

1)算数运算类指令:用于定点和浮点运算,绝大多数算数运算指令都会影响到状态标志位,通常的标志位有进位、溢出、全零等

2)逻辑运算类指令:用于对数据字(字节)中某些位进行操作

3)移位类指令:算数移位,逻辑移位,循环移位

3.3、程序控制类指令:程序控制类指令用于控制程序的执行顺序,并使程序具有测试、分析与判断的能力

1)转移指令:在程序执行过程中,通常采用转移类指令改变程序的执行顺序。转移指令又分为无条件转移和条件转移两种

无条件转移在执行时将改变程序的常规执行顺序,不受任何条件的约束,直接把程序转向该指令指出的新的位置执行,助记符为JMP

条件转移必须受到条件的约束,若条件满足时才执行转移,否则程序仍顺序执行。条件转移指令主要用于程序的分支,当程序执行到某处时,要在两个分支中选择一支,这就需要根据某些测试条件作为判断,转移的条件,一般是上次运算结果的某些特征(标志),如进位标志、结果为零标志、结果溢出标志

无论是条件转移还是无条件转移都需要给出转移地址。若采用相对寻址方式,转移地址为当前指令地址和指令中给出的位移量之和,即(PC)+位移量——>PC;若采用决对寻址方式,转移地址由指令的地址码字段直接给出,即A——>PC

2)子程序调用指令

子程序是一组可以公用的指令序列,只要知道子程序的入口地址就能调用它。从主程序转向子程序的指令称为子程序调用指令,简称转子指令,其助记符为CALL。转子指令安排在主程序中需要调用子程序的地方,转子指令是一地址指令。转子指令需要考虑返回问题,必须以某种方式保存返回地址,以便返回时能找到原来的位置

3)返回指令

从子程序返回主程序的指令称为返回指令,其助记符为RET。子程序的最后一条指令一定是返回指令,返回地址存放的位置决定了返回指令的格式

3.4、输入输出类指令:

输入输出类指令用于实现主机与外部设备之间的信息交换,包括输入输出数据,主机向外设发控制命令或外设向主机报告工作状态等。从广义的角度看,I/O类指令可以归为数据传送类。各种不同的计算机的I/O指令差别很大,通常有两种方式:独立编址方式和统一编址方式

1)独立编址方式

所谓独立编址方式就是把外设寄存器和主存单元分别独立编址。独立编址方式必须使用专门的输入/输出指令(IN/OUT)来访问外部设备。以主机为基准,信息由外设传送给主机为输入,反之称为输出。指令中应给出外部寄存器的编号(端口地址)。这些端口地址与主存地址无关,是一个独立的地址空间

2)统一编址方式

所谓统一编址方式就是把外设寄存器和主存单元统一编址。在这种方式下,不需要专门的I/O指令,就是用一般的数据传送类指令来实现I/O操作。一个外部设备通常至少有两个寄存器:数据缓存寄存器和命令/状态寄存器。每个外设寄存器都可以由分配给它的唯一的主存地址来识别,主机可以向访问主存一样去访问外部设备的寄存器

4、指令系统的发展

CISC(复杂指令系统)

RISC(精简指令系统)

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值