# 3.4.1 数据传送类指令
数据传送类指令主要用于实现寄存器与寄存器之间,寄存器与主存单元之间以及两个主存单元之间的数据传送。数据传送类指令又可以细分为:1.一般传送指令 2.堆栈操作指令 3.数据交换指令
1.一般传送指令
⑴主存单元之间的传送
- MOV mem2,mem1,其含义为 (mem1)→mem2
⑵从主存单元传送到寄存器
MOV reg,mem,其含义为 (mem)→reg
在有些计算机中,该指令用助记符LOAD表示,又称为取数指令。
⑶从寄存器传送到主存单元
MOV mem,reg,其含义为 (reg)→mem
在有些计算机里,该指令用助记符STORE表示,又称为存数指令。
⑷寄存器之间的传送
- MOV reg2,reg1,其含义为 (reg1)→reg2
2.堆栈操作指令
- 堆栈指令是一种特殊的数据传送指令,分为进栈(PUSH)和出栈(POP)两种。
- 因为堆栈(指软堆栈)是主存的一个特定区域,所以对堆栈的操作也就是对存储器的操作。
3.数据交换指令
- 前述指令的传送都是单方向的,然而,数据传送也可以是双方向的,即将源操作数不目的操作数(一个字节或一个字)相互交换位置。
# 3.4.2 运算类指令
1.算术运算指令
- 算术运算指令主要用于进行定点和浮点运算。这类运算包括加、减、乘、除以及加1、减1、比较等,有些机器还有十进制算术运算指令。
- 绝大多数算术运算指令都会影响到状态标志位,通常的标志位有进位、溢出、全零、正负和奇偶等。
2.逻辑运算指令
一般计算机都具有与、或、非、异或等逻辑运算指令。这类指令在没有设置专门的位操作指令的计算机中常用于对数据字(字节)中某些位(一位或多位)进行操作。
(1)按位测(位检查):按位不运算
- (2)按位清(位清除):按位不运算
- (3)按位置(位设置):按位或运算
(4)按位修改:按位异或运算
利用“异或”指令可以修改目的操作数的某些位,只要源操作数的相应位为“1”,
其余位为“0”,异或之后就达到了修改这些位的目的(因为A⊕1=A,A⊕0=A)。
(5)判符合
- 若两数相符合,其异或之后的结果必定为“0”。
(6)清0(不本身异或)
- XOR AL,AL
3.移位指令
- 分为算术移位、逻辑移位和循环移位3类,它们又可分为左移和右移两种。
- 算术移位的对象是带符号数,算术移位过程中必项保持操作数的符号不变,左移一位,数值 × 2,右移一位,数值 ÷ 2。
- 逻辑移位的对象是没有数值含义的二进制代码,因此移位时不必考虑符号问题。
- 循环移位又按进位位是否一起循环分为两类:
- 小循环(不带进位循环)
- 大循环(带进位循环)
# 3.4.3 程序控制类指令
程序控制类指令用于控制程序的执行方向,并使程序具有测试、分析与判断的能力。
1.转移指令
- 在程序执行过程中,通常采用转移指令来改发程序的执行方向。转移指令又分无条件转移和条件转移两种。
- 无条件转移指令(JMP)不受任何条件的约束,直接把程序转向新的位置执行。
1.条件转移指令必项受到条件的约束,若条件满足时才转向新的位置执行,否则程序仍顸序执行。
- 无论是条件转移还是无条件转移都需要给出转移地址。若采用相对寻址方式,转移地址为当前指令地址(即PC的值)和指令中给出的位移量之和,即:(PC)+位移量→PC;若采用绝对寻址方式,转移地址由指令的地址码直接给出,即:A→PC。
2.子程序调用指令
- 子程序是一组可以公用的指令序列,只要知道子程序的入口地址就能调用它。
- 从主程序转向子程序的指令称为子程序调用指令(CALL);而从子程序转向主程序的指令称为返回指令(RET)。
- 主程序和子程序是相对的概念,调用其它程序的程序是主程序;被其它程序调用的程序是子程序。
- 转子指令安排在主程序中需要调用子程序的地方,转子指令是一地址指令。
子程序调用指令和转移指令都可以改发程序的执行顸序,但两者存在着很大的差别:
- 转移指令转移到指令中给出的转移地址处执行指令,不存在返回要求,没有返回地址问题;而子程序调用指令必项以某种方式保存返回地址,以便返回时能找到原来的位置。
- 转移指令用于实现同一程序内的转移;而子程序调用指令转去执行一段子程序,实现的是程序与程序之间的转移。
保存返回地址的方法除去堆栈以外还有:
- ⑴ 用子程序的第一个字单元存放返回地址。
- ⑵ 用寄存器存放返回地址。
3.返回指令
- 从子程序转向主程序的指令称为返回指令,其助记符一般为RET,子程序的最后一条指令一定是返回指令。
- 返回地址存放的位置决定了返回指令的格式,如果返回地址保存在堆栈中,则返回指令是零地址指令,如果返回地址保存在某个主存单元中,则返回指令中必项是一地址指令。
# 3.4.4 输入输出类指令
输入/输出(I/O)类指令用来实现主机不外部设备之间的信息交换,包括输入/输出数据、主机向外设发控制命令或外设向主机报告工作状态等。从广义的角度看,I/O指令可以归入数据传送类。
各种不同的计算机的I/O指令差别很大,通常有两种方式:独立编址方式、统一编址方式
1.独立编址的I/O
- 所谓独立编址就是把外设端口和主存单元分别独立编址。指令系统中有与门的IN/OUT指令。
- 以主机为基准,信息由外设传送到主机称为输入,反之称为输出。指令中需要给出外设端口地址。这些端口地址与主存地址无关,是另一个独立的地址空间。
2.统一编址的I/O
- 所谓统一编址就是把外设寄存器和主存单元统一编址。指令系统中没有专门的I/O指令,就用一般的数据传送类指令来实现I/O操作。