第 指令系统学习.pptx
4.1 指令的基本概念和指令格式 机器指令:指挥计算机完成某种操作的命令。从计算机组成的层次结构来说,计算机指令有机器指令、伪指令和宏指令之分。指令格式如下:操作符OPD,OPSOPD:目的操作数OPS:源操作数第1页/共133页4.2 指令寻址方式4.2.1 寻址方式的基本概念4.2.2 与数据有关的寻址方式4.2.3 I/O端口寻址方式返回本章首页返回本章首页第2页/共133页4.2.1 寻址、寻址方式的概念 指令中操作数字段实质上是指出操作数存放于何处。一般来说,操作数可以跟随在指令操作码之后,称为立即数;操作数也可以存放在CPU内部的寄存器中,称为寄存器操作数。绝大多数的操作数存放在内存储器中,称为存储器操作数。指令指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找到需要的操作数。这种寻找操作数的过程称为寻址,而寻找操作数的方法称为寻址方式。第3页/共133页4.2.2 与数据有关的寻址方式 1.立即寻址 立即寻址方式中,指令操作码和操作数都在存储器代码段中。汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数)功能:操作数存放在存储器,指令下一单元的内容为立即操作数n。图形表示如右:第4页/共133页【例4.14.1】【例2.5】MOV AX,10执行后(AX)=?该例中源操作数为立即寻址方式,立即数为10,存放在指令的下一单元。图形表示:执行:10AX执行后:(AX)=000AH 返回本节第5页/共133页2.寄存器寻址寄存器寻址寄存器寻址方式的操作数在指令指明的寄存器中。汇编格式:R 其中R表示寄存器名。功能:操作数直接存放在寄存器R中。图形表示:R 指令操作数第6页/共133页【例4.24.2】下列程序执行后,(AX)=?,(BX)=?MOV AX,1234H MOV BX,5678H ADD AX,BX该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。第7页/共133页图形表示:执行:1234HAX5678HBX(AX)+(BX)AX执行后:(AX)=68ACH,(BX)=5678H返回本节第8页/共133页3.存储器寻址如果操作码所需操作数存放在内存储器中,则指令中需要给出操作数的地址信息。为了提高程序的灵活性,8086指令系统提供了多种存储器寻址方式(1)直接寻址(2)寄存器间接寻址(3)寄存器相对寻址(4)基址变址寻址(5)关于段跨跃前缀第9页/共133页(1)直接寻址直接寻址汇编格式:含有变量的地址表达式。段寄存器名:EA。功能:指令下一字单元的内容是操作数的偏移地址EA。图形表示:第10页/共133页【例4.34.3】【例4.3】寄存器和存储器内容为:(AX)=1212H,BUF为数据段定义的变量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。执行指令:MOVAX,BUF执行后:(AX)=?图形表示:执行:(32000H)AX执行后:(AX)=4545H返回本节第11页/共133页(2)寄存器间接寻址寄存器间接寻址 寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址EA,操作数在存储器中。汇编格式:R 功能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。第12页/共133页寄存器间接寻址示意图:例如:MOV AX,BX若(DS)2000H,(BX)1000H,物 理 地 址 20000H 1000H 21000H。指 令 执 行 前,(AX)2030H,(21000H)0A0H,(21001H)50H,指令执 行 后,(AX)50A0H,(21000H)0A0H,(21001H)50H。指令执行情况如下:第13页/共133页偏移地址偏移地址EA计算方法如下:计算方法如下:EA=SISI作间址寄存器。DIDI作间址寄存器。BX BX作间址寄存器。BP BP作间址寄存器。第14页/共133页执行指令:MOV AX,BP 执行后:(AX)=?,(BP)=?,(SS)=?,(20030H)=?图形表示如下:【例【例4.44.4】寄存器和存储器内容分别为:】寄存器和存储器内容分别为:(AXAX)=0=0,(,(BPBP)=0030H=0030H,(,(SSSS)=2000H=2000H,(,(20030H20030H)=1234H=1234H返回本节第15页/共133页(3)寄存器相对寻址寄存器相对寻址 寄存器相对寻址方式是在指令中给定一个基址寄存器(或变址寄存器)名和一个8位或16位的相对偏移量,两者之和作为操作数的有效地址。对BX、SI、DI这三个间址寄存器,指示的是数据段中的数据,而用BP作间址寄存器,则指示的是堆栈段中的数据。汇编格式:XR(X表示位移量,是8位或16位二进制补码表示的有符号数)。功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。第16页/共133页偏移地址EA计算方法如下:第17页/共133页【例4.54.5】设执行前:(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H 执行指令:ADD 6BX,AX执行后:(AX)=?,(BX)=?,(DS)=?,(20036H)=?图形表示如下:第18页/共133页执行:(执行:(20036H)+(AX)20036H执行后:(执行后:(AX)=0040H,(,(BX)=0030H,(DS)=2000H,(,(20036H)=0090H。返回本节第19页/共133页(4)基址变址寻址基址变址寻址 基址变址寻址方式是在指令中给出一个基址寄存器名和一个变址寄存器名,两者内容之和作为操作数的有效地址。基址寄存器为BX或BP,变址寄存器为SI或DI,但指令中不能同时出现两个基址寄存器或两个变址寄存器。如果基址寄存器为BX,则段寄存器使用DS;如果基址寄存器用BP,则段寄存器用SS。汇编格式:BR+IR 功能:操作数存放在存储器,BR的内容加IR的内容加位移量X是操作数的偏移地址EA。第20页/共133页操作数偏移地址EA计算方法如下返回本节第21页/共133页【例4.64.6】例 如 MOV AL,BX SI(MOV AL,BXSI)若指令执行前,(DS)1000H,(BX)0010H,(SI)0002H,(10012H)45H则 EA(BX)(SI)0012H,PA(DS)10HEA10012H指令执行后(AL)45H。返回本节第22页/共133页(5)跨段问题跨段问题 按前述规定:若选用BP作间址基址寄存器、变址寄存器或基址寄存器,则操作数在堆栈段,操作数的物理地址PA由堆栈段寄存器SS的内容左移4位与偏移地址EA相加后形成;否则,操作数在数据段,操作数的物理地址PA由数据段寄存器DS的内容左移4位与偏移EA相加后形成。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。汇编格式:段寄存器名:操作数地址。功能:段寄存器名指明操作数属哪个段。第23页/共133页【例4.74.7】跨段前缀示例。MOVAX,DS:BP MOVCX,SS:SI 该例中,DS:,SS:均为跨段前缀,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。上述2条指令的源操作数物理地址分别为:PA1 =(DS)左移4位+BPPA2 =(SS)左移4位+SI返回本节第24页/共133页4.2.3 I/O端口寻址方式 8086CPU采用独立编址的I/O端口,可以最多访问64K个字节端口或32K个字端口,用专门的IN指令和OUT指令访问。I/O端口寻址只用于这两种指令中。寻址方式有如下两种。1.直接端口寻址在指令中直接给出端口地址,端口地址一般采用2位十六进制数,也可以用符号表示,这种寻址方式为直接端口寻址。因此,直接端口寻址可访问的端口数为0255个。例如:IN AL,25H2.寄存器间接端口寻址如果访问的端口地址值大于255,则必须用I/O端口的间接寻址方式。所谓间接寻址,是指把I/O端口的地址先送到DX中,用DX作间接寻址寄存器,而且只能用DX寄存器。例如:MOV DX,378H OUT DX,AL第25页/共133页4.3 80864.3 8086指令系统 包括数据传送类指令、算术运算类指令、位操作类指令、串操作类指令、控制转移类指令、处理机控制类指令。后几节将分别介绍这些指令的语句格式和功能。4.3.1 数据传送类指令 4.3.2 算术运算类指令 4.3.3 逻辑运算与移位类指令 4.3.4 串操作类指令 4.3.5 控制转移类指令 第26页/共133页4.3.1 数据传送类指令1 通用数据传送指令2 累加器专用传送指令3 地址传送指令4 标志寄存器传送指令返回本章首页返回本章首页第27页/共133页1 1 通用数据传送指令(1)传送指令MOV(2)堆栈指令PUSHPOP(3)数据交换指令XCHG第28页/共133页(1)传送指令MOV语句格式:MOV OPD,OPS功 能:将 源 操 作 数 传 送 入 目 的 地 址,源 地 址 内 容 不 变。即(OPS)OPD。下图4.1描述了MOV指令在传送数据时允许传送的路径及类型。第29页/共133页图图4.1 MOV指令所允许的数据传送路径及类型指令所允许的数据传送路径及类型第30页/共133页MOV指令的形式有如下几种:1)从通用寄存器到通用寄存器 MOV reg1,reg22)立即数传送到通用寄存器 MOV reg,data 3)通用寄存器和存储单元之间 MOV mem(reg),reg(mem)4)立即数传送到存储单元MOV mem,data5)段寄存器与通用寄存器间的数据传送 MOV seg,reg 或 MOV reg,seg 6)段寄存器与存储单元间的数据传送MOV seg,mem 或 MOV mem,seg 第31页/共133页【例4.84.8】存储器与寄存器间数据传送。MOV AX,BUF ;BUF是变量,源操作数为直接寻址MOV BH,DI ;源操作数为寄存器间接寻址MOV DI,ES:3SI ;源操作数为变址寻址,使用跨段前缀MOV BP,3BX+SI;源操作数为基址加变址寻址MOV BUFA,DL;BUFA是一字节变量MOV BP,AX;使用SS段寄存器MOV DS:BP,DL;使用跨段前缀MOV BUF,DS;BUF是个字变量MOV ES,BUF第32页/共133页2 2数据交换指令XCHGXCHG语句格式:XCHG OPD,OPS功 能:将 源 地 址 与 目 的 地 址 中 的 内 容 互 换。即(OPD)OPS,(OPS)OPD。【例4.9】寄存器与存储器之间数据交换。MOV AX,5678H;(AX)=5678HMOV BX,0FFFFH;(BX)=0FFFFHXCHGAX,BX;(AX)=0FFFFH,(BX)=5678H第33页/共133页(2 2)堆栈操作指令1)进栈指令PUSH2)出栈指令POP第34页/共133页1 1)进栈指令PUSHPUSH语句格式:PUSH OPS功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。即:(SP)SP(OPS)158SP(SP)SP(OPS)70SP第35页/共133页2 2)出栈指令POPPOP语句格式:POP OPD功能:将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。从POP指令功能可看出,该指令为PUSH指令的逆过程。即:(SP)(OPD)70(SP)+SP (SP)(OPD)158(SP)+SP返回本节第36页/共133页2.2.累加器专用传送指令(1)输入/输出指令(2)XLAT查表指令 第37页/共133页1 1)输入指令ININ输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式:语句格式:INAL,PORT 功能:(PORT)AL语句格式:INAX,PORT 功能:(PORT)AX语句格式:INAL,DX 功能:(DX)AL语句格式:INAX,DX 功能:(DX)AL第38页/共133页2 2)输出指令OUTOUT输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式:语句格式:OUTPORT,AL 功能:(AL)PORT语句格式:OUTPORT,AX 功能:(AX)PORT语句格式:OUTDX,AL 功能:(AL)DX语句格式:OUTDX,AX 功能:(AX)DX返回本节第39页/共133页(2 2)查表转换指令 XLATXLAT语句格式:XLAT OPS或XLAT功能:将(BX)为首址(AL)为位移量的字节存储单元中的数据送AL寄存器。即(BX+AL)AL。返回本节第40页/共133页3 3 地址传送指令(1)传送有效地址指令 LEA(2)传送有效地址及数据段首址指令LDS(3)传送有效地址及附加数据段指令LES第41页/共133页(1 1)传送有效地址指令 LEALEA语句格式:LEA OPD,OPS功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。【例4.10】主存偏移地址的获取。MOV BX,0100H;(BX)=0100HMOV SI,0210H;(SI)=0210HLEA BX,1234BX+SI;(BX)=1544H第42页/共133页(2 2)传送有效地址及数据段首址指令LDSLDS语句格式:LDS OPD,OPS功能:将主存中指定字单元数据送入指定存储器,下一字单元数据送DS寄存器。第43页/共133页(3 3)传送有效地址及附加数据段指令LESLES语句格式:LES OPD,OPS功 能:将 主 存 某 字 单 元 内 容 送 指 定 寄 存 器。即(OPS)OPD,(OPS+2)ES。返回本节第44页/共133页4 4 标志寄存器传送指令(1)标志送AH指令LAHF(2)AH送标志指令SAHF(3)标志寄存器进栈指令PUSHF(4)标志寄存器出栈指令POPF第45页/共133页(1 1)标志送AHAH指令LAHFLAHF语句格式:LAHF功能:将标志寄存器的低8位送入AH寄存器。即(FLAGS)7-0AH。该指令的执行对标志位无影响。【例4.11】标志寄存器传送。执行前:(FLAGS)=0485H,(AX)=0FFFFH执行指令:LAHF第46页/共133页(2 2)AHAH送标志指令SAHFSAHF语句格式:SAHF功 能:将 AH的 内 容 送 入 标 志 寄 存 器 的 低 8位,高 8位 不 变。即(AH)FLAGS7-0.。从该指令功能可看出,SAHF为LAHF的逆过程。第47页/共133页(3 3)标志寄存器进栈指令PUSHFPUSHF语句格式:PUSHF功 能:将 标 志 寄 存 器 的 内 容 压 入 堆 栈。即(FLAGS)(SP)。第48页/共133页(4 4)标志寄存器出栈指令POPFPOPF功能:将栈顶内容弹出送入标志寄存器中。即(SP)FLAGS。POPF指令与PUSHF指令互为逆过程。【例4.12】将标志寄存器的单步标志TF置位。PUSHF;(FLSGS)(SP)POP AX;(SP)AXOR AX,0100H;设置D8=TF=1PUSH AX;(AX)(SP)POPF;(SP)FLAGS,即(AX)FLAGS返回本节第49页/共133页4.3.2 算术运算类指令1 加法类指令2 减运算指令3 乘运算指令4 除运算指令5 BCD码调整指令返回本章首页返回本章首页第50页/共133页1 加法指令加法指令(1)不带进位加法指令ADD(2)带进位加指令ADC(3)加1指令INC第51页/共133页(1)不带进位加指令ADD语句格式:ADD OPD,OPS功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。即(OPD)+(OPS)OPD。第52页/共133页(2)带进位加法指令ADC语句格式:ADC OPD,OPS功能:将目的操作数加源操作数再加低位进位,结果送目的地址。即(OPD)+(OPS)+CF OPD。【例4.13】无符号双字加法运算。MOVAX,4652H;(AX)=4652HADDAX,0F0F0H;(AX)=3742H,CF=1MOVDX,0234H;(DX)=0234HADCDX,0F0F0H;(DX)=0F325H,CF=0返回本节第53页/共133页(3)加1指令 INC语句格式:INC OPD功能:将目的操作数加1,结果送目的地址。即(OPD)+1OPD。INC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:INC BX,即(BX)+1BX。加1指令可用于对计数器和地址指针进行调整。第54页/共133页2 减运算指令减运算指令(1)不带借位减法指令SUB(2)带借位减指令 SBB(3)减1指令DEC(4)求补指令NEG(5)比较指令 CMP第55页/共133页(1)不带借位减法指令SUB语句格式:SUB OPD,OPS功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。即(OPD)(OPS)OPD【例4.14】减法运算。MOVAX,5678H;(AX)=5678HSUBAX,1234H;(AX)=4444HMOVBX,3354H;(BX)=3354HSUBBX,3340H;(BX)=0014H第56页/共133页(2)带借位减指令 SBB语句格式:SBB OPD,OPS功能:目的操作数减源操作数再减低位借位CF,结果送目的地址。即(OPD)(OPS)CF OPD第57页/共133页(3)减1指令DEC语句格式:DEC OPD 功能:将目的操作数减1,结果送目的地址。即(OPD)1OPD。DEC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:DEC CX。即(CX)1CX。减1指令DEC也一般用于对计数器和地址指针的调整。第58页/共133页(4)求补指令NEG语句格式:NEG OPD功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。即(OPD)+1OPD。【例4.15】求补运算。MOVAX,0FF64HNEGAL;(AX)=0FF9CHSUBAL,9DH;(AX)=0FFFFHNEGAX;(AX)=0001HDECAL;(AX)=0000HNEGAX;(AX)=0000H第59页/共133页(5)比较指令 CMP语句格式:CMP OPD,OPS功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。即(OPD)(OPS)。【例4.16】比较AL的内容数值大小。CMPAL,50;(AL)50JBBELOW;(AL)=50,(AL)50ALINCAH;(AH)+1AHBELOW:返回本节第60页/共133页3 乘法运算指令乘法运算指令(1)无符号数乘法指令MUL(2)有符号乘指令IMUL第61页/共133页(1 1)无符号数乘法指令MULMUL语句格式:MUL OPS功能:若是字节数据相乘,(AL)与OPS相乘得到字数据存入AX中;若是字数据相乘,则(AX)与OPS相乘得到双字数据,高字存入DX、低字存入AX中。即字节乘法:(AL)*(OPS)AX,字乘法:(AX)*(OPS)DX,AX【例2.25】无符号数0A3H与11H相乘。MOVAL,0A3H;(AL)=0A3HMOVBL,11H;(BL)=11HMULBL ;(AX)=0AD3H第62页/共133页(2 2)有符号乘指令IMULIMUL语句格式:IMUL OPS功 能:字 节 乘 法:(AL)*(OPS)AX,字 乘 法:(AX)*(OPS)DX、AX。IMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。【例4.17】有符号数0B4H与11H相乘。MOVAL,0B4H;(AL)=B4HMOVBL,11H;(BL)=11HIMUL BL ;(AX)=0FAF4H返回本节第63页/共133页4 除运算指令除运算指令(1)无符号除指令DIV(2)有符号除指令IDIV(3)符号扩展指令第64页/共133页(1)无符号除指令DIV语句格式:DIV OPS功能:字节除法(AX)/(OPS)AL(商)、AH(余数)字除法(DX、AX)/(OPS)AX(商)、DX(余数)【例4.18】写出实现无符号数0400H/0B4H运算的程序段。MOVAX,0400H;(AX)=0400HMOVBL,0B4H;(BL)=0B4HDIVBL ;商(AL)=05H,余数(AH)=7CH 第65页/共133页(2)有符号除指令IDIV语句格式:IDIV OPS功能:字节除法:(AX)/(OPS)AL(商)、AH(余数)字除法:(DX,AX)/(OPS)AX (商)、DX(余数)除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。【例4.19】写出实现有符号数0400H/0B4H运算的程序段。MOVAX,0400H;(AX)=0400HMOVBX,0B4H;(BX)=0B4HIDIV BX ;(AL)=0F3H,(AH)=24H返回本节第66页/共133页(3)符号扩展指令符号扩展指令 1)字节转换成字指令CBW2)将字转换成双字指令CWD第67页/共133页1)字节转换成字指令CBW语句格式:CBW功能:将AL中的符号位数据扩展至AH。【例4.20】将字节数据扩展成字数据。MOVAL,0A5H;(AL)=0A5HCBW ;(AX)=0FFA5HADDAL,70H;(AL)=25HCBW ;(AX)=0025H第68页/共133页2)将字转换成双字指令CWD语句格式:CWD功能:将AX中的符号位数据扩展至DX。【例4.21】将字数据扩展成双字数据。MOVDX,0;(DX)=0MOVAX,0FFABH;(AX)=0FFABHCWD;(DX)=0FFFFH (AX)=0FFABH返回本节第69页/共133页5 十进制调整指令十进制调整指令(1)加法的十进制调整指令DAA(2)减法的十进制调整指令DAS(3)加法的非压缩BCD码调整指令AAA(4)减法的非压缩BCD码调整指令AAS第70页/共133页(1 1)加法的十进制调整指令DAA DAA 语句格式:DAA功能:如果AL寄存器中低4位大于9或辅助进位(AF)=1,则(AL)=(AL)+6且(AF)=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)+60H且(CF)=1。同时,SF、ZF、PF均有影响。【例2.31】压缩BCD码的加法运算。MOV AL,68H;(AL)=68H,表示压缩BCD码68MOV BL,28H;(BL)=28H,表示压缩BCD码28ADD AL,BL;二进制加法:(AL)=68H+28H=90HDAA ;十进制调整:(AL)=96H ;实现压缩BCD码加法:68+28=96第71页/共133页(2 2)减法的十进制调整指令DASDAS语句格式:DAS功 能:如 果(AF)=1或 AL寄 存 器 中 低 4位 大 于 9,则(AL)=(AL)6且(AF)=1;如 果(AL)=0A0H或(CF)=1,则(AL)=(AL)60H且(CF)=1。同时SF、ZF、PF均受影响。【例4.20】压缩BCD码的减法运算。MOVAL,68H ;(AL)=68H,表示压缩BCD码68MOVBL,28H ;(BL)=28H,表示压缩BCD码28SUBAL,BL ;二进制减法:(AL)=68H28H=40HDAS ;十进制调整:(AL)=40H ;实现压缩BCD码减法:6828=40第72页/共133页(3)加法的非压缩BCD码调整指令AAA语句格式:AAA 功能:如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)+6(AH)=(AH)+1(AF)=(CF)=1 且AL高4位清零。否则:(CF)=(AF)=0AL高4位清零。第73页/共133页(4)减法的非压缩BCD码调整指令AAS语句格式:AAS 功能:如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)6(AH)=(AH)1(AF)=(CF)=1AL高4位清零。否则:(CF)=(AF)=0 AL高4位清零。其他标志位OF、PF、SF、ZF不确定。第74页/共133页4.3.3 逻辑运算与移位指令1 逻辑运算指令2移位指令 3 循环移位指令返回本章首页返回本章首页第75页/共133页1 逻辑运算指令逻辑运算指令(1)求反指令NOT(2)逻辑乘指令AND(3)测试指令TEST(4)逻辑加指令OR(5)按位加指令XOR第76页/共133页(1)求反指令NOT语句格式:NOT OPD功能:将目的地址中的内容逐位取反后送入目的地址。即(OPD)OPD 【例4.21】逻辑非运算。MOV AX,878AH;(AX)=878AHNOT AX,;(AX)=7875H第77页/共133页(2)逻辑乘指令AND语句格式:AND OPD,OPS功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。即(OPD)(OPS)OPD。该指令用于清除目的操作数中与源操作数置0的对应位。说明:逻辑乘的运算法则为:11=1,10=0,01=0,00=0【例4.22】将AL中第3位和第7位清零。MOV AL,0FFH AND AL,77H 第78页/共133页(3)测试指令TEST语句格式:TEST OPD,OPS功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。即(OPD)(OPS)。【例4.23】测试AX中的第12位是否为0,不为0则转L。TESTAX,1000HJNEL 第79页/共133页(4)逻辑加指令OR语句格式:OR OPD,OPS功能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。即(OPD)(OPS)OPD。说明:逻辑加的运算法则为:11=1,10=1,01=1,00=0。【例4.24】将AL寄存器中第3位和第7位置1。MOVAL,0 OR AL,88H 第80页/共133页(5)按位加指令XOR语句格式:XOR OPD,OPS功能:目的操作数与源操作数做按位加运算,结果送入目的地址。即(OPD)(OPS)OPD。说明:按位加的运算法则为;11=0,10=1,01=1,00=0。【例4.25】按位加运算。MOVAL,45H;(AL)=45HXORAL,31H;(AL)=74H返回本节第81页/共133页2 2 移位指令 移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:标号:操作符OPD,1或 标号:操作符OPD,CL 其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。第82页/共133页(1)算术左移和逻辑左移指令SAL(SHL)语句格式:SAL OPD,1 或SHL OPD,1 SAL OPD,CL或SHL OPD,CL功能:将(OPD)向左移动CL指定的次数,最低位补入相应的,的内容为最后移入位的值。第83页/共133页(2)算术右移指令SAR语句格式:SAR OPD,1或SAR OPD,CL功能:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。第84页/共133页【例4.26】算术右移运算。MOV BH,0F4H;(BH)=0F4HMOV CL,2;(CL)=2SAR BH,CL;(BH)=0FDH,(CF)=0该例语句“SARBH,CL”实际上完成了(BH)BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。第85页/共133页(3)逻辑右移指令SHR语句格式:SHR OPD,1或SHR OPD,CL功能:将(OPD)向右移动CL规定的次数,最高位补入相应个数的,CF的内容为最后移入位的值。第86页/共133页3.循环移位指令(1)循环左移指令ROL语句格式:ROL OPD,1或ROL LPD,CL功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。第87页/共133页(2)循环右移指令ROR语句格式:ROR OPD,1或ROR OPD,CL功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。第88页/共133页(3)带进位的循环左移指令RCL语句格式:RCL OPD,1或RCL OPD,CL功能:将目的操作数连同CF标志一起向左循环移动CL规定的次数。第89页/共133页(4)带进位的循环右移指令RCR语句格式:RCR OPD,1或RCR OD,CL功能:将目的操作数连同CF标志一起向右循环移动所规定的次数。返回本节第90页/共133页4.3.4 串操作类指令串操作指令:数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。为此8086提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。返回本章首页返回本章首页第91页/共133页图4.34.3流程图总结了串操作的过程。图图2.3 串操作流程图串操作流程图第92页/共133页1传送指令MOVS语句格式:MOVSB字节串传送 MOVSW字串传送功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。即:(DS:SI)ES:DI。当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。第93页/共133页2串比较指令CMPS 语句格式:CMPSB字节串比较 CMPSW字串比较功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。即:(SI)(DI)。修改串指针,使之指向串中的下一个元素。当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。第94页/共133页3串搜索指令SCAS语句格式:SCASB字节串搜索 SCASW字串搜索功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,即:字 节 操 作:(AL)(DI),字 操 作:(AX)(DI)。修改指针使之指向串中的下一个元素。当DF=0时,(DI)增量。当DF=1时,(DI)减量。第95页/共133页4从源串中取数指令LODS语句格式:LODSB从字节串中取数 LODSW从字串中取数功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。即:字节操作:(SI)AL,字操作:(SI)AX。修改指针SI,使它指向串中的下一个元素。当DF=0时,(SI)增量。当DF=1时,(SI)减量。第96页/共133页5往目的串中存数指令STOS语句格式:STOSB往字节串中存数 STOSW往字串中存数功能:将AL或AX中的数据送入DI所指的目的串中的字节(或字)存储单元中。即:字节操作:(AL)DI,字操作:(AX)DI。修改指针DI,使之指向串中的下一个元素。当DF=0时,(DI)增量)。当DF=1时,(DI)减量。第97页/共133页6重复前缀指令REP REPZ REPNZ(1)REP REP前缀用在MOVS、STOS、LODS指令前。功能:每执行一次串指令(CX)1,直到(CX)=0,重复执行结束。(2)REPZ 该指令一般用在CMP、SCAS指令前。功能:每执行一次串指令(CX)1,并判断ZF标志是否为0,只要(CX)=0或ZF=0,则重复执行结束。(3)REPNZ 该指令一般用在CMPS、SCAS 指令前。功能:每执行一次串指令(CX)1,并判断ZF标志是否为0,只要(CX)=0或ZF=1,则重复执行结束。第98页/共133页4.3.5 控制转移类指令1 无条件转移指令2 条件转移指令3 循环控制指令 4 子程序调用指令返回本章首页返回本章首页第99页/共133页1 无条件转移指令无条件转移指令表表2.4 无条件转移指令的语句格式及功能无条件转移指令的语句格式及功能返回本节第100页/共133页2 条件转移指令条件转移指令(1)简单条件转移指令(2)无符号数条件转移指令(3)有符号数条件转移指令 它们都有通用的语句格式和功能。语句格式:标号:操作符 短标号功能:如果条件满足,则(IP)位移量IP。第101页/共133页(1 1)简单条件转移指令第102页/共133页第103页/共133页(2 2)无符号数条件转移指令无符号数条件转移指令表4.2无符号数条件转移指令第104页/共133页【例4.27】比较无符号数大小,将较大的数存放AX寄存器。CMP AX,BX ;(AX)(BX)JNB NEXT ;若AX=BX,转移到NEXTXCHGAX,BX ;若AX=BX,转移到NEXTXCHGAX,BX;若AXBX,交换NEXT:返回本节第107页/共133页3 3 循环指令 (1)循环指令LOOP(2)相等/为零循环指令LOOPE(3)不相等/不为零循环指令LOOPNE(4)CX为零转移指令JCXZ第108页/共133页(1)循环指令LOOP语句格式:LOOP 短标号功能:(CX)1 0,则程序转移(循环);否则,顺序执行。说明:使用LOOP指令可代替两条指令:DEC CXJNE 短标号第109页/共133页(2)相等/为零循环指令LOOPE语句格式:LOOPE 短标号 LOOPZ 短标号功能:(CX)1 0且ZF=1,则程序转移(循环);否则,顺序执行。第110页/共133页(3)不 相 等/不 为 零 循 环 指 令LOOPNE语句格式:LOOPNE 短标号 LOOPNZ 短标号功能:(CX)10,则程序转移(循环);否则,顺序执行。第111页/共133页(4)CX为零转移指令JCXZ语句格式:JCXZ 短标号功能:(CX)10,则程序转移(循环);否则,顺序执行。返回本节第112页/共133页4 4 子程序调用指令(1)子程序调用指令CALL1)段内直接调用2)段间直接调用3)段内间接调用4)段间间接调用(2)返回指令RET(1)语句格式:RET(2)语句格式:RET n(n为偶数)返回本节第113页/共133页4.3 4.3 中断指令4.4.1 8086中断机构 4.4.2 BIOS调用 4.4.3 DOS功能调用 返回本节第114页/共133页4.4.1 8086中断机构 1.中断的基本概念(1)中断中断就是计算机暂时停止当前正在执行的程序,转而执行完成更紧急任务的子程序,执行结束后恢复原先执行的程序。(2)中断源 向CPU提出中断请求的事件称为中断源。8086CPU的中断源有两大类:内部中断和外部中断。内部中断是指由CPU的标志位TF为1或执行一条软件中断指令而引起的;外部中断是由外部请求信号引起的,包括可屏蔽中断源INTR和不可屏蔽中断源NMI。INTR称为可屏蔽中断请求,是因为该中断请求是否能得到响应,受IF标志位的影响。当IF1,CPU可响应INTR中断请求,否则不予响应。NMI则不受IF影响。中断源形式如图4-3所示。第115页/共133页第116页/共133页(3)中断类型号和中断向量表 8086的中断系统能够处理256个不同的中断源,并为每一个中断安排一个编号,范围为00HFFH,对应十进制数为0255,称为中断类型号。一种中断对应一个中断服务程序,每一个中断服务程序有一个确定的入口地址,这个地址称为中断向量。把系统中所有的中断向量集中起来,按中断类型号从小到大的顺序放到存储器的某一个区域,这个存放中断向量的存储区称为中断向量表。8086CPU把存储器的00000H003FFH共1024个存储单元作为中断向量的存储区,每个中断向量