第3章 指令系统
摘要 指令系统是计算机0所能执行的全部指令的集合,它描述了计算机内部的全部控制信息和“逻辑判断”能力,是学习汇编语言程序设计的基础。本章首先介绍80486微处理器指令系统的数据类型、寻址方式、指令格式,然后详细介绍80486微处理器的指令系统,包括基本指令和扩展指令,重点应掌握各条指令的格式、功能、操作及对标志位的影响。
3.1 80486微处理器的数据类型和指令格式
首先介绍以下三个基本概念。
① 指令:指示计算机执行某种操作的命令,由一串二进制数码组成。
② 指令系统:计算机所能执行的全部指令的集合,即CPU所能识别的全部指令。
③ 程序:为实现特定目标或解决特定问题而用计算机语言编写的指令序列的集合,由计算机能识别的、按一定顺序排列的基本操作命令组成。
3.1.1 数据类型
80486微处理器在其内部整数执行部件和浮点运算部件的支持下,可以处理以下6种类型的数据。
1.无符号二进制数
无符号二进制数包括如下内容。
① 字节:无符号8位二进制数。
② 字:两个相邻字节组成的无符号16位二进制数。
③ 双字:4个相邻字节组成的无符号32位二进制数。
2.有符号二进制定点整数
这类数有正、负之分,均以补码表示,有8位数(字节)、16位数(字)、32位数(双字)、64位数(四字)4种。80486微处理器支持8位、16位和32位有符号整数。其最高位为符号位。
3.浮点数(实数)
80486微处理器中的浮点数由符号位、有效数字(尾数)和阶码三个字段组成。浮点数由FPU支持,分为单精度(32位)、双精度(64位)和扩展精度(80位)三种。
单精度浮点数包括1位符号,8位阶码,24位有效数字(显示23位,隐含1位)。
双精度浮点数包括1位符号,11位阶码,53位有效数字(显示52位,隐含1位)。
扩展精度浮点数包括1位符号,15位阶码,64位有效数字(隐含1位,同时小数点“.”也被隐含)。
4.BCD码
BCD码分为压缩BCD码和非压缩BCD码两种。
压缩BCD码的每个字节包含两个十进制数,非压缩BCD码的每个字节只包含一个十进制数。
CPU支持8位压缩BCD码和非压缩BCD码,FPU只支持压缩BCD码,且最大长度为80位(10字节,20个BCD码)。
5.串数据
CPU支持串数据。
位串:一串连续的二进制数据。
字节串:一串连续的字节数据。
字串:一串连续的字数据。
双字串:一串连续的双字数据。
32位微处理器,可处理的串数据最长可达(232-1)字节。
6.ASCII码数据
ASCII码数据包括ASCII码字符串和ASCII码两种。
3.1.2 指令格式
80486汇编语言指令由4部分组成,格式如下:
[标号:] [前缀] 助记符 [操作数] [;注释]
其中,方括号表示的部分为任选部分,在具体指令中可有可无。
1.标号(label)
标号即指令语句的标识符,也可以理解为给该指令所在地址取的名字,或称为符号地址。它可以省略,是可供选择的项。标号可由字母(包括英文26个大小写字母)、数字(0~9)及一些特殊符号组成。但是,第一个字符只能是字母,且字符总数不得超过31个(一般为1~8个字符)。在标号的字符中间可插入空格或连接符,标号和后面的助记符之间必须用冒号分隔开。一般来说,跳转指令的目标语句或子程序的首语句必须设置标号。
2.前缀及助记符(prefixes and mnemonic)
助记符是一些与指令操作类型和功能意义相近的英文缩写,用来指示指令语句的操作类型和功能,也称为操作码。所有的指令语句都必须有操作码,不可缺少。在一些特殊指令中,有时需要在助记符前面加前缀,它和助记符配合使用,从而实现某些附加操作。
3.操作数(operand)
操作数,即参与操作的数据。不同的指令对操作数的要求也各不相同,有的不带任何操作数,有的要求带一个或两个操作数。若指令中有两个操作数,中间必须用逗号分隔开,并且称逗号左边的操作数为目标操作数,右边的操作数为源操作数(还有的指令带三个操作数)。操作数与助记符之间必须以空格分隔。
4.注释(description)
注释是对有关指令语句及程序功能的标注和说明,用于增加程序的可读性。注释不影响程序的执行(汇编时不产生目标代码),也并非所有的语句都要加注释,可以省略。程序中可采用英文注释,也可用中文注释。注释与操作数之间用分号分隔,分号作为注释的开始。