软磁盘存储器 速度 磁头 盘片 价格 硬盘 高 固定、活动、浮动 固定盘、盘组大部分不可换 高 软盘 低 活动、接触盘片 可换盘片 低 环境 苛刻 四, 指令系统 人们习惯把每一条机器语言的语句称为机器指令,而又将全部机器指令的集合称为机器的指令系统 指令的执行过程 读取指令 指令地址(在PC中)送到地址寄存器 读主存,读出内容(指令代码)送入指令寄存器IR 分析指令 形成下一条指令的地址并送到PC中 执行指令 用一到几个执行步骤,完成指令的运算、操作功能, 不同的指令操作步骤和具体运算、操作功能各不相同 减产有无中断请求 无中断请求、进入下一条指令的执行过程 (一) 指令格式 1. 指令的基本格式
计算机是通过执行指令来处理各种数据的.为了指出数据的来源,操作结果的去向及所执行的操作,一条指令必须包含下列信息:
(1)操作码,具体说明了操作的性质及功能. (2)操作数的地址.
(3)操作结果的存储地址. (4)下一条指令的地址.
从上述分析可知,一条指令实际上包括两种信息即操作码和地址码.
操作码(operation code)用来表示该指令所要完成的操作(如加,减,乘,除,数据传送等),其长度取决于指令系
7
统中的指令条数.如操作码占7位,则该机器最多包含2=128条指令.
地址码用来描述该指令的操作对象,或直接给出操作数或指出操作数的存储器地址或寄存器地址(即寄存器名).
操作码的长度不固定会增加指令译码和分析难度,使控制器的设计复杂. 操作码 寻址地址 形式地址A 形式地址 指令字中的地址 有效地址 操作数的真实地址
约定 指令字长=存储字长=机器字长 2. 定长操作码指令格式 1)零地址指令
格式: OP OP——操作码
指令中只有操作码,而没有操作数或没有操作数地址.这种指令有两种可能: (1)无需任何操作数,如空操作指令,停机指令等.
(2)所需的操作数是默认的.如堆栈结构计算机的运算指令,所需的操作数默认在堆栈中,由堆栈指针SP隐含指出,操作结果仍然放回堆栈中.又如Intel 8086的字符串处理指令,源,目的操作数分别默认在源变址寄存器SI和目的变址寄存器DI所指定的存储器单元中. 2)一地址指令 格式:
OP——操作码
A——操作数的存储器地址或寄存器名
指令中只给出一个地址,该地址既是操作数的地址,又是操作结果的存储地址.如加1,减1和移位等单操作数指令均采用这种格式,对这一地址所指定的操作数执行相应的操作后,产生的结果又存回该地址中.
在某些字长较短的微型机中(如早期的Z80,Intel8080,MC6800等),大多数算术逻辑指令也采用这种格式,第一个源操作数由地址码A给出,第二个源操作数在一个默认的寄存器中,运算结果仍送回到这个寄存器中,替换了原寄存器内容,通常把这个寄存器称累加器. 3)二地址指令
格式:
OP——操作码
A1——第一个源操作数的存储器地址或寄存器地址.
A2——第二个源操作数和存放操作结果的存储器地址或寄存器地址.
这是最常见的指令格式,两个地址指出两个源操作数地址,其中一个还是存放结果的目的地址.对两个源操作数进行操作码所规定的操作后,将结果存入目的地址,在本例中即为A2指定的地址 4)三地址指令 格式:
OP——操作码
A1——第一个源操作数的存储器地址或寄存器地址 A2——第二个源操作数的存储器地址或寄存器地址
A3——操作结果的存储器地址或寄存器地址
其操作是对A1,A2指出的两个源操作数进行操作码(OP)所指定的操作,结果存入A3中.
6)多地址指令
在某些性能较好的大,中型机甚至高档小型机中,往往设置一些功能很强的,用于处理成批数据的指令,如字符串处理指令,向量,矩阵运算指令等.
为了描述一批数据,指令中需要多个地址来指出数据存放的首地址,长度和下标等信息 3. 扩展操作码指令格式
设某机器的指令长度为16位,包括4位基本操作码字段和三个4位地址字段,其格式下:
OP(4) A1(4) A2(4) A3(4) 4位基本操作码有16个码点(即有16种组合),若全部用于表示三地址指令,则只有16条.但,若三地址指令仅需15条,两地址指令需15条,一地址指令需15条,零地址指令需16条,共61条指令,应如何安排操作码?
显然,只有4位基本操作码是不够的,必须将操作码的长度向地址码字段扩展才行. 一种可供扩展的方法和步骤如下:
(1)15条三地址指令的操作码由4位基本操作码从0000~1110给出,剩下一个码点1111用于把操作码扩展到A1,即4位扩展到8位;
(2)15条二地址指令的操作码由8位操作码从11110000~11111110给出,剩下一个码点11111111用于把操作码扩展到A2,即从8位扩展到12位;
(3)15条一地址指令的操作码由12位操作码从111111110000~111111111110给出,剩下的一个码点111111111111用于把操作码扩展到A3,即从12位扩展到16位;
(4)16条零地址指令的操作码由16位操作码从1111111111110000~1111111111111111给出. 指令字长取决于操作码的长度、操作数地址的长度和操作数地址的个数.为了提高指令的运行速度和节省存储空间,通常尽可能的吧常用的指令(如数据传输指令、算逻运算指令等)设计成单字长或短字长格式的指令.
操作数类型 地址 地址实际也可以看做是一种数据,在许多情况下要计算操作数的地址.这时地址可看作无符号的整数 数字 计算机中常见的数字有定点数、浮点数和十进制数字 字符 在应用计算机时,文本或者字符串也是一种常见的数据类型 逻辑数据 计算机除了做算术运算外,有时还做逻辑运算,此时n个0和1的组合不是被看做算术数字而被看做逻辑数 奔腾Pentium处理器的数据类型有逻辑数、有符号数(补码)、无符号数、压缩和未压缩的BCD码、地址指针、位串以及浮点数(符合IEEE754标准)等 指令操作类型 1.数据传送 数据传送包括寄存器与寄存器,寄存器与存储单元,存储单元与存储单元之间的传送 2.算术逻辑操作 这操作可实现算术运算(加,减,乘,除,增1,减1,取负即求补)逻辑运算(与,或,非,异或) 3.移位 移位可分为算术移位,逻辑移位和循环移位三种 无条件转移 不受任何约束条件直接把程序转移到下一条需执行指令的地址 条件转移 根据当前指令的执行结果决定是否需要转移 ? 子程序可在多处被调用 ? 子程序调用可出现在子程序中,即允许子程序嵌套 ? 每个CALL指令都对应一条RETURN指令 CPU必须记住返回地址,使子程序能准确返回,返回地址存放在以下3处 4.转移 调用与返回 ? 寄存器内.机器内设有专用寄存器,专用于存放返回地址 ? 子程序的入口地址内 ? 栈顶内.现代计算机都设有堆栈,执行RETURN指令后,便可自动从堆栈内取出应返回的地址 陷阱(Trap)与其实是一种意外事故的中断,一般不提供给用户使用,作为隐指令,再出陷阱指令 现故障时,由CPU自动产生并执行 对于I/O单独编址的计算机而言,通常设有输入输出指令,他完成从外设中的寄存器读入5.输入输出 一个数据到CPU寄存器内,或将数据从CPU的寄存器输出至某外设的寄存器中 6.其它 包括等待指令、停机指令、空操作指令、开中断指令、关中断指令、置条件码指令等 备注 有些大型或巨型机还设有向量指令,可对整个向量或矩阵进行求和求积运算 (二) 指令的寻址方式 1. 有效地址的概念
操作数的真实地址称为有效地址,记做EA,它是寻址方式和形式地址共同来决定的. 2. 数据寻址和指令寻址
寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令的地址,与硬件结构密切相关,寻址方式分为指令寻址和数据寻址两大类
指令寻址分为顺序寻址和跳跃寻址两种.
顺序寻址可以通过程序计数器PC加1自动形成下一条指令的地址,跳跃寻址则通过转移类指令实现,是通过对PC的运算得到新的下一条指令的地址. 3. 常见寻址方式 1)立即寻址
所需的操作数由指令的地址码部分直接给出,就称为立即数(或直接数)寻址方式.这种方式的特点是取指时,操作码和一个操作数同时被取出,不必再次访问存储器,提高了指令的执行速度.但是由于这一操作数是指令的一部分,不能修改,而一般情况下,指令所处理的数据都是在不断变化的(如上条指令的执行结果作为下条指令的操作数),故这种方式只能适用于操作数固定的情况.通常用于给某一寄存器或存储器单元赋初值或提供一个常数等.(图中“#”表示立即寻址的标记,A的位数限制了这类指令所能表述的立即数的范围)
2)直接寻址
指令的地址码部分给出操作数在存储器中的地址.
3)隐含寻址
操作数的地址隐含在操作码或者某个寄存器中.
4)间接寻址
在寻址时,有时根据指令的地址码所取出的内容既不是操作数,也不是下一条要执行的指令,而是操作数的地址或指令的地址,这种方式称为间接寻址或间址.
5)寄存器寻址