1、1下列指令源操作数和目的操作数的寻址方下列指令源操作数和目的操作数的寻址方式分别是什么?式分别是什么?(1)MOV DX,100H(2)MOV BX,0100H(3)MOV CX,DATASI(4)MOV ES:SI,AX(5)ADD AX,BXDI(6)AND AX,BX(7)XOR AX,BX(8)MOV AL,DATA BPDI 2第二节第二节 8086/80888086/8088的指令系统的指令系统 第一部分第一部分 指令系统概述指令系统概述 第二部分第二部分 8086/8088的指令系统的指令系统8086/80888086/8088的指令的指令系统系统3第一部分第一部分 指令系统概述
2、指令系统概述8086/8088的指令系统中的基本指令共的指令系统中的基本指令共133条条.可以分成可以分成6个功能组个功能组:1数据传送数据传送(Data transfer)2算术运算(算术运算(Arithmetic)3逻辑运算和移位指令逻辑运算和移位指令(Logic&Shift)4串操作串操作(String manipulation)5控制转移(控制转移(Control Transfer)6处理器控制(处理器控制(Processor Control)4介绍指令系统使用介绍指令系统使用的符号:的符号:八位寄存器八位寄存器:AH,AL,BH,H,BL,CH,CL,DH,DL 十六位通用寄存器十六
3、位通用寄存器:AX,BX,CX,DX,SP,BP,SI,DI 堆栈指针堆栈指针 SP 指令指针指令指针 IP(或(或PC)标志位标志位Flags目的和源变址寄存器目的和源变址寄存器DI,SI段寄存器段寄存器CS,DS,ES,SS通用寄存器通用寄存器regAL或或AX(取决于操作数长度取决于操作数长度)acc5src,dest源,目的操作数(下列寻址方式都可以用)源,目的操作数(下列寻址方式都可以用)BX+SI+n,BX+DI+n,BP+SI+n,BP+DI+nSI+n,DI+n,BP+n,BX+nN,r 存储器单元的内容存储器单元的内容(正常在数据段正常在数据段)ES:附加存储器段的内容附加存
4、储器段的内容 Sreg 段寄存器(段寄存器(CS,DS,ES,SS)MEM 内存操作数内存操作数(MEM8MEM16)IMM 立即数立即数 (IMM8IMM16)P8 8位位I/O端口号端口号68086/8088指令助记符表指令助记符表指令类别指令类别记助符记助符数数据据传传送送通用传送通用传送输入输出输入输出目标地址传送目标地址传送标志传送标志传送算算术术运运算算加法加法减法减法乘法乘法除法除法转换转换MOV,PUSH,POP,XCHG,XLATMOV,PUSH,POP,XCHG,XLATIN,OUTIN,OUTLEA,LDS,LESLEA,LDS,LESLAHF,SAHF,PUSHF,PO
5、PFLAHF,SAHF,PUSHF,POPFADD,ADC,INC,ADD,ADC,INC,AAA,DAAAAA,DAASUB,SBB,DEC,NEG,CMP,SUB,SBB,DEC,NEG,CMP,AAS,DAS,AAS,DAS,MUL,IMUL,MUL,IMUL,AAMAAMDIV,IDIV,DIV,IDIV,AADAADCBW,CWDCBW,CWD78086/8088指令助记符表(续)指令助记符表(续)逻逻辑辑指指令令逻辑运算逻辑运算移位移位 循环移位 循环移位串串处处理理串操作串操作重复控制重复控制控控制制转转移移转转移移无条件转移无条件转移条件条件转移转移循环控制循环控制过程调用过程
6、调用中断指令中断指令处理器控制处理器控制AND,OR,XOR,NOT,TESTAND,OR,XOR,NOT,TESTSHL,SAL,SHR,SARSHL,SAL,SHR,SARROL,ROR,RCL,RCRROL,ROR,RCL,RCRMOVS,CMPS,SCAS,LODS,STOSMOVS,CMPS,SCAS,LODS,STOSREP,REPE/REPZ,REPNE/REPNZREP,REPE/REPZ,REPNE/REPNZJMPJMPJA/JNBE,JAE/JNB,JB/JNAE,JBE/JNA,JC,JCXZ,JE/JZ,JNS,JO,JS,JG/JA/JNBE,JAE/JNB,JB/
7、JNAE,JBE/JNA,JC,JCXZ,JE/JZ,JNS,JO,JS,JG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG,JNC,JNE/JNZ,JNO,JNP/JPO,JP/JPEJNLE,JGE/JNL,JL/JNGE,JLE/JNG,JNC,JNE/JNZ,JNO,JNP/JPO,JP/JPELOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZLOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZCALL,RETCALL,RETINT,INTO,IRETINT,INTO,IRETCLC,STC,CMC,CLD,STD,CLI,STI,NOP,HLT,WAIT
8、,ESC,LOCKCLC,STC,CMC,CLD,STD,CLI,STI,NOP,HLT,WAIT,ESC,LOCK指令类别指令类别记助符记助符8学习指令的注意事项学习指令的注意事项 指令的功能指令的功能该指令能够实现何种操作。通该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩常指令助记符就是指令功能的英文单词或其缩写形式写形式 指令支持的寻址方式指令支持的寻址方式该指令中的操作数可该指令中的操作数可以采用何种寻址方式以采用何种寻址方式 指令对标志的影响指令对标志的影响该指令执行后是否对各该指令执行后是否对各个标志位有影响,以及如何影响个标志位有影响,以及如何影响 其他方面其
9、他方面该指令其他需要特别注意的地方,该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等隐含使用的寄存器等9第二部分第二部分 8086/8088指令系统指令系统一、一、数据传送指令数据传送指令(Data transfer)(一)通用传送指令(一)通用传送指令(General Purpose Transfer)(二)输入输出指令(二)输入输出指令(Input and Output)(三)目的地址传送指令(三)目的地址传送指令(Address-object transfer)(四)标志传送指令(四)标志传送指令(Flag
10、register transfer)10一一 数据传送指令数据传送指令功能:功能:负责把数据、地址或立即负责把数据、地址或立即数数传送到传送到寄存器或存储单元寄存器或存储单元。特点:特点:它是计算机最基本、最重要的一种操作,使用比例最高。它是计算机最基本、最重要的一种操作,使用比例最高。种类种类(分四种分四种):通用传送指令包括:通用传送指令包括:MOV,PUSH,POP,XCHG,XLAT。输入输出指令指令包括输入输出指令指令包括:IN,OUT。目的地址传送指令包括目的地址传送指令包括:LEA,LDS,LES 标志传送指令包括标志传送指令包括 :LAHF,SAHF,PUSHF,POPF 除除
11、 SAHF和和POPF指令外,对标志位没有影响。指令外,对标志位没有影响。11(一)通用传送指令(一)通用传送指令(General Purpose Transfer)8088提供方便灵活的通用的传送操作,适用于大多数提供方便灵活的通用的传送操作,适用于大多数操作数。操作数。通用传送指令(除了通用传送指令(除了XCHG以外)是唯一允许以段寄以外)是唯一允许以段寄存器为操作数指令。存器为操作数指令。通用传送指令包括:通用传送指令包括:1、MOV (Movement)2、PUSH (Push word onto stack)POP (Pop word off stack)3、XCHG (Exchan
12、ge)4、XLAT (Translate)121MOV dest,src ;(dest)(src)功能:功能:把一个字节把一个字节(B)或一个字(或一个字(W)操作数由源传送至目的。)操作数由源传送至目的。实现实现:寄存器寄存器 寄存器寄存器/存储器之间;存储器之间;立即数立即数寄存器寄存器/存储器存储器寄存器寄存器/存储器存储器段寄存器之间的数据传送。段寄存器之间的数据传送。通用寄存器AX BX CX DXBP SP SI DIAL BL CL DLAH BH CH DH段寄存器CS DS SS ES存储器立即数16位816位816位816位MOV MOV 指令数据传送方向指令数据传送方向1
13、3 具体说,通用数据传送指令能实现:具体说,通用数据传送指令能实现:CPU内部寄存器之间的数据的任意传送内部寄存器之间的数据的任意传送(除了码段寄存器(除了码段寄存器CS和指令指针和指令指针IP以外)。以外)。段寄存器之间不能传送。段寄存器之间不能传送。例:例:MOV DL,CH;8位寄存器位寄存器 8位寄存器位寄存器 MOV AX,DX;16位寄存器位寄存器 16位寄存器位寄存器 MOV SI,BP MOV DS,BX;通用寄存器;通用寄存器 段段寄存器寄存器 MOV AX,CS ;段段寄存器寄存器 通用寄存器通用寄存器14 立即数传送至立即数传送至CPU内部通用寄存器组内部通用寄存器组 (
14、AX、BX、CX、DX、BP、SP、SI、DI)。)。不能直接给段寄存器赋值不能直接给段寄存器赋值例:例:MOV CL,04H;立即数;立即数8位位寄存器寄存器 MOV AX,03FFH;立即数;立即数16位位寄存器寄存器15 CPU内部寄存器(除内部寄存器(除CS和和IP外)外)与存储器(所有寻址方式)之间数据传送。与存储器(所有寻址方式)之间数据传送。可以实现一字节或一个字的传送。可以实现一字节或一个字的传送。存储单元之间不能直接传送存储单元之间不能直接传送 例:例:MOV MEM,AX;累加器累加器存储器存储器,直接寻址直接寻址MOV MEM,DS;段寄存器;段寄存器存储器,存储器,直接
15、寻址直接寻址MOV DISPBX,CX;寄存器;寄存器存储器,存储器,变址寻址变址寻址MOV AX,DISP SI;存储器;存储器累加器,累加器,变址寻址变址寻址MOV DS,MEM;存储器;存储器段寄存器,段寄存器,直接寻址直接寻址MOV CX,DISP BX SI ;存储器;存储器累加器,累加器,相对基址加变址相对基址加变址16 注意注意:(1)不能用一条)不能用一条MOV指令实现以下传送。指令实现以下传送。j 存储单元之间的传送存储单元之间的传送MOV MEM2,MEM1 错。错。MOV AX ,MEM1MOV MEM2 ,AX 对。对。k 立即数送段寄存器立即数送段寄存器 例例:MOV
16、 DS,2000H 错。错。MOV AX,2000 HMOV DS,AX 对。对。17l 段寄存器之间的传送段寄存器之间的传送MOV ES,DS ;错错MOV AX,DSMOV ES,AX ;对对。注意注意CS和和IP的使用的使用CS和和IP不能作为目标操作数,不能作为目标操作数,CS可以作为源操作数。可以作为源操作数。例:例:MOV CS,AX ;错错 MOV AX,CS ;对对。MOV IP,AX ;错错 MOV AX,IP ;对。对。18(2)段地址的默认)段地址的默认BX、SI、DI间址间址默认段地址为默认段地址为DS,BP间址间址默认段地址默认段地址SS。(3)凡是遇到给凡是遇到给S
17、S赋值指令,系统自动禁止外部中断,执行赋值指令,系统自动禁止外部中断,执行本条指令和下条指令,恢复对本条指令和下条指令,恢复对SS寄存器赋值前的中断开放情况。寄存器赋值前的中断开放情况。这样做为了允许程序员连续用两条指令分别对这样做为了允许程序员连续用两条指令分别对SS和和SP寄寄存器赋值,同时又防止堆栈空间变动过程出现中断。存器赋值,同时又防止堆栈空间变动过程出现中断。*在修改在修改SS和和SP的指令之间不要插入其他指令。的指令之间不要插入其他指令。(4)所有通用传送指令不影响标志位所有通用传送指令不影响标志位(除(除SAHF、POPF以外)。以外)。19 例:例:实现将实现将AREA1开始
18、的开始的100个数据传送到个数据传送到AREA2开始的单元。开始的单元。AREA1:AREA2:100个数据个数据20分析题意:分析题意:可以用可以用200条条MOV指令来完成指令来完成100个数据传送,个数据传送,指令操作重复,每个数据传送后的地址是变化的。指令操作重复,每个数据传送后的地址是变化的。可以利用循环,可以利用循环,但每循环一次要修改地址(源地址和目的地址),但每循环一次要修改地址(源地址和目的地址),必须把地址放在寄存器当中,用必须把地址放在寄存器当中,用寄存器间接寻址来寻找寄存器间接寻址来寻找操作数操作数.21得到如下程序:得到如下程序:MOV SI,OFFSET AREA1
19、 MOV DI,OFFSET AREA2 MOV CX,100AGAIN:MOV AL,SIMOV DI,AL INC SI ;修改地址指针;修改地址指针 INC DI;修改地址指针;修改地址指针 DEC CX;修改个数;修改个数 JNZ AGAIN22指出以下这些指令的对或错,并说明原因。指出以下这些指令的对或错,并说明原因。1 1、MOV 52MOV 52,AHAH2 2、MOV CSMOV CS,AHAH3 3、MOV DIMOV DI,SISI4 4、MOV 1000MOV 1000,SISI5 5、MOV IP,BXMOV IP,BX6 6、MOV DSMOV DS,1234H123
20、4H立即数不能作为目的操作数立即数不能作为目的操作数 CS不能作为目的操作数不能作为目的操作数 内存单元之间不能直接传送内存单元之间不能直接传送 内存单元之间不能直接传送内存单元之间不能直接传送 IP不能作为目的操作数不能作为目的操作数 不能用立即数对段寄存器赋值不能用立即数对段寄存器赋值232 PUSH (Push word onto stack)POP (Pop word off stack)这是两条堆栈操作指令。这是两条堆栈操作指令。(1)先回忆一下什么是堆栈,为什么需要堆栈先回忆一下什么是堆栈,为什么需要堆栈堆栈堆栈按照按照先进后出先进后出原则组织的一段内存区原则组织的一段内存区域域特
21、点:特点:下推式的(规定堆栈设置在堆栈段内)改变下推式的(规定堆栈设置在堆栈段内)改变SP的的内容,随着内容,随着推入堆栈内容增加,推入堆栈内容增加,SP的值减少。的值减少。后进先出工作原则(后进先出工作原则(Last In First Out 简称简称LIFO)24堆栈用途:堆栈用途:q 存放存放CPU寄存器或存储器中暂时不使用的数据,寄存器或存储器中暂时不使用的数据,使用数据时将其弹出;使用数据时将其弹出;q 调用子程序调用子程序,响应中断时都要用到堆栈。响应中断时都要用到堆栈。调用子程序(或过程)或发生中断时要调用子程序(或过程)或发生中断时要保护断保护断点的地址点的地址,子程序或中断返
22、回时恢复断点。子程序或中断返回时恢复断点。25调用子程序时需调用子程序时需保留内容保留内容:调用子程序:将下条指令地址即调用子程序:将下条指令地址即IP值保留下来值保留下来(8088中码段寄存器中码段寄存器CS和指令指针和指令指针IP),),才能才能保证子程序执行完后准确返回主程序继续执行。保证子程序执行完后准确返回主程序继续执行。执行子程序时执行子程序时,通常用到,通常用到内部寄存器内部寄存器,执行结果会,执行结果会影响标志位,必须在调用子程序之前将影响标志位,必须在调用子程序之前将现状保护起来现状保护起来 子程序嵌套或子程序递归(自调自)子程序嵌套或子程序递归(自调自)保留许多信息,而且保
23、证正确返回(且后进先出)。保留许多信息,而且保证正确返回(且后进先出)。后保留先取出原则后保留先取出原则(即(即LIFO-LAST In First out)。)。注意:注意:SP堆栈指针堆栈指针,始终指向栈顶。始终指向栈顶。SP初值用初值用MOV SP,i m来设定。来设定。26(2)堆栈操作指令堆栈操作指令 (堆栈操作指令有两条堆栈操作指令有两条):入栈指令入栈指令格式:格式:PUSH src;(SP)(SP)-2 (SP)+1,(SP)(src)把一个字从源操作数把一个字从源操作数由由SP指向堆栈顶部。指向堆栈顶部。操作如:操作如:PUSH AX 出栈指令出栈指令格式:格式:POP de
24、st;(dest)(SP)+1,(SP)(SP)(SP)+2把现行把现行SP所指向堆栈顶部的一个字所指向堆栈顶部的一个字 指定的目的指定的目的操作数,同时进行修改堆栈指针的操作。操作数,同时进行修改堆栈指针的操作。操作如:操作如:POP BX27应用时注意:应用时注意:堆栈操作都按字操作。堆栈操作都按字操作。PUSH,POP 指令的操作数可能有三种:指令的操作数可能有三种:寄存器(通用寄存器,地址指针,变址寄存器)寄存器(通用寄存器,地址指针,变址寄存器),段寄存器段寄存器(CS除外,除外,PUSH CS 合法,合法,POP CS 非法)非法)存储器存储器,操作数必须是操作数必须是16位的,且
25、不能是立即数。位的,且不能是立即数。执行执行PUSH 指令指令,(SP)-2 (SP),低字节放在低地址,高字节放在高地址。低字节放在低地址,高字节放在高地址。PUSH,POP指令应该成对使用,保持堆栈原有状指令应该成对使用,保持堆栈原有状态。态。堆栈最大容量即为堆栈最大容量即为SP的初值与的初值与SS之间的差。之间的差。28堆栈应用举例:堆栈应用举例:例:例:用用BP的基址指令的基址指令 代替代替POP指令指令MOV BP,SPPUSH AXPUSH BXPUSH CXMOV CX,BP-6 MOV BX,BP-4MOV AX,BP-2ADD SP,6例例 :压入堆栈的内容压入堆栈的内容与弹
26、出内容顺序相反与弹出内容顺序相反PUSH AXPUSH BXPUSH CXPOP CXPOP BX POP AX293、交换指令(、交换指令(Exchange)格式:格式:XCHG dest,src;(dest)(src)执行操作:执行操作:把一个字节或一个字的源操作数与目的操作数相交换。把一个字节或一个字的源操作数与目的操作数相交换。可以可以 实现:实现:寄存器之间寄存器之间 寄存器和存储器之间寄存器和存储器之间注意:注意:存储器之间不能交换,存储器之间不能交换,两个操作数中必须有一个在寄两个操作数中必须有一个在寄存器中;存器中;段寄存器不能作为一个操作数;段寄存器不能作为一个操作数;允许字
27、或字节操作,不影响标志位。允许字或字节操作,不影响标志位。30应用举例:应用举例:XCHG BL,DLXCHG AX,SIXCHG COUNTDI,AXXCHG BX,DI(错)错)XCHG DS,AX (错)错)314.XLAT(Trans late)换码指令:)换码指令:该指令不影响标志位。该指令不影响标志位。格式:格式:XLAT str_table;(;(AL)(BX)+(AL)或或 XLAT str_table表格符号地址(首地址),表格符号地址(首地址),只是为了提高可读性而设置,汇编时仍用只是为了提高可读性而设置,汇编时仍用BX。32XLAT指令使用方法指令使用方法:先建立一个字节
28、表格;先建立一个字节表格;表格首偏移地址存入表格首偏移地址存入BX;需要转换需要转换代码的序号代码的序号(相对与表格首地址位移量)(相对与表格首地址位移量)存入存入AL;(表中第一个元素的序号为(表中第一个元素的序号为0)执行执行XLAT指令后,表中指定序号的元素存于指令后,表中指定序号的元素存于AL中中。(AL)为转换的代码。为转换的代码。由于由于AL只有只有8位位,所以表的长度不能超过所以表的长度不能超过256字节字节.33XLAT指令应用:指令应用:若把字符的若把字符的扫描码扫描码转换成转换成ASCII码码;或或数字数字09转换成转换成7段数码所需要的相应代码(段数码所需要的相应代码(字
29、字形码形码)等就要用)等就要用XLAT指令。指令。例:内存的数据段中有一张十六进制数字的例:内存的数据段中有一张十六进制数字的ASCII码码表。表。首地址为:首地址为:Hex_table,欲查出表中第欲查出表中第10个元素个元素(A)34执行指令序列执行指令序列:MOV BXMOV BX,OFFSET Hex_tableOFFSET Hex_tableMOV ALMOV AL,0AH0AHXLAT Hex_tableXLAT Hex_table假设:假设:(DSDS)=F000H=F000H,Hex_table=0040HHex_table=0040H(ALAL)=0AH=0AH执行执行XLA
30、TXLAT以后:以后:(ALAL)=41H=41H=(F004AHF004AH),),即即“A”A”的的ASCIIASCII码。码。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+0FHFFBBAA9911220016进制数的进制数的ASCII码表码表35(二)输入输出指令(二)输入
31、输出指令(Input and Output)Input and Output)输入输出指令共两条:输入输出指令共两条:1 1、ININ (Input byte or word)(Input byte or word)2 2、OUTOUT(Output byte or word)(Output byte or word)输入指令输入指令用于用于CPUCPU从外设端口接受数据从外设端口接受数据,输出指令输出指令用于用于CPUCPU向外设端口发送数据。向外设端口发送数据。无论接受还是发送数据,必须通过累加器无论接受还是发送数据,必须通过累加器AX(AX(字)或字)或AL(AL(字节),字节),又称累
32、加器专用传送指令又称累加器专用传送指令 。输入、输出指令不影响标志位。输入、输出指令不影响标志位。36每个外设要占几个端口:数据口,状态口和控制每个外设要占几个端口:数据口,状态口和控制口。口。CPUCPUI/OI/O设备设备译译码码数据端口数据端口DBDBABABCBCBI/O接口I/O接口状态端口状态端口控制端口控制端口37信息交换要通过端口,信息交换要通过端口,在在IBMPCIBMPC机里,可以配接许多外部设备,机里,可以配接许多外部设备,每个外设与每个外设与CPUCPU之间交换数据,状态信息和控制命令,之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。每一种信息交
33、换都要通过一个端口来进行。端口数:外部设备最多有端口数:外部设备最多有6553665536个个I/OI/O端口。端口。A A0 0-A-A1515译码形成。译码形成。端口号:端口号(即外设端口地址)为端口号:端口号(即外设端口地址)为0000H-FFFFH0000H-FFFFH。PCPC机仅使用机仅使用A A0 0-A-A9 9译码形成译码形成I/OI/O口地址,即口地址,即1024H1024H个口地址个口地址 端口号:端口号:0000H-03FFH0000H-03FFH其中:其中:A A9 9=1=1,表示扩充槽上的,表示扩充槽上的口地址。口地址。38长格式:长格式:端口号中前端口号中前25
34、6256个端口(个端口(0-FFH0-FFH),可以直接写在,可以直接写在指令中,这就是长格式指令中,这就是长格式(直接寻址直接寻址)。端口号代替指令中的端口号代替指令中的PORTPORT,机器指令用二字节表示,第二字节就是端口号。机器指令用二字节表示,第二字节就是端口号。短格式:短格式:当端口号当端口号256256时,只能使用短格式时,只能使用短格式,必须先把端口号放到必须先把端口号放到DXDX寄存器中寄存器中(间接寻址间接寻址)。不需要用任何段寄存器来修改它的值。不需要用任何段寄存器来修改它的值。391 1、IN (Input byte or word)IN (Input byte or
35、word)输入指令输入指令格式:格式: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,DX IN AL,DX ;端口地址;端口地址1616位,输入一个字节位,输入一个字节IN AX,DX IN AX,DX ;端口地址;端口地址1616位,输入一个字位,输入一个字 必须通过累加器必须通过累加器AX(A
36、X(字)或字)或AL(AL(节)节)输入输入数据。数据。402 2、OUT(Output byte or word)OUT(Output byte or word)输出指令输出指令格式:格式: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 ;端口地址;端口地址
37、1616位,输出一个字节位,输出一个字节 OUT DX,AX OUT DX,AX ;端口地址;端口地址1616位,输出一个字位,输出一个字 必须通过累加器必须通过累加器AX(AX(字)或字)或AL(AL(节)节)输出输出数据。数据。41例例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)42(三)目的
38、地址传送指令(三)目的地址传送指令(Address-object Address-object transfer)transfer)8086/8088 8086/8088 提供三条提供三条:地址指针写入指定寄存器或寄存器对指令。地址指针写入指定寄存器或寄存器对指令。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
39、ES)431 1、LEA(Load Effective Address)LEA(Load Effective Address)格式:格式:LEA reg16,mem16 ;EALEA reg16,mem16 ;EA(reg16)(reg16)功能:加载有效地址,用于写进地址指针。功能:加载有效地址,用于写进地址指针。把指令指定把指令指定存储器操作数有效地址存储器操作数有效地址装入指定的寄存器装入指定的寄存器例:设(例:设(BXBX)=0400H=0400H,(,(SISI)=003CH=003CHLEA BXLEA BX,BX+SI+0F62HBX+SI+0F62H执行指令后执行指令后:EA=
40、EA=(BXBX)+(SISI)=0F62H=0400H+003CH+0F62H=139EH=0F62H=0400H+003CH+0F62H=139EH(BXBX)=139EH=139EH44注意:设注意:设(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)=1000H40H40H00H0
41、0H.3000H:1000H3000H:1000H(DS)(DS)BUFFERBUFFER31001H31001H.存储器存储器45(2 2)LEA LEA 指令中的目标寄存器必须是指令中的目标寄存器必须是1616位的通用位的通用寄存器寄存器,源操作数必须是一个存储器源操作数必须是一个存储器。(3 3)请思考下列指令的正、误)请思考下列指令的正、误LEA DX,BETABXSILEA DX,BETABXSILEA DX,AXLEA DX,AX462 2、LDS(Load pointer using DS)LDS(Load pointer using DS)格式:格式:LDS reg16,mem
42、32 LDS reg16,mem32 ;(;(reg16reg16)(EAEA)(DSDS)(EAEA)+2+2)功能:功能:将指令指定将指令指定3232位地址指针送指令指定寄存器位地址指针送指令指定寄存器和和DSDS。将指令指定将指令指定mem32mem32单元的前两个单元内容单元的前两个单元内容(16(16位偏移位偏移量量)装入指定通用寄存器,把后两个单元内容装入指定通用寄存器,把后两个单元内容(段地段地址址)装入到装入到DSDS段寄存器。段寄存器。用于写远地址指针。用于写远地址指针。47例例:假设:假设:(DS)=C 000H指令指令:LDS SI,0010H执行指令后执行指令后:(SI
43、)=0180H(DS)=2000H 80H80H01H01H00H00H20H20HC000H:0010HC000H:0010H(DS)(DS)C0011HC0011HC0012HC0012HC0013HC0013H.存储器存储器483 3、LES(Load pointer using ES)LES(Load pointer using ES)格式:格式:LES reg16,mem32 LES reg16,mem32 ;(;(reg16reg16)(EAEA)(ESES)(EAEA)+2+2)功能:功能:把源操作数指定的把源操作数指定的4 4个相继字节送指令指定个相继字节送指令指定的寄存器及的
44、寄存器及ESES寄存器中。寄存器中。此指令常常指定此指令常常指定DIDI寄存器。寄存器。将指令指定将指令指定mem32mem32单元的前两个单元内容单元的前两个单元内容(16(16位偏移位偏移量量)装入指定通用寄存器,把后两个单元内容装入指定通用寄存器,把后两个单元内容(段地段地址址)装入到装入到ESES段寄存器。段寄存器。用于写远地址指针。用于写远地址指针。49例例:假设:假设:(DS)=B 000H(DS)=B 000H(BX)=080AH(BX)=080AH指令指令:LES DI,BXLES DI,BX执行指令后执行指令后:(DI)=05A2H(DI)=05A2H (ES)=4000H(
45、ES)=4000HA2HA2H05H05H00H00H40H40HB000H:080AHB000H:080AH(DS)(DS)B080BHB080BHB080CHB080CHB080DHB080DH.存储器存储器(BX)(BX)50综合举例:综合举例:设:设:(DS)=5000H TABLE=1000H分析下列指令执行结果:分析下列指令执行结果:MOV BX,TABLE ;MOV BX,OFFSET TABLE ;LEA BX,TABLE ;LES BX,TABLE ;LDS BX,TABLE ;40H40H00H00H00H00H5000H:1000H5000H:1000H(DS)(DS)T
46、ABLETABLE51001H51001H.存储器存储器30H30H.51002H51002H51003H51003H(BXBX)=0040H=0040H(BXBX)=1000H=1000H(BXBX)=1000H=1000H(BXBX)=0040H=0040H,(,(ESES)=3000H=3000H(BXBX)=0040H=0040H,(,(DSDS)=3000H=3000H51(四)标志传送指令(四)标志传送指令(Flag register transferFlag register transfer)采用了隐含寄存器(采用了隐含寄存器(AHAH、Flags)Flags)操作数方式。操作
47、数方式。80888088有四条标志传送操作指令:有四条标志传送操作指令:1 1LAHFLAHF(Load AH into flagsLoad AH into flags)2 2SAHFSAHF(Store AH into flagsStore AH into flags)3 3PUSHFPUSHF(Push flags onto stackPush flags onto stack)4 4POPFPOPF(Pop flags off stackPop flags off stack)521 1LAHFLAHF(Load AH into flagsLoad AH into flags)格式:格式
48、:LAHF LAHF ;(;(AHAH)(FLAGFLAG的低字节)的低字节)功能:功能:标志寄存器低八位标志寄存器低八位 (AHAH)。SFSFZFZFAFAFPFPFCFCF0 01 12 23 34 45 56 67 7TFTFIFIFDFDFOFOF8 89 91010111112121313141415150 01 12 23 34 45 56 67 7FLAGSFLAGSAHAHLAHF指令操作图示意指令操作图示意532 2SAHFSAHF(Store AH into flagsStore AH into flags)格式:格式:SAHF SAHF ;(;(FLAGFLAG的低字节
49、)的低字节)(AHAH)功能:(功能:(AHAH)送标志寄存器低八位。)送标志寄存器低八位。3 3PUSHFPUSHF(Push flags onto stackPush flags onto stack)格式:格式:PUSHFPUSHF;(;(SPSP)(SPSP)-2-2 (SPSP)+1+1,(,(SPSP)(FLAGFLAG)功能功能 :标志进栈。标志进栈。4 4POPFPOPF(Pop flags off stackPop flags off stack)格式:格式:POPFPOPF;(;(FLAGFLAG)(SPSP)+1+1,(,(SPSP)(SPSP)(SPSP)+2 +2 功能功能 :标志出栈。:标志出栈。54注意:注意:(1 1)标志位的影响标志位的影响LAHFLAHF、PUSHFPUSHF不影响标志位不影响标志位,SAHFSAHF、POPFPOPF由装入的值确定标志位的值,影响标志位。由装入的值确定标志位的值,影响标志位。(2 2)PUSHFPUSHF、POPFPOPF用于保护调用过程前(用于保护调用过程前(FLAG),FLAG),过程过程返回后恢复。返回后恢复。例:例:PUSHPUSHAXAXPUSH CXPUSH CXPUSHFPUSHFCALL TRANSCALL TRANSPOPFPOP CXPOP AX