机器指令是由1,0组成的特定的二进制数序列。 图1
机器指令格式为:操作码字段 地址码字段。其中,操作码字段表示执行操作类型,地址码字段表示操作数的地址或操作数本身。一般的操作数有被操作数,操作数及操作结果三种类型。图1为机器指令的例子。
为了便于书写和阅读,每条指令通常用3个或4个英文缩写字母来表示。这种缩写码叫做指令助记符。图2是典型的指令助记符。
图2
AH、AL、BH、BL、CH、CL、DH、DL:八位通用寄存器;
AX、BX、CX、DX、SP、BP、DI、SI:十六位通用寄存器;
SP: 堆栈指针;
IP:指令指针;
FLAGS:标志寄存器;
DI、SI:目的和源变址寄存器;
CS、DS、SS、ES: 段寄存器;
SEG:段寄存器通用符号;
REG:通用寄存器组;
AC:AX或AL/AH(取决于操作数长度)
SRC:源操作数
DST:目的操作数
MEM:存储器操作数
MEM/REG:存储器或通用寄存器操作数
DATA:立即数,8位或16位
OPRD:操作数
n:8位立即数
nn:16位立即数
nnnn: 32位立即数
数据传送类指令分为四种:通用数据传送、累加器专用数据传送、地址传送和标志传送。
通用数据传送指令
通用数据传送指令包括最基本的传送指令MOV,堆栈操作指令PUSH和POP,数据交换指令XCHG和查表指令XLAT。
1.基本的传送指令MOV。指令一般形式为:MOV DST,SRC;指令功能: (字节或字);指令执行后,源操作数不变,目标操作数发生变化且与源操作数相同。例如:指令 MOV AL,BL;若该指令执行前,AL=25H,BL=86H,则指令执行后,AL=BL=86H。
2.堆栈操作指令。在8086/8088系统中,无论压入或弹出操作,都是以字为单位。
(1)入栈指令:指令格式:PUSH OPRD;指令功能:先修改SP-2→SP,然后把一个源操作数(1个字)传送到由SP所指向的堆栈的顶部。
(2)出栈指令:指令格式:POP OPRD;指令功能:是先将栈顶的一个字弹出送往目的操作数,再修改SP+2→SP。
3.交换指令。指令格式:XCHG OPRD1,OPRD2;指令功能:把二个字节或字的操作数相互交换。这二个操作数不能是立即数,也不能同时为存储器操作数。