指令系统的发展与性能要求
- 指令系统的发展:
- 指令
- CPU能自动完成的一个基本操作
- 用户与计算机交流的基本元素
- 机器指令,微指令,宏指令
- 指令系统
- 一个CPU能执行的所有指令的集合
- 指令系统体现了CPU的功能(非性能)
- 指令系统的发展
- CISC
- RISC
- 指令
- 对指令系统性能的要求
- 完备性
- 功能完善
- 有效性
- 空间
- 时间
- 规整性
- 对称、匀齐、一致
- 兼容性
- 向上兼容的本质含义
- 完备性
- 编程语言
- 程序
- 有意义的一串指令或语句
- 机器语言
- 汇编语言
- 汇编程序
- 高级语言
- 编译(解释)程序
- 高级语言程序内嵌汇编语言
- 低级语言与高级语言的比较
-
比较内容 高级语言 低级语言 对程序员的训练要求
(1)通用算法
(2)语言规则
(3)硬件知识
有
较少
不要
有
较多
要
对机器独立的程度 独立 不独立 编制程序的难易程度 易 难 编制程序所需时间 短 较长 程序执行时间 较长 短 编译过程中对计算机资源的要求 多 少
-
- 程序
指令与数据的寻址方式
- 顺序方式
- PC = PC + 1
- 跳跃方式
- 所谓跳跃方式,是指下调指令的地址码不是有程序计数器给出的,而是由本条指令给出
- 隐含寻址
- 指令中隐含着操作数的地址
- 立即寻址(灵活性最差)
- 立即寻址是一种特殊的寻址方式,指令中在操作码字段后面的部分不是通常意义上的操作数地址,而是操作数本身,也就是说数据包含在指令中,只要取出指令就取出了可以立即使用的操作数,因此这样的操作数被称为立即数
- 指令格式:
操作码0 | 操作数D |
-
- 特点
- 在取指令时,操作吗操作数同时被取出,从而提高了指令的执行速度
- 因为操作数是指令的一部分,所以不能被修改
- 对于定长指令格式,操作数的大小将受到指令长度的限制,所以这种寻址方式灵活性最差
- 通常用于给某一寄存器或主存单元赋初值,或者用以提供一个常数。
- 特点
- 直接寻址
- 指令中地址码给出的地址A就是操作数的有效地址
- 操作数地址是不能被修改的,与程序本身所在的位置无关,所以又叫做绝对寻址方式
- 早期常被作为主要的寻址方式
- 但是随着计算机主存容量的不断扩大,所需地址码越来越长,因此寻址方式受到了很大限制。另外,在指令执行过程中,为了获取操作数,必须访存,降低了执行速度。
- 间接寻址
- 间接寻址意味着指令的地址码给出的地址A不是操作数的地址,而是存放操作数地址的主存单元的地址,简称操作数地址的地址。操作数的有效地址的计算方法EA = (A)
- 特点:
- 因为操作数的地址在主存储器中,可以被灵活地修改而不必修改指令,因而间接寻址比直接寻址灵活得多。但是间接寻址在执行指令过程中至少需要两次访问主存储器才能取出操作数,严重降低了指令执行的速度。
- 寄存器寻址
- 在指令地址码部分给出的CPU内某一通用寄存器的编号
- 优点:
- 由于寄存器在CPU的内部,指令在执行时从寄存中取出操作数要比访问主存快得多
- 由于寄存器的数量较少,因此寄存器编号所占位数也比较少,从而可以有效地减少指令的地址码字段的长度
- 寄存器间接寻址
- 为了克服间接寻址中多次访问内存的缺点,可采用寄存器间接寻址,即将操作书房在主存储器中,而操作数的地址放在某一通用寄存器中,然后在指令的地址码部分给出通用寄存器编号,这时EA = (R)
- 这种寻址方式的指令较短,并且在取值之后秩序依次访问便可得到操作数,因此指令寻址较前面的间接寻址要快,也是广泛运用的一种寻址方式。
- 偏移寻址
- 偏移寻址是直接寻址与寄存器间接寻址的结合,有效地址EA = A + (R)
- 偏移寻址包括相对寻址、基址寻址、变址寻址等
- 相对寻址
- 基址寻址
- 变址寻址
- 段寻址方式
- 堆栈结构及其寻址方式
- 堆栈是一种数据结构。它是压入和弹出都在栈顶的一端进行的结构
- 特点:“后进先出”
- 分类
- 硬堆栈:由CPU内部设置的专用寄存器构成(速度快,容量小);
- 软堆栈:在主存储器中划分的专门用于堆栈的一片区域(容量大,速度慢)。
- 堆栈结构在计算机中的作用
- 具有堆栈结构的机器使用零地址指令,这使得指令长度短,指令结构简单,机器硬件简化
- 实现程序调用,子程序嵌套调用和递归调用
- 对于“中断”技术,堆栈更是不可缺少的,保存“断点”和“现场”
- 软堆栈的操作(SP始终指向栈顶)
- 设数据进栈方向为从高地址向低地址发展(“向下生长),当向堆栈压入数据时,SP的内容先自动递减而指向一个新的空栈顶单元,再把数据写入此栈顶单元;当数据弹出堆栈时,立即读出SP所指向的栈顶单元内容,再把SP内容自动递增而指向新的栈顶位置
- 即:
- 堆栈是一种数据结构。它是压入和弹出都在栈顶的一端进行的结构
PUSH X;
(SP)-1→SP
(X)→(SP)
POP X;
((SP))→X
(SP)+1→SP