指令系统
- 一个完善的指令系统应满足:
1:完备性
2:有效性
3:规整性
4:兼容性
指令格式
一条指令的结构:
操作码字段op | 地址码字段A |
---|
操作码op
1:操作码op表示指令应进行什么性质的操作,比如:加减乘除,取数,存数等
2:不同指令用操作码的不同编码来表示,每一种编码代表一种指令;
3:一个包含n位的操作码可以表示2^n条指令,
如一个系统只有8条指令,那么只需要3位操作码;
4:对于一个机器的指令系统,在指令字中操作码和地址码长度通常是固定的。
在单片机中,由于指令字较短,为了充分利用指令字长度,指令字的操作码和地址码都是不固定的
地址码A
一条指令有几个操作数地址,就称该指令为几地址指令
- 一般的操作数有被操作数(用A表示),操作数以及操作结果
- 地址格式分类
-
三地址指令
OP码 A1 A2 A3 三地址指令A1,A2,A3通常指定为运算器中通用寄存器的地址
-
二地址指令
OP码 A1 A2 其中地址A1兼作存放操作结果的地址
-
一地址指令
OP码 A1 指定一个操作数,另一个操作数地址是隐含的
-
零地址指令
OP码 (空 )
-
地址码字段A指的是操作数地址,而不是操作数本身
二地址指令格式
从操作数的物理位置来说,可分为三类:
1:存储器存储器(SS)型
访问内存的指令格式
2:寄存器寄存器(RR)型
访问寄存器的指令格式
3:寄存器-存储器(RS)型
既要访问内存单元,又要访问寄存器
举例
例题:某16位机的指令如下所示,是分析指令格式的特点
15 ~9 | 9~7 | 7~4 | 3~0 |
---|---|---|---|
OP | - | 源寄存器 | 目标寄存器 |
解:
1:单字长二地址指令
2:操作码OP可以指定2^7 = 128条指令
3:源寄存器和目的寄存器都是通用寄存器,所以是RR型指令,两个操作数均在寄存器中
4:这种指令结构常用于算术逻辑运算指令
指令字长度
一个指令字包含二进制代码的位数,称为指令字长度
什么是机器字长?
计算机能直接处理的二进制数据位数,决定了计算机的运算精度,通常与主存单元的位数一致
- 单字长指令:指令字长度等于机器字长度的指令
- 双字长指令:指令字长度等于连哥哥机器字长度的指令
操作数类型
机器指令对数据进行操作,数据可分为
- 地址数据
- 数值数据
- 字符数据
- 逻辑数据
指令和数据寻址方式
存储器:既可用来存放数据,又可以存放指令
指令寻址方式
- 两种:
- 顺序寻址方式
- 跳跃寻址方式
顺序寻址方式
从存储器取出一条指令执行后,接着取第二条执行…,在这个过程中,必须使用程序计数器PC来计数指令的顺序号
程序计数器PC的:保存的是下一条指令的地址
跳跃寻址方式
跳跃是指下条指令地址不是程序计数器给出,而是本条指令给出
操作数基本寻址方式
操作数来源:
1:由指令中的地址码部分直接给出操作数,简单便捷,但是操作数固定不变
2:将擦欧总书存放在CPU内的通用寄存器中,可以快速获取操作数,但是存储的操作数数量有限
3:将操作数存放在内存的数据区中
对于内存寻址,既可以在指令中直接给出操作数的实际访存地址(有效地址),也可以在指令的地址字段给出形式地址,在指令执行时,将形式地址依据某种形式变换为有效地址再取操作数
形成操作数的有效地址的方法,称为操作数的寻址方式
偏移量:形式地址A,是指令字结构给定的地址量
基本寻址方式
方式 | 算法 |
---|---|
隐含寻址 | 操作数在专用寄存器中 |
立即寻址 | 操作数=A |
直接寻址 | EA=A |
间接寻址 | EA=(A) |
寄存器寻址 | EA=r |
寄存器间接寻址 | EA=® |
偏移寻址 | EA=A+® |
段寻址 | EA=A+® |
堆栈寻址 | EA=栈顶 |
- 隐含地址:给的是指令中隐藏着操作数的地址
- 立即寻址:操作数在指令中,给的是操作数本身,指令中包含的操作数立即可用,节省了访问内存的时间
- 直接寻址:操作数主存地址在指令中,直接给出操作数的地址不需要经过某种变换
- 间接寻址:形式字段A给出的是操作数地址二点指示器,而不操作数的真正地址
- 寄存器寻址:操作数放在CPU的通用寄存器中
- 寄存器间接寻址:指令格式中的 寄存器内容是操作数地址,该地址指明的操作数在内存中
- 偏移寻址
相对寻址:隐含引用的专用寄存器是程序计数器PC,即EA=A+(PC)
基址寻址
变址寻址:每次操作后,变址寄存器内容加1,即EA=A+®,R->(R+1); - 堆栈寄存器:数据进栈使用PUSH指令,将数据压入栈顶地址,堆栈指示器减1;数据退栈时,使用POP指令,数据从栈定地址弹出,堆栈指示器加1
典型指令
一个较完善的指令系统,应当有数据处理,数据存储,数据传送,程序控制四大类指令
1:数据传送指令
主要用于主存和寄存器之间或者寄存器和寄存器之间的数据传送
2:算术运算指令
主要用于定点或浮点的算术运算
3:逻辑运算指令
主要用于无符号数的位操作,代码转换,判断及运算
4:程序控制指令
一般采用直接寻址和相对寻址方式来确定
5:输入输出指令
输入输出指令主要用来启动外围设备,检查测试外围设备的工作状态,并实现外部设备和CPU之间,或外围设备与外围设备之间的信息传送;
6:字符串处理指令
非数值处理指令,一般包括字符串传送,字符串转换,字符串比较等,在文字编辑中对大量字符串进行处理
7:特权指令
具有特殊权限的指令,只用于操作系统或其他系统全歼,一般不直接提供给用户使用;
8:其他指令