8086指令系统分为以下6组:
⒈ 数据传送指令
⒉ 算术指令
⒊ 逻辑指令
⒋ 串处理指令
⒌ 操控搬运指令
⒍ 处理机操控指令
数据传送指令的功用是把数据、地址传送到寄存器或存储器单元中。它分为4类。
⑴ 通用数据传送指令 ⑵ 累加器专用传送指令
MOV 传送 IN 输入
PUSH 进栈 OUT 输出
POP 出栈 XLAT 换码
XCHG 交流
⑶ 地址传送指令 ⑷ 标志寄存器传送指令
LEA 有用地址送寄存器 LAHF 标志送AH
LDS 指针送寄存器和DS SAHF AH送标志寄存器
LES 指针送寄存器和ES PUSHF 标志进栈
POPF 标志出栈
1 通用数据传送指令
MOV dst, src;传送指令(move)
履行操作:(dst) ← (src)
功用: 将源操作数(字节或字)传送到意图地址。
留意:
● 意图操作数dst和源操作数src不能一起用存储器寻址办法,这个约束适用于一切指令;
● 意图操作数dst不能是CS,也不能用当即数办法;
● 意图操作数dst和源操作数src不允许一起为段寄存器;
● MOV指令不影响标志位。
PUSH src ; 进栈指令(push onto the stack)
履行操作: (SP) ← (SP)-2
((SP)) ← (src)
POP dst ; 出栈指令(pop from the stack)
履行操作: (dst) ← ((SP))
(SP) ← (SP)+2
PUSH和POP指令分别将数据存入仓库或把仓库中的数据取出。仓库是以LIFO(后进先出)办法作业的一个存储区,程序中界说的仓库段便是这样一个LIFO存储区。数据存入仓库单元或从仓库单元中取出都由仓库指针SP指示,而SP总是指向栈顶,所以进栈和出栈指令都会主动修正SP。
PUSH指令履行时,SP的内容先减2,然后将数据压入SP所指示的字单元,存储的办法同样是高8位存入高地址字节,低8位存入低地址字节。POP指令履行时,将SP所指示的栈顶地址的内容取出放入意图地址,然后SP增2,指向新的栈顶地址。
留意:
● PUSH和POP指令只能是字操作,因而存取字数据后,SP的修正有必要是+2或-2;
● PUSH和POP指令不能运用当即数办法;
● POP指令的dst不允许是CS寄存器;
● PUSH和POP指令都不影响标志位。
PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据康复。
XCHG opr1, opr2 ; 交流指令(exchange)
履行操作:(opr1) ←→ (opr2)
XCHG指令使两个操作数opr1,和opr2相互交流,其间一个操作数有必要在寄存器中,另一个操作数能够在寄存器或存储器中。
留意:
● 不允许运用段寄存器
● 不影响标志位
例 假定(DS)=1000H, (SS)=4000H, (SP)=100H, (BX)=2100H, (12100)=00A8H, 指出接连履行下列各条指令后,有关寄存器、存储单元以及仓库的状况。
PUSH DS
PUSH BX
PUSH [BX]
POP DI
POP WORD PTR [DI+2]
POP DS
履行成果: (SP)=100H-2=0FEH (SP)=0FE-2=0FCH (SP)=0FC-2=0FAH
(400FEH)=1000H (400FCH)=2100H (400FAH)=00A8H
履行成果: (SP)=0FA+2=0FCH (SP)=0FC+2=0FEH (SP)=0FE+2=100H
(DI)=00A8H (100AAH)=2100H (DS)=1000H
例 已知(AX)=6634H, (BX)=0F24H, (SI)=0012H, (DS)=1200H, (12F36H)=2500H, 写出下列指令履行的成果。
XCHG AH,AL ; 履行前: (AH)=66H, (AL)=34H
; 履行后: (AH)=34H, (AL)=66H
XCHG AX,[BX+SI] ; 履行前: (AX)=6634H, (12F36H)=2500H
; 履行后: (AX)=2500H, (12F36H)=6634HH
这组指令只限于运用累加器(ac:AX 或AL)传送信息。
IN ac, port ; 输入指令(input), port≤0FFH
履行操作: (AL) ← (port) 传送字节
或 (AX) ← (port+1,port) 传送字
IN ac, DX ; 输入指令, DX中的port>0FFH
履行操作: (AL) ← ((DX)) 传送字节
或 (AX) ← ((DX)+1,(DX)) 传送字
OUT port, ac ; 输出指令(output), port≤0FFH
履行操作: (port) ← (AL) 传送字节
或 (port+1,port) ← (AX) 传送字
OUT DX, ac ; 输出指令(output), DX中的 port>0FFH
履行操作: ((DX)) ← (AL) 传送字节
或 ((DX)+1,(DX)) ← (AX) 传送字
对8086及其后继机型的微处理机,一切I/O端口与CPU之间的通讯都由输入输出指令IN和OUT来完结。IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O端口,因而,IN和OUT指令都要指出I/O端口地址。微处理机分配给外部设备最多有64K个端口,其间前256个端口(0~FFH)称为固定端口,能够直接在指令中指定。当端口地址超越8位(≥256),称为可变端口,它有必要先送到DX寄存器,然后再用IN或OUT指令传送信息。CPU与I/O端口传送信息的寄存器只限于累加器ac (AX或AL),传送16位信息用AX,传送8位信息用AL,这取决于外设端口的宽度。