计算机组成原理令
PAGE
PAGE 24
8086/8088指令
除串操作指令外,所有指令只允许有一个操作数在存储器中。
1. 传送类指令
(数据传送指令,专用累加器传送指令,标志位传送指令,地址传送指令)
(一) 数据传送指令
(1) MOV数据传送指令
指令格式:MOV DST,SRC;
操作数可以是字节、字,源、目的操作数位数必须一致且不能同时在存储器中。
源操作数:可在通用R、段R、存储器中、或为立即数。
目的操作数:不能为立即数。
目的地址是段R名时,源操作数不能是立即数(立即数不能直接传给段R)段R间不能直接传送数据。
例 1:立即数送R或存储单元
MOV AH,2AH; 字节传送;
MOV CX,1234H; 字传送;
MOV DA_BYTE, 02FH; 字节传送;
MOV DA_WORD,1020H; 字传送;
例 2: 寄存器之间传送 MOV AL, BL; MOV ES, AX;
例 3:R 与 M 之间传送。 MOV AL, DB_BYTE
例 4: 把DA_BYTE1字节单元内容传送到DA_BYTE2字节单元中。
MOV AH, DA_BYTE1
MOV DA_BYTE2, AH
例 5: 把立即数1020H传送给DS ,ES。
MOV AX , 1020H
MOV DS , AX
MOV ES , AX
(2)XCHG交换指令
XCHG DST, SRC
(SRC DST) 将源地址的内容与目的地址内容相互交换。
交换数据可为字、字节,只能在通用R之间或R 与M 之间进行。不能使用段R、立即数。
例、数据段中定义了两个字变量VAR1和VAR2,(VAR1)= 1234H,(VAR2)= 5678H;
将这两个字单元内容互换。
MOV AX,VAR1 XCHG VAR2,AX MOV VAR1,AX(或:XCHG VAR1,AX)
(3)PUSH进栈指令格式:PUSH SRC
<1> 8086的堆栈由SS指定的一段存储器( £ 64KB)构成。
自下向上生成的堆栈。 SP初始化:堆栈段长(MAX:FFFFH)
SP初始值指向:(SS)*16 + 段长;(即:栈底+2单元
<2> 8086/8088堆栈规定:以字(2个字节)为单位进行存取。
低地址存放字的低字节单元的内容; 高地址存放字的高字节单元的内容。
<3> 堆栈操作:
设置堆栈:对堆栈段R(SS)及堆栈指针(SP)赋初值。编程设置堆栈段。
(4)POP出栈指令格式:POP DST
(5)、IN(input)输入指令
1、直接I/O端口寻址方式:
IN AL,pn (字节) IN AX,pn (字)
指令功能:AL/AX ←(pn);其中:pn表示I/O端口地址(或称作:I/O端口号)。
2、间接I/O端口寻址方式:
IN AL,DX (字节) IN AX,DX (字)
指令功能:AL/AX ←(DX);其中:DX中的内容为I/O端口地址。
例、把I/O端口379H的字节内容传送到主存数据段的VARBYTE字节单元中。
MOV DX,379H
IN AL,DX
MOV VARBYTE,AL
(6)OUT(output)输出指令
1、直接I/O端口寻址方式:
OUT pn,AL (字节) OUT pn,AX (字)
指令功能:pn ←(AL/AX);其中:pn表示I/O端口地址(或称作:I/O端口号)。
2、间接I/O端口寻址方式:
OUT DX,AL (字节) OUT DX,AX (字)
指令功能:DX ←(AL/AX);其中:DX中的内容为I/O端口地址。
例、 把主存数据段的VARBYTE字节单元中的内容传送到I/O端口230H中。
MOV DX,230H
MOV AL,VARBYTE
OUT DX,AL
(7)XLAT(translate)换码指令
指令格式:XLAT [TABADDR]
指令功能:AL ←((BX)+(AL))
其中: [TABADDR]中的方括号表示本项内容可以省略,TABADDR表示换码表首地址的符号地址。BX的内容为换码表的首地址在数据段中