指令:计算及执行某些操作的指令
指令系统:一台计算机所有指令的集合
指令格式
机器指令的基本格式
一条指令就是机器语言的一个语句,是一组有意义的二进制代码。
操作码:指明操作的性质及功能
地址码:指明操作数的地址
指令长度:一条指令中包含的二进制代码的位数,取决于操作码字段的长度、地址码的个数及长度。
在一个指令系统中,若所有指令长度相等,称为定长指令字结构;若各种指令长度岁指令工能不一样,称为变长指令字结构。
地址码结构
双操作数指令除操作码外,还应包含以下信息:
第一操作数地址,A1
第二操作数地址:A2
操作结果存放地址:A3
下条将要执行指令的地址:A4
这些信息在指令中明显的给出,称为显地址;用隐含的方式给出,称为隐地址
四地址指令
(A1)op(A2)->A3
Ai表示地址,(Ai)表示存放于该地址中的内容
三地址指令
(A1)op(A2)->A3
(PC)+1->PC (隐含)
执行一条三址的双操作数运算指令,至少需要访问四次主存。第一次取指令本身,第二次取被操作数,第三次取操作数,第四次保存运算结果
二地址指令
(A1)OP(A2)->A1
(PC)+1->PC (隐含)
A1为目的操作数地址,A2为源操作数地址
同样访问四次主存
一地址指令
(Acc)OP(A1)->Acc
(PC)+1->PC (隐含)
执行一条一地址指令只需要访问两次主存。第一次取指令本身,第二次取操作数。被操作数与结果放在累加寄存器中,读取和存入都不需要访问主存。
零地址指令
零地址指令用在堆栈寄存器
用三地址编写的程序最短,指令长度最长,二一零程序长度变长,但指令变短
指令的操作码
指令系统每一条指令都有唯一的操作码,指令不同,操作码编码不同
-
规整型
操作码字段的位数和位置固定。也称定长编码。
假定:指令系统共m条指令,指令中操作码地址为N位,N>=log2m(2N>=m)
-
非规整型
操作码字段位置不固定,分散的放在指令字的不同位置上
增加指令译码和分析的难度,使控制器设计复杂化
寻址技术
寻址:寻找操作数地址或下一条将要执行的指令地址
编制方式:
-
编制单位
-
字编制
编制单位=访问单位
每个编址单位包含的信息量与读或写一次寄存器、主存所获得的信息量是相同的。
-
字节编址
字节编址为了适应非数值计算的需要。字节编址方式使编址单位与信息的基本单位相一致。
编址单位<访问单位
-
位编址
-
指令中地址码的位数
指令格式中每个地址码的位数是与主存容量和最小寻址单位有关联。
主存容量越大,所需地址码位数越长;相同容量,如果以字节为最小寻址单位,地址码的位数需要长些;如果以字为最小寻址单位,地址码位数可以减少。
指令寻址和数据寻址
指令寻址:寻找即将要执行的指令地址
顺序寻址:程序计数器PC加1,自动形成下一条指令的地址;跳跃寻址需要通过程序转移类指令实现
跳跃寻址转移地址形成方式:直接、相对、间接寻址,寻找到的不是操作数的有效地址而是转移的有效地址
数据寻址:寻找操作数的地址
根据指令中给出的地址码字段寻找真实操作数地址的方式。
-
立即寻址
指令中给出操作数本身,数据就包含在指令中,取出指令也就取出了操作数
-
寄存器寻址
地址码给出某一个通用寄存器的编号,这个指定的寄存器Ri中存放着操作数S
S=(Ri)
优:从寄存器中存取数据比从主存中快得多
由于寄存器数量少,其地址码字段比主存单元地址字段短得多
-
直接寻址
指令中地址码字段给出的地址A就是操作数的有效地址,形式地址=有效地址
EA=A 操作数地址不可修改,又叫绝对寻址方式。
S=(A)
地址空间受到指令中地址码字段位数的限制
-
间接寻址
指令中给出的地址不是操作数的地址,而是存放操作数地址(EA)的主存单元的地址,简称操作数地址的地址。
通常在指令格式中划出一位作为直接或间接寻址的标志位,间接寻址时标志位@=1
EA=(A)
S=((A))
优:扩大了寻址范围,可用指令的短地址访问大的主存空间。
可将主存单元作为程序的地址指针,用以指示操作数在主存中的位置。操作数地址需要改变时,不必修改指令,只需修改存放有效地址的主存单元(间接地址单元)
-
寄存器间接寻址
指令中的地址码给出某一通用寄存器的编号,在被指定的寄存器中存放操作数的有效地址,操作数存放在主存单元中。
EA=(Ri)
S=((Ri))
-
变址寻址
变址寄存器Rx的内容与指令中给出的形式A相加,形成操作数有效地址
EA=(Rx)+A 变址寄存器Rx的内容(Rx)称为变址值
S=((Rx)+A)
-
基址寻址
基址寄存器Rb的内容与指令中给出的位移量D相加,形成操作数有效地址
EA=(Rb)+D 基址寄存器Rb的内容(Rb)称为变址值
S=((Rb)+D)
指令的地址码字段是一个位移量,可正可负
-
相对寻址
由程序计数器PC提供基准地址,指令中的地址码字段作为位移量D,两者相加后得到操作数的有效地址
EA=(PC)+D
S=((PC)+D)
位移量指出的是操作数和现行指令之间的相对位置
特点
操作数的地址不固定,随PC值变化而变化,与指令地址相差一个固定值+-D。
对于指令地址而言,操作数地址可能在指令地址之前或之后
页面寻址
将整个主存空间分成若干个大小相同的区,每个区称为一页,每页有若干个主存单元。每页都有自己的编号,称为页面地址;页面内的每个主存单元也有自己的编号称为页内地址。
操作数的有效地址:前面为页面地址,后部为页内地址。
页内地址由指令的地址码部分自动直接提供,与页面地址通过拼装得到有效地址,无需计算,寻址较快。
页面寻址分为三种:
-
基页寻址 EA=0//A,操作数S在零页面中。基页寻址实际上就是直接寻址。
-
当前页寻址 EA=(PC)H//A 操作数S与指令本身处于同一页面
-
区别不同的寻址方式
显式:在指令中设置专门的寻址方式字段
隐式:由指令的操作码字段说明指令格式隐含约定寻址方式
一条指令如果有两个或两个以上地址码,各地址码可采用不同的寻址方式。
- 字编制