本书只重点介绍整数指令,对浮点数指令和操作系统型指令不作叙述,有需要的读者可查阅有关资料。
整数指令按功能分为以下七种类型。
数据传送类指令;
算术运算类指令;
逻辑运算类指令;
串操作类指令;
控制转移类指令;
处理器控制类指令;
高级和保护控制类指令。
本书约定标记:寄存器(Reg)、存储器(Mem)、段寄存器(Seg)、累加器(Acc)、立即数(Imm)、I/O端口(Port),源操作数 (源)、目标操作数(目标)。状态标志:进位(CF)、符号(SF)、零(ZF)、溢出(OF)、辅助进位(AF)、奇偶(PF)。指令的操作数可以是8 位、16位或32位,寻址宽度可以是16位或32位。各类指令以表格形式给出,仅对程序设计中常用的指令加以解释。
3.4.1 数据传送类指令
数据传送指令将数据、地址或立即数(称源操作数)传送到寄存器或存储单元中(称目标操作数),完成寄存器与寄存器,寄存器与存储单元,I/O端口和累加器之间的字节、字和双字的传送,传送指令大多都不影响标志位。
3.4.2 算术运算类指令
算术运算类指令有加、减、乘、除等,可进行8位、16位和32位的运算。参加运算的操作数可以是二进制数和十进制数(BCD码);这些数可以是无符号 数,也可以是带符号数。算术运算指令的主要特点是执行结果影响标志寄存器的状态标志位OF、SF、ZF、AF、PF、CF。
3.4.3 控制转移类指令
在微机系统中,指令执行的顺序由CS和IP(EIP)决定。CS存放当前代码段的段基址,IP(EIP)存放指令的偏移地址。在正常顺序执行时,要执行 的指令已经由总线接口部件BIU,按CS和IP(EIP)的内容从存储单元中取出存入指令队列中;CPU执行一条指令后,按指令队列中的指令顺序,执行下 一条指令。但实际上经常会遇到改变程序执行流程的情况,程序转移指令就是用改变CS和IP(EIP)的内容,使程序执行的顺序发生变化。当程序需要发生转 移时,存放在指令队列中的指令将被清除,BIU根据改变后的CS和IP(EIP)重新确定指令的地址,并按此地址将指令从存储单元中取出,重新送入指令队 列,并送到CPU去执行。
指令系统中有以下四类控制转移指令:
无条件转移指令;
条件转移指令;
循环控制指令;
中断指令。
3.4.4 处理机控制指令
处理机控制指令完成简单的控制功能。
由表中可看到,在指令系统中允许用指令操作的标志位有CF、DF和IF三位。其中DF用于串运算中决定地址变化的方向,DF0时串运算为地址增量方向执 行,DF1串运算为地址减量方向执行。IF用于可屏蔽中断,当IF0时表示禁止可屏蔽中断(关中断),IF1时表示允许可屏蔽中断(开中断)。
除上述指令外,32位微机增加了位操作的指令,包括位测试指令和位扫描指令两类,从而增加指令的功能,下面加以介绍。
功能:撤销前面ENTER指令的动作。当退出子程序时,应撤销堆栈框架的设定。
在C语言中,不允许函数的嵌套调用,故C语言的编译程序中只采用ENTER M,0的格式。Pascal语言则允许子程序和函数的多层嵌套调用,故可采用ENTER M, N的格式。有关操作系统型指令和浮点运算指令本书不再叙述,需要时可查阅有关手册。