1、1 80868086的指令系统的指令系统 8086的指令系统中共有的指令系统中共有92种基本指令,可以种基本指令,可以分成分成6个功能组个功能组:1 1数据传输数据传输2 2算术运算算术运算3 3逻辑运算和移位指令逻辑运算和移位指令4 4程序转移程序转移5 5字符串操作字符串操作6 6处理器控制处理器控制2介绍指令系统使用介绍指令系统使用的符号:的符号:八位寄存器八位寄存器:AH,AL,BH,H,BL,CH,CL,DH,DL 十六位通用寄存器十六位通用寄存器:AX,BX,CX,DX,SP,BP,SI,DI 堆栈指针堆栈指针 SP 指令指针指令指针 IP(或(或PC)标志位标志位Flags目的和
2、源变址寄存器目的和源变址寄存器DI,SI段寄存器段寄存器CS,DS,ES,SS通用寄存器通用寄存器rAL或或AX(取决于操作数长度取决于操作数长度)acc3src,dest源,目的操作数(下列寻址方式都可以用)源,目的操作数(下列寻址方式都可以用)BX+SI+n,BX+DI+n,BP+SI+n,BP+DI+nSI+n,DI+n,BP+n,BX+nN,r 存储器单元的内容存储器单元的内容(正常在数据段正常在数据段)ES:附加存储器段的内容附加存储器段的内容 OPRD 操作数操作数Seg 段寄存器(段寄存器(CS,DS,ES,SS)i m 立即数立即数 (n 8位位,nn 16位位,nnnn 32
3、位位)44.2 数据传送指令数据传送指令功能:功能:负责把数据、地址或立即负责把数据、地址或立即数数传送到传送到寄存器或存寄存器或存储单元储单元。特点:特点:它是计算机最基本、最重要的一种操作,使用它是计算机最基本、最重要的一种操作,使用比例最高。比例最高。种类种类(分四种分四种):(一)通用传送指令(一)通用传送指令(二)目标地址传送指令(二)目标地址传送指令(三)标志位传送指令(三)标志位传送指令(四)输入输出指令(四)输入输出指令580868086提供方便灵活的通用的传送操作,适用于大多数提供方便灵活的通用的传送操作,适用于大多数操作数。操作数。通用传送指令包括:通用传送指令包括:1 1
4、、MOV MOV 2 2、PUSH POP PUSH POP 3 3、XCHG XCHG 4 4、XLATXLAT61MOVMOVdest,dest,src ;(dest)src ;(dest)(src)(src)目的目的 源源 目的目的 源源 把一个字节把一个字节(B)(B)或一个字(或一个字(W W)操作数由源传)操作数由源传送至目的。送至目的。实现实现:寄存器寄存器 寄存器寄存器/存储器之间;存储器之间;立即数立即数寄存器寄存器/存储器存储器寄存器寄存器/存储器存储器段寄存器之间的数据传段寄存器之间的数据传送。送。7 具体说,通用数据传送指令能实现:具体说,通用数据传送指令能实现:CPU
5、CPU内部寄存器之间的数据的任意传送内部寄存器之间的数据的任意传送(除了代码段寄存器(除了代码段寄存器CSCS和指令指针和指令指针IPIP以外)。以外)。例:例:MOV DLMOV DL,CHCH;8;8位寄存器位寄存器 8 8位寄存位寄存器器 MOV AXMOV AX,DX ;16DX ;16位寄存器位寄存器 1616位寄存器位寄存器 MOV SIMOV SI,BPBP MOV DS MOV DS,BXBX ;通用寄存器;通用寄存器 段段寄存器寄存器 MOV AX,CSMOV AX,CS ;段段寄存器寄存器 通用寄存器通用寄存器8 立即数传送至立即数传送至CPUCPU内部通用寄存器组内部通用
6、寄存器组 用于给寄存器(用于给寄存器(AXAX、BXBX、CXCX、DXDX、BPBP、SPSP、SISI、DIDI)赋初值。)赋初值。例:例:MOV CLMOV CL,04H04H;立即数;立即数8 8位位寄存器寄存器 MOV AXMOV AX,03FFH03FFH;立即数;立即数1616位位寄存器寄存器 MOV MOV WORD PTRWORD PTR SI SI,057BH 057BH;立即数;立即数存储器存储器MOV MOV BYTE PTRBYTE PTR MEM,5 MEM,5;立即数;立即数存储器存储器9 CPUCPU内部寄存器(除内部寄存器(除CSCS和和IPIP外)存储器(所
7、有寻址外)存储器(所有寻址方式)之间数据传送。方式)之间数据传送。可以实现一字节或一个字可以实现一字节或一个字的传送。的传送。例:例:MOV MOV MEMMEM,AX,AX;累加器累加器存储器存储器,直接寻址直接寻址MOV MOV MEMMEM,DS,DS;段寄存器;段寄存器存储器,存储器,直接寻址直接寻址MOV MOV BXBX,CX,CX;寄存器;寄存器存储器,存储器,变址寻址变址寻址MOV AX,MOV AX,SI SI;存储器;存储器累加器,累加器,变址寻址变址寻址MOV DS,MOV DS,MEM MEM ;存储器;存储器段寄存器,段寄存器,直接寻址直接寻址MOV CX,MOV C
8、X,BX SIBX SI ;存储器;存储器累加器,累加器,相相对基址加变址对基址加变址10 MOV MOV MEM2,MEM1 MEM2,MEM1 错。错。MOV AX ,MEM1MOV AX ,MEM1MOV MEM2 ,AX MOV MEM2 ,AX 对。对。例例 :MOVMOV DS DS,2000H 2000H 错。错。MOV AX,2000MOV AX,2000 H HMOV DS,AX MOV DS,AX 对。对。11 MOVMOV ES,DS ;ES,DS ;错错MOV AX,DSMOV AX,DSMOV ES,AX ;MOV ES,AX ;对对 。例:例:MOV MOV CS
9、CS,AX AX ;错错 MOV AXMOV AX,CS ;CS ;对对 。MOVMOV IP,IP,AX AX ;错错 MOV AXMOV AX,IP ;IP ;对。对。12BXBX、SISI、DIDI间址间址默认段地址为默认段地址为DSDS,BPBP间址间址默认段地址默认段地址SSSS。这样做为了允许程序员连续用两条指令分别对这样做为了允许程序员连续用两条指令分别对SSSS和和SPSP寄存器赋值,同时又防止堆栈空间变动过程出现寄存器赋值,同时又防止堆栈空间变动过程出现中断。中断。(除(除SAHFSAHF、POPFPOPF以外)。以外)。132 PUSH PUSH POP POP 这是两条堆
10、栈操作指令。这是两条堆栈操作指令。堆栈堆栈按照按照先进后出先进后出原则组织的一段内存区域,原则组织的一段内存区域,下推式的(规定堆栈设置在堆栈段内)下推式的(规定堆栈设置在堆栈段内)改变改变SPSP的内容,的内容,随着随着推入堆栈内容增加,推入堆栈内容增加,SPSP的值减少。的值减少。先进后出工作原则(先进后出工作原则(Last In First Out Last In First Out 简称简称LIFO)LIFO)14可以可以用一条立即数传送指令给用一条立即数传送指令给SPSP赋值赋值,确定,确定SPSP在在SSSS段中的初段中的初始位置。始位置。例:设:例:设:(SS)=9000H,(S
11、S)=9000H,堆栈段堆栈段为为64KB64KBMOV SP,0E200H;(SP)=0E200HMOV SP,0E200H;(SP)=0E200H则:整个堆栈段的物理地址范则:整个堆栈段的物理地址范围为:围为:堆栈在内存中的情况如右图所堆栈在内存中的情况如右图所示:示:.偏移地址偏移地址物理地址物理地址00000H(低地址)00000H(低地址)90000H90000H9E200H9E200H9FFFFH9FFFFHFFFFHFFFFH(SP)=E200H(SP)=E200H0000H0000H堆堆栈栈段段堆栈在内存中的情况堆栈在内存中的情况15q 调用子程序(或过程)或发生中断时要调用子
12、程序(或过程)或发生中断时要保护保护断点的地址断点的地址,子程序或中断返回时恢复断点。子程序或中断返回时恢复断点。16注意:注意:SP堆栈指针堆栈指针,始终指向栈顶。始终指向栈顶。SP初值用初值用MOV SP,i m来设定。来设定。17 (堆栈操作指令有两条堆栈操作指令有两条):格式:格式:PUSH srcPUSH src;(SP);(SP)(SP)-2(SP)-2 操作如:操作如:PUSH AXPUSH AX 格式:格式:POP dest;(dest)POP dest;(dest)(SP)(SP)(SP)+2(SP)+2操作如:操作如:POP BXPOP BX18q 存放存放CPUCPU寄存
13、器或存储器中暂时不使用的数据寄存器或存储器中暂时不使用的数据,使用数据时将其弹出:使用数据时将其弹出:PUSH AXPUSH AX;将将(AX)(AX)入栈入栈.11112222(SP)-2(SP)-2(SP)-1(SP)-1(SP)(SP)堆堆栈栈段段PUSH AX前PUSH AX前(AX).22H22H11H11H.11H11H22H22H(SP)(SP)(SP)+1(SP)+1(SP)+2(SP)+2堆堆栈栈段段PUSH AX后PUSH AX后(AX)19使用数据时将其弹出:使用数据时将其弹出:POP BXPOP BX.22H22H11H11H.33H33H44H44HBXBX(SP)(
14、SP)(SP)+1(SP)+1(SP)+2(SP)+2堆堆栈栈段段POP BX前POP BX前.22H22H11H11H.11H11H22H22HBXBX(SP)-2(SP)-2(SP)-1(SP)-1(SP)(SP)堆堆栈栈段段POP BX后POP BX后20 堆栈操作都按字操作。堆栈操作都按字操作。PUSH,POP PUSH,POP 指令的操作数可能有三种:指令的操作数可能有三种:寄存器(通用寄存器,地址指针,变址寄存器)寄存器(通用寄存器,地址指针,变址寄存器),段寄存器段寄存器(CSCS除外,除外,PUSH CS PUSH CS 合法,合法,POP CS POP CS 非非法)法),存
15、储器。存储器。刺刺 执行执行PUSH PUSH 指令指令,(SP)-2 ,(SP)-2 (SP),(SP),低字节放在低地址,高字节放在高地址。低字节放在低地址,高字节放在高地址。随着推随着推入堆栈内容增加,堆栈就扩展,入堆栈内容增加,堆栈就扩展,SPSP的值减少,但的值减少,但SPSP总是指向栈顶。总是指向栈顶。堆栈工作原则堆栈工作原则后进先出。后进先出。堆栈最大容量即为堆栈最大容量即为SPSP的初值与的初值与SSSS之间的差。之间的差。21堆栈应用举例:堆栈应用举例:例:例:MOV BP,SPPUSH AXPUSH BXPUSH CXMOV CX,BP-6 MOV BX,BP-4MOV A
16、X,BP-2ADD SP,6例例 :PUSH AXPUSH BXPUSH CXPOP CXPOP BX POP AX22格式:格式:XCHG dest,srcXCHG dest,src;(dest);(dest)(src)(src)执行操作:执行操作:可以实现:可以实现:注意:注意:存储器之间不能交换,存储器之间不能交换,两个操作数中必须有一个在两个操作数中必须有一个在寄存器中;寄存器中;段寄存器不能作为一个操作数;段寄存器不能作为一个操作数;允许字或字节操作,不影响标志位。允许字或字节操作,不影响标志位。23应用举例:应用举例:XCHG BL,DLXCHG AX,SIXCHG COUNTDI
17、,AXXCHG BX,DI(错)错)XCHG DS,AX (错)错)24 该指令不影响标志位。该指令不影响标志位。格式:格式:XLAT str_tableXLAT str_table;(;(ALAL)(BX BX)+(ALAL)或或 XLATXLAT str_table str_table表格符号地址(首地址),表格符号地址(首地址),只是为了提高可读性而设置,汇编时仍用只是为了提高可读性而设置,汇编时仍用BXBX。25XLATXLAT指令使用方法指令使用方法:先建立一个字节表格;先建立一个字节表格;(相对与表格首地址位移量)(相对与表格首地址位移量);(表中第一个元素的序号为(表中第一个元素
18、的序号为0 0)。(AL)(AL)为转换的代码。为转换的代码。26 若把字符的若把字符的扫描码扫描码转换成转换成ASCIIASCII码码;或或数字数字0909转转换成换成7 7段数码所需要的相应代码(段数码所需要的相应代码(字形码字形码)等就要用)等就要用XLATXLAT指令。指令。例:内存的数据段中有一张十六进制数字的例:内存的数据段中有一张十六进制数字的ASCIIASCII码码表。表。首地址为:首地址为:Hex_table,Hex_table,欲查出表中第欲查出表中第1010个元素个元素(A)A)27执行指令序列执行指令序列:MOV BX,OFFSET Hex_tableMOV AL,0A
19、H XLAT Hex_table假设:假设:(DS)=F000H,Hex_table=0040H(AL)=0AH执行执行XLAT以后:以后:(AL)=41H=(F004AH),),即即“A”的的ASCII码。码。30H30H31H31H32H32H.39H39H41H41H42H42H.46H46H.Hex_tableHex_tableHex_table+1Hex_table+1Hex_table+2Hex_table+2Hex_table+0AHHex_table+0AHHex_table+0BHHex_table+0BHHex_table+0FHHex_table+0FHFFBBAA991
20、1220016进制数的进制数的ASCII码表码表28输入输出指令共两条:输入输出指令共两条:输入指令输入指令用于用于CPUCPU从外设端口接受数据从外设端口接受数据,输出指令输出指令用于用于CPUCPU向外设端口发送数据。向外设端口发送数据。无论接受还是发送数据,必须通过累加器无论接受还是发送数据,必须通过累加器AX(AX(字)或字)或AL(AL(字节),字节),又称累加器专用传送指令又称累加器专用传送指令 。29 每个外设要占几个端口:数据口,状态口和控每个外设要占几个端口:数据口,状态口和控制口。每个端口像存储单元一样要赋予一个地址,制口。每个端口像存储单元一样要赋予一个地址,称端口地址。
21、称端口地址。CPUCPUI/OI/O设备设备译译码码数据端口数据端口DBDBABABCBCBI/O接口I/O接口状态端口状态端口控制端口控制端口30在在IBMPCIBMPC机里,可以配接许多外部设备,每个外设与机里,可以配接许多外部设备,每个外设与CPUCPU之间交换数据,状态信息和控制命令,每一种信之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。息交换都要通过一个端口来进行。端口数:外部设备最多有端口数:外部设备最多有6553665536个个I/OI/O端口。端口。由由A A0 0AA1515译码形成。译码形成。端口号:端口号(即外设端口地址)为端口号:端口号(即外设
22、端口地址)为0000HFFFFH0000HFFFFH。PCPC机仅使用机仅使用A A0 0AA9 9译码形成译码形成I/OI/O口地址,即口地址,即1024H1024H个口个口地址地址 端口号:端口号:0000H03FFH0000H03FFH其中:其中:A A9 9=1=1,表示扩充槽上的,表示扩充槽上的口地址。口地址。31,可以直接写在,可以直接写在指令中,这就是长格式。指令中,这就是长格式。端口号代替指令中的端口号代替指令中的PORTPORT,机器指令用二字节表示,第二字节就是端口号。机器指令用二字节表示,第二字节就是端口号。,必须先把端口号放到必须先把端口号放到DXDX寄存器中。寄存器中
23、。不需要用任何段寄存器来修改它的值。不需要用任何段寄存器来修改它的值。32格式:格式:IN acc,port ;(acc)IN acc,port ;(acc)(port)(port)具体形式有四种:具体形式有四种:IN AL,data8 ;IN AL,data8 ;端口地址端口地址8 8位,位,输入一个字节输入一个字节IN AX,data8 IN AX,data8 ;端口地址;端口地址8 8位,位,输入一个字输入一个字IN AL,DXIN AL,DX ;端口地址;端口地址1616位,位,输入一个字节输入一个字节IN AX,DXIN AX,DX ;端口地址;端口地址1616位,位,输入一个字输入
24、一个字 必须通过累加器必须通过累加器AX(AX(字)或字)或AL(AL(节)节)输入输入数据。数据。33格式:格式:OUT port,accOUT port,acc;(port);(port)(acc)(acc)具体形式有四种:具体形式有四种:OUT data8 ,AL;OUT data8 ,AL;端口地址端口地址8 8位,输出一个位,输出一个字节字节 OUT data8,AX OUT data8,AX;端口地址;端口地址8 8位,输出一个字位,输出一个字 OUT DX,AL OUT DX,AL ;端口地址;端口地址1616位,输出一个位,输出一个字节字节 OUT DX,AX OUT DX,A
25、X ;端口地址;端口地址1616位,输出一个位,输出一个字字必须通过累加器必须通过累加器AX(AX(字)或字)或AL(AL(节)节)输出输出数据。数据。34例例1:实现:实现(29H)(28H)(DATA_WORD)IN AX,28H MOV DATA_WORD,AX例例2:从端口:从端口3FCH 送一个字到送一个字到AX寄存器寄存器MOV DX,3FCH IN AX,DX;(AL)(3FCH),),(AH)(3FDH)例例3:实现将(:实现将(AL)(05H)OUT 5,AL;(;(05H)(AL)35 8086/8088 8086/8088 提供三条提供三条:地址指针写入指定寄存器或寄存器
26、对指令。地址指针写入指定寄存器或寄存器对指令。1 1、LEA(Load Effective Address)LEA(Load Effective Address)2 2、LDS(Load pointer using DS)LDS(Load pointer using DS)3 3、LES(Load pointer using ES)LES(Load pointer using ES)36格式:格式:LEA reg16,mem16 ;EA(reg16)功能:加载有效地址,用于写进地址指针。功能:加载有效地址,用于写进地址指针。例:设(例:设(BX)=0400H,(,(SI)=003CHLEA B
27、X,BX+SI+0F62H执行指令后:执行指令后:EA=(BX)+(SI)+0F62H=0400H+003CH+0F62H=139EH(BX)=139EH37注意:设注意:设 (DS)=3000HBUFFER=1000H(31000H)=0040H(1)LEA 指令与指令与MOV 的区别的区别LEA BX,BUFFER ;(;(BX)=1000HMOV BX,BUFFER ;(BX)=0040H LEA 指令与指令与MOV等价等价LEA BX,BUFFER ;(BX)=1000HMOV BX,OFFSET BUFFER ;(BX)=1000H40H40H00H00H.3000H:1000H30
28、00H:1000H(DS)(DS)BUFFERBUFFER31001H31001H.存储器存储器38(2),。(3)请思考下列指令的正、误)请思考下列指令的正、误LEA DX,BXSILEA DX,AX39 格式:格式:LDS reg16,mem32LDS reg16,mem32 ;(;(reg16reg16)(EAEA)(DSDS)(EAEA)+2+2)功能:功能:。将指令指定将指令指定mem32mem32单元的前两个单元内容单元的前两个单元内容(16(16位偏移位偏移量量)装入指定通用寄存器,把后两个单元内容装入指定通用寄存器,把后两个单元内容(段地段地址址)装入到装入到DSDS段寄存器。
29、段寄存器。用于写远地址指针。用于写远地址指针。40例例:假设:假设:(DS)=C 000H指令指令:LDS SI,0010H执行指令后执行指令后:(SI)=0180H(DS)=2000H 80H80H01H01H00H00H20H20HC000H:0010HC000H:0010H(DS)(DS)C0011HC0011HC0012HC0012HC0013HC0013H.存储器存储器41格式:格式:LES reg16,mem32LES reg16,mem32 ;(;(reg16reg16)(EAEA)(ESES)(EAEA)+2+2)功能:功能:此指令常常指定此指令常常指定DIDI寄存寄存器。器。
30、将指令指定将指令指定mem32mem32单元的前两个单元内容单元的前两个单元内容(16(16位偏移位偏移量量)装入指定通用寄存器,把后两个单元内容装入指定通用寄存器,把后两个单元内容(段地段地址址)装入到装入到ESES段寄存器。段寄存器。用于写远地址指针。用于写远地址指针。42例例:假设:假设:(DS)=B 000H (BX)=080AH指令指令:LES DI,BX执行指令后执行指令后:(DI)=05A2H(ES)=4000HA2HA2H05H05H00H00H40H40HB000H:080AHB000H:080AH(DS)(DS)B080BHB080BHB080CHB080CHB080DHB
31、080DH.存储器存储器(BX)(BX)43综合举例:综合举例:设:设:(DS)=5000H TABLE=1000H分析下列指令执行结果:分析下列指令执行结果:MOV BX,TABLE ;(;(BX)=0040H MOV BX,OFFSET TABLE ;(;(BX)=1000H LEA BX,TABLE ;(;(BX)=1000H LES BX,TABLE ;(;(BX)=0040H,(,(ES)=3000H LDS BX,TABLE ;(;(BX)=0040H,(,(DS)=3000H40H40H00H00H00H00H5000H:1000H5000H:1000H(DS)(DS)TABLE
32、TABLE51001H51001H.存储器存储器30H30H.51002H51002H51003H51003H44采用了隐含寄存器(采用了隐含寄存器(AHAH、Flags)Flags)操作数方式。操作数方式。80888088有四条标志传送操作指令:有四条标志传送操作指令:1 1LAHFLAHF2 2SAHFSAHF3 3PUSH FPUSH F4 4POP FPOP F 45格式:格式:LAHF LAHF ;(;(AHAH)(PSWPSW的低字节)的低字节)功能:功能:。SFSFZFZFAFAFPFPFCFCF0 01 12 23 34 45 56 67 7TFTFIFIFDFDFOFOF8
33、89 91010111112121313141415150 01 12 23 34 45 56 67 7FLAGSFLAGSAHAHLAHF指令操作图示意指令操作图示意462 2SAHFSAHF格式:格式:SAHF SAHF ;(;(PSWPSW的低字节)的低字节)(AHAH)功能:(功能:(AHAH)送标志寄存器低八位。)送标志寄存器低八位。3 3PUSH FPUSH F格式:格式:PUSH FPUSH F;(;(SPSP)(SPSP)-2-2 (SPSP)+1+1,(,(SPSP)(PSWPSW)功能功能 :标志进栈。标志进栈。4 4POP FPOP F 格式:格式:POP FPOP F;(;(PSWPSW)(SPSP)+1+1,(,(SPSP)(SPSP)(SPSP)+2 +2 功能功能 :标志出栈。:标志出栈。47注意:注意:(1)标志位的影响标志位的影响LAHF、PUSHF不影响标志位不影响标志位,SAHF、POPF由装入的值确定标志位的值,由装入的值确定标志位的值,即影响标志位。即影响标志位。(2)PUSH F、POPF用于保护调用过程前(用于保护调用过程前(PSW),过程返回后过程返回后恢复。恢复。例:例:PUSHAXPUSH CXPUSH FCALL TRANSPOPFPOP CXPOP AX