接口技术课程课件

上传人:沈*** 文档编号:241405483 上传时间:2024-06-23 格式:PPT 页数:73 大小:1.06MB
返回 下载 相关 举报
接口技术课程课件_第1页
第1页 / 共73页
接口技术课程课件_第2页
第2页 / 共73页
接口技术课程课件_第3页
第3页 / 共73页
点击查看更多>>
资源描述
第三章第三章 8086/8088的指令系统的指令系统第一节 寻址方式第二节 指令系统一、立即寻址二、寄存器寻址三、直接寻址四、寄存器间接寻址五、变址寻址六、基址加变址寻址一、数据传送指令二、算术运算指令三、逻辑运算指令四、串操作指令五、控制转移指令六、处理器控制指令1 计算机的指令一般由操作码和操作数组成,操作码规定了计算机的指令一般由操作码和操作数组成,操作码规定了指令的功能;而操作数则规定了指令操作的对象。操作数可以指令的功能;而操作数则规定了指令操作的对象。操作数可以以立即数的形式存放在指令中,但在大多数情况下,操作数是以立即数的形式存放在指令中,但在大多数情况下,操作数是以地址的形式存放在指令(指示操作数在哪儿)。用于说明操以地址的形式存放在指令(指示操作数在哪儿)。用于说明操作数所在地址的方法称为作数所在地址的方法称为寻址方式。31 8086的寻址方式在微机中,操作数存放在:在微机中,操作数存放在:1、在指令中;、在指令中;2、在、在CPU的某一的某一内部寄存器中;内部寄存器中;3、在内存的数据区中;、在内存的数据区中;4、I/O端口。端口。在在8086CPU中,内存地址是由数据段地址和段内偏移量中,内存地址是由数据段地址和段内偏移量组成。而指令中规定的地址即为段内偏移量(逻辑地址)组成。而指令中规定的地址即为段内偏移量(逻辑地址)有效地址有效地址EA,有效地址,有效地址EA构成的方法不同,则为不同的构成的方法不同,则为不同的寻址方式。寻址方式。第三章第三章 8086的寻址方式和指令系统的寻址方式和指令系统2 操作数(操作数(8位或位或16的常数)的常数)直接包含在指令中,紧跟在操直接包含在指令中,紧跟在操作码后面,与操作码一起放在作码后面,与操作码一起放在代码段区域中。操作数代码段区域中。操作数im既可既可是是8位的,也可是位的,也可是16位的位的。例:例:MOV AX,im MOV AL,26H二、寄存器寻址二、寄存器寻址(Register Addreing)例:例:MOV DS,AXAXDS一、立即寻址方式(一、立即寻址方式(Immediate Addreing)操作码imLimH码段M AXAH ALimHimL操作数放在指令规定的寄存器中操作数放在指令规定的寄存器中。3 操作数的有效地址操作数的有效地址EA是指令的一是指令的一部分,它与操作码一起放在代码段区部分,它与操作码一起放在代码段区域中。域中。操作数的物理地址为数据段操作数的物理地址为数据段寄存器寄存器DS加上加上16位地址偏移量。位地址偏移量。例:若(例:若(DS)=3000H MOV AX,2000H指令中存储单元的地址也可用符号地指令中存储单元的地址也可用符号地址表示。址表示。例:AREA1 DW 0867H MOV AX,AREA1注意区分注意区分:AREA1 EQU 0867H MOV AX,AREA1502000操作码操作码30300003200032001码码段段数据段数据段AHAL3050三、直接寻址方式三、直接寻址方式(Direct Addreing)4操作数在存储单元中。操作操作数在存储单元中。操作数的有效地址数的有效地址EA在指令码所在指令码所指定的寄存器中。可作为间指定的寄存器中。可作为间址的寄存器有址的寄存器有SI、DI、BX、BP,若:若:1、操作数在数据段、操作数在数据段DS中:中:则以寄存器则以寄存器BX、SI或或DI间间接寻址。接寻址。2、操作数在堆栈段中:则、操作数在堆栈段中:则以寄存器以寄存器BP间接寻址。间接寻址。例:若(DS)=2000H,(SI)=1000H MOV AX,SIA0操作码50200002100021001AX码码段段数据段数据段AH AL50A0四、寄存器间接寻址方式四、寄存器间接寻址方式(Register Indirect Addreing)5 操作数在存储单元中。操作数的有效地址是以指令指操作数在存储单元中。操作数的有效地址是以指令指定的寄存器内容加上指令中给定的定的寄存器内容加上指令中给定的8位或位或16位位移量。位位移量。操作码503000操作码30300003500035001AX码码段段数据段数据段例:若(例:若(DS)=3000H,(SI)=2000H,COUNT=3000H MOV AX,COUNT SI或或 MOV AX,COUNT SI 若若指令指定的寄存器是指令指定的寄存器是BX、SI或或DI,段寄存器使用,段寄存器使用DS;若指令指定的寄存器是若指令指定的寄存器是BP,则段寄存器使用则段寄存器使用SS。3050五、寄存器相对寻址方式五、寄存器相对寻址方式(Register Relative Addreing)物理地址物理地址16DSSICOUNT 30000H+2000H+3000H =35000H6 操作数在存储单元中。操作数的有效地址是一个基址寄存操作数在存储单元中。操作数的有效地址是一个基址寄存器(器(BX或或BP)和一个变址寄存器()和一个变址寄存器(SI或或DI)的内容之和,两)的内容之和,两个寄存器均由指令指定。一般由基址寄存器决定所使用的段个寄存器均由指令指定。一般由基址寄存器决定所使用的段寄存器。寄存器。六、基址变址寻址方式六、基址变址寻址方式(Based Indexed Addreing)若若指令指定的寄存器是指令指定的寄存器是BX,段寄存器使用,段寄存器使用DS;若若指令指定的寄存器是指令指定的寄存器是BP,则段寄存器使用则段寄存器使用SS。物理地址物理地址16DSBX+SI 或或 16DSBX+DI物理地址物理地址16SSBP+SI 或或 16SSBP+DI例:例:MOV AX,BXSI若若 DS=3000H,SI=2000H,BX=3000H,(,(35000H)=0ABCDH则:物理地址则:物理地址16DSBX+SI=35000H AX=0ABCDH7 操作数在存储单元中。操作数的有效地址是基址寄存器操作数在存储单元中。操作数的有效地址是基址寄存器(BX或或BP)内容加上变址寄存器()内容加上变址寄存器(SI或或DI)的内容、再加)的内容、再加上指令中指定的上指令中指定的8位或位或16位位移量。一般由基址寄存器决定位位移量。一般由基址寄存器决定所使用的段寄存器。所使用的段寄存器。例:例:MOV AX,COUNT BX SI七、相对基址变址寻址方式七、相对基址变址寻址方式(Relative Based Indexed Addreing)若若指令指定的寄存器是指令指定的寄存器是BX,段寄存器使用,段寄存器使用DS;物理地址物理地址16DSBX+SI8位或位或16位位移量位位移量 或或 16DSBX+DI 8位或位或16位位移量位位移量若若指令指定的寄存器是指令指定的寄存器是BP,则段寄存器使用则段寄存器使用SS 物理地址物理地址16SSBP+SI 8位或位或16位位移量位位移量 或或 16SSBP+DI 8位或位或16位位移量位位移量若 DS=3000H,SI=0300H,BX=1500H,COUNT 0200H,(31A00H)=26BFH则:物理地址16DSBX+SI COUNT=31A00H AX=26BFH8*立即数可以出现在方括号内,表示直接地址;立即数可以出现在方括号内,表示直接地址;1、指令中使用方括号的地址表达式必须遵循下列规则:指令中使用方括号的地址表达式必须遵循下列规则:*只有只有SI、BP、DI、BX可以出现在方括号内,它们可以单独出可以出现在方括号内,它们可以单独出现,也可以相加后出现,或以寄存器与立即数相加的形式出现,现,也可以相加后出现,或以寄存器与立即数相加的形式出现,但但BX和和BP或或SI和和DI不能同时出现在同一个不能同时出现在同一个 内,内,SI和和DI也不能也不能同时出现;同时出现;*方括号有相加的含义,下面几种写法都是等价的:方括号有相加的含义,下面几种写法都是等价的:1200BXSI BX+1200SI BX+SI+1200*方括号内包含方括号内包含BP,则隐含使用,则隐含使用SS提供基地址;其余情提供基地址;其余情况均使用况均使用DS提供基地址。提供基地址。需说明的几个问题需说明的几个问题92、段超越:、段超越:在在8088系统中,数据通常在数据段中,但若系统中,数据通常在数据段中,但若需要,数据也可存放在码段,堆栈段以及附加段中,这种情需要,数据也可存放在码段,堆栈段以及附加段中,这种情况就是段超越。应用时,需在指令中加以说明。况就是段超越。应用时,需在指令中加以说明。例:例:MOV AX,ES:0500HES表示数据在附加段中;表示数据在附加段中;:是修改属性运算符。是修改属性运算符。103、其它寻址方式(1)隐含寻址:指令中不指明操作数)隐含寻址:指令中不指明操作数(2)I/O端口寻址:端口寻址:8086有直接端口寻址和间接端口寻址有直接端口寻址和间接端口寻址两种方式,端口寻址范围分别为两种方式,端口寻址范围分别为00FFH和和0FFFFH。(3)转移类指令寻址)转移类指令寻址(4)一条指令有几种寻址方式)一条指令有几种寻址方式113-2 8086的指令系统 8088的指令系统可以分为六个功能组:一、数据传送指令(一)通用传送指令功能:将源操作数的一个字节(功能:将源操作数的一个字节(B)或一个)或一个字(字(W)传送到目的操作数所指的单元。)传送到目的操作数所指的单元。说明:说明:*指令中至少要有一项明确指令中至少要有一项明确指出传送的是字节还是字;指出传送的是字节还是字;*可用不同的寻址方式;可用不同的寻址方式;*不影响标志位;不影响标志位;*源操作数不变;源操作数不变;*存储器之间,立即数与段寄存存储器之间,立即数与段寄存器,段寄存器之间不能用一条指令器,段寄存器之间不能用一条指令完成数据传送。完成数据传送。数据传送算术运算逻辑运算串操作控制传送处理器控制1、MOV OPRD1,OPRD2源操作数目的操作数立即数存储器段寄存器DS、ES、SS通 用指 针变 址寄 存器MOV指令允许传送数据的途径如下图所示122、堆栈操作指令、堆栈操作指令 进栈指令进栈指令 PUSH OPRD功能:将一个字的源操作数传送至由功能:将一个字的源操作数传送至由SP所指向的堆栈的顶部所指向的堆栈的顶部.堆栈是以堆栈是以“先进后出先进后出”的方式工作的一个存储区的方式工作的一个存储区,例例:PUSH AX 指令执行过程:指令执行过程:指令执行后指令执行后AX=2A8CHSP 2000:0130H2000:012EH8CH指令执行前指令执行前AX=2A8CHSP 2000:0130H2000:0000H2000:0000H2AHSP操作:操作:PUSH 操作时,先修改操作时,先修改SP 的值,使的值,使 SP 2 SP 后,把源操后,把源操作数(字)压入堆栈中作数(字)压入堆栈中 SP 指示的位置上。指示的位置上。OPRD可以是可以是16位的通位的通用寄存器,段寄存器,存储器中的字。用寄存器,段寄存器,存储器中的字。13 出栈指令出栈指令 POP OPRD功能:把当前功能:把当前 SP 所指向的堆栈顶部的一个字送到指定的目的所指向的堆栈顶部的一个字送到指定的目的操作数中。(操作数中。(CS不能作为目的操作数)不能作为目的操作数)操作:每执行一次出栈操作,操作:每执行一次出栈操作,SP+2 SP,指向新的栈顶。指向新的栈顶。例:设例:设SS=2000H,SP=0130H,(,(20130H)=396EH,BX=4FAEH,执行指令,执行指令POP BX的过程如下图所示:的过程如下图所示:执行指令前执行指令前BX=4FAEH2000:0000H2000:0000H2000:0130H2000:0130HSP 2000:0132HSP 执行指令后执行指令后BX=6EH39H72H72H39H6EH6EH39SP 2000:0131H143、交换指令、交换指令指令格式:XCHG OPRD1,OPRD2 功能:把一个字或一个字节的源操作数与目的操作数交换。把一个字或一个字节的源操作数与目的操作数交换。交换可在寄存器之间、寄存器与存储器之间进行。交换可在寄存器之间、寄存器与存储器之间进行。但段寄存器不能作为操作数,也不能直接交换两个存储但段寄存器不能作为操作数,也不能直接交换两个存储单元中的内容。单元中的内容。例:设例:设AX=31B0H,DS=3000H,BX=1800H,(31800H)=1995H,执行指令执行指令 XCHG AX,BX 的过程为:的过程为:执行指令前AX31B0H31800H31801H31800H31801H执行指令后AX95H19H31HB0H1995H153、换码指令、换码指令 XLAT (查表指令)查表指令)指令格式:指令格式:XLAT 功能功能(BX)()(AL)AL该指令执行前,先把转换表首地址的偏移量送入该指令执行前,先把转换表首地址的偏移量送入BX中,而把要查找表内单元中,而把要查找表内单元的偏移量(的偏移量(0255)送入)送入AL中。执行换码指令后,把该单元的内容送入中。执行换码指令后,把该单元的内容送入AL中。中。例:若十进制数字例:若十进制数字09 的的 LED七段显示码对照表已存放在内存中,七段显示码对照表已存放在内存中,表格的首地址为表格的首地址为TABLE,用,用 XLAT 指令求数字指令求数字5的七段显示码的七段显示码值程序如下:值程序如下:TABLE DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18H ;建立七段显示码表格建立七段显示码表格 5 表格首地址表格首地址 12H MOV AL,5 ;AL MOV BX,OFFSET TABLE ;BX XLAT ;AL16(二)累加器专用传送指令(二)累加器专用传送指令1、输入指令、输入指令 IN功能:从功能:从8位端口读入一个字节到位端口读入一个字节到AL,或从,或从16位端口读入一个字到位端口读入一个字到AX。指令格式:指令格式:IN AL,n 或或 IN AX,n;n为为 255 的端口地址的端口地址 IN AL,DX 或或 IN AX,DX;端口地址放在;端口地址放在DX中。中。第一种格式,端口地址第一种格式,端口地址n(00FFH)直接包含在直接包含在IN指令里,共允许寻址指令里,共允许寻址256个个端口。当端口地址号大于端口。当端口地址号大于FFH时,必须用第二种寻址方式,即先将端口号送时,必须用第二种寻址方式,即先将端口号送入入DX寄存器,再执行输入操作。寄存器,再执行输入操作。例:用例:用IN指令从输入端口读取数据指令从输入端口读取数据(1)IN AL,0E3H E3H端口9DHAL执行指令前22H执行指令后E3H端口9DHAL9DH(2)IN AX,80H执行指令前80H端口81H端口5BH17HAX3355H执行指令后80H端口81H端口5BH17HAX17 5BH172、输出指令、输出指令 OUT指令格式:指令格式:OUT n,AL 或或 OUT n,AX OUT DX,AL 或或 OUT DX,AX功能:将功能:将AL中的一个字节写到一个中的一个字节写到一个8位端口,或把位端口,或把AX中的一个中的一个字写到一个字写到一个16位端口。位端口。例:用例:用 OUT 指令对输出端口进行操作指令对输出端口进行操作1)OUT 84H,AX执行指令前执行指令前84H85H66H77H端口端口AX3F46H执行指令后执行指令后84H85H端口端口AX3F46H2)MOV DX,300H OUT DX,AL 执行指令前执行指令前AL9AH端口端口300H 22H执行指令后执行指令后AL9AH端口端口300H 9AH46H3FH18(三)地址目的传送指令(三)地址目的传送指令这是专用于传送地址码的指令,可用来传送操作数的段地址和这是专用于传送地址码的指令,可用来传送操作数的段地址和偏移地址,共包含以下三条指令:偏移地址,共包含以下三条指令:1、LEA取有效地址指令取有效地址指令指令格式:指令格式:LEA 目的目的,源源功能:把源操作数的地址偏移量,传送至目的操作数。功能:把源操作数的地址偏移量,传送至目的操作数。要求源操作数必须是一个内存操作数;目的操作数必须是要求源操作数必须是一个内存操作数;目的操作数必须是一个除段寄存器以外的一个除段寄存器以外的16位寄存器。位寄存器。指令指令 LEA BX,TABLE与指令与指令 MOV BX,OFFSET TABLE是等价的是等价的例:例:SI1000H,DS5000H,(,(51000H)1234H执行指令执行指令 LEA BX,SI后,后,BX1000H执行指令执行指令 MOV BX,SI后,后,BX1234H192、LDS将双字指针送指令指定的寄存器和将双字指针送指令指定的寄存器和DS指令指令指令格式:指令格式:LDS 目的,源目的,源功能:从源操作数指定的存储单元中的双字指针送到指令指定功能:从源操作数指定的存储单元中的双字指针送到指令指定的寄存器(常指定的寄存器(常指定SI)及及DS寄存器中。寄存器中。例:设例:设DS=1200H,(,(13450H)=3F46H,(,(13452H)=0A92H 执行指令执行指令 LDS SI,1450H 后:后:SI=3F46H,DS=0A92H203、LES将双字指针送到寄存器和将双字指针送到寄存器和ES指令指令指令格式:指令格式:LES 目的,源目的,源功能:从源操作数指定的存储单元中的双字指针送到指功能:从源操作数指定的存储单元中的双字指针送到指令指定的寄存器(常指定令指定的寄存器(常指定DI)及及ES寄存器中。寄存器中。例:设例:设DS=0100H,BX=0020H,(01020H)=0300H,(01022H)=0500H,ES=3000H.DI=0300H,ES=0500H执行指令执行指令 LES DI,BX 后后21(四)标志寄存器传送指令(四)标志寄存器传送指令1、LAHF 标志送到标志送到 AH指令指令指令格式:指令格式:LAHF功能:把标志寄存器中的功能:把标志寄存器中的 SF、ZF、AF、PF和和CF分别送到分别送到AH寄存器的位寄存器的位7、6、4、2和和 0,位,位5、3、1的内容未定义。的内容未定义。ODITSZAPC 15 12 11 10 9 8 7 6 5 4 3 2 1 0 AHFLAG操作示意图操作示意图2、SAHF AH送标志寄存器指令送标志寄存器指令指令格式:指令格式:SAHF功能:把寄存器功能:把寄存器AH中的中的 7、6、4、2、0位传送到标志寄存器位传送到标志寄存器的的SF、ZF、AF、PF和和 CF位,高位标志位,高位标志 OF、DF、IF 和和 TF不受影响。不受影响。223、PUSHF 标志入栈指令标志入栈指令指令格式:指令格式:PUSHF功能:修改堆栈指针,使功能:修改堆栈指针,使SP 2 SP,把整个标志寄存器的把整个标志寄存器的内容压入堆栈,内容压入堆栈,指令执行后对标志位无影响。指令执行后对标志位无影响。4、POPF 标志出栈指令标志出栈指令指令格式:指令格式:POPF功能:把当前堆栈指针功能:把当前堆栈指针 SP 所指的一个字,传送给标志寄存所指的一个字,传送给标志寄存器,并修改堆栈指针,使器,并修改堆栈指针,使 SP 2 SP。在过程(子程序)调用和中断服务程序中,可用在过程(子程序)调用和中断服务程序中,可用PUSHF和和POPF指令来保护和恢复标志位。另外,这两条指令也可用来改变追踪指令来保护和恢复标志位。另外,这两条指令也可用来改变追踪标志标志 TF(入栈,修改,出栈)(入栈,修改,出栈)(8088无直接改变无直接改变T标志的指令)。标志的指令)。23 8088指令系统提供了加、减、乘、除四种基本运算指令,指令系统提供了加、减、乘、除四种基本运算指令,可处理无符号或带符号的可处理无符号或带符号的8位或位或16位二进制数的算术运算(带符位二进制数的算术运算(带符号数是用补码表示)。还提供了各种调整操作指令,故可进行号数是用补码表示)。还提供了各种调整操作指令,故可进行压缩的或非压缩的十进制数的算术运算。压缩的或非压缩的十进制数的算术运算。绝大部分算术运算指绝大部分算术运算指令都影响状态标志位。令都影响状态标志位。(一)加法指令1、ADD OPRD1,OPRD2功能:将源和目的操作数相加,结果送到目功能:将源和目的操作数相加,结果送到目的操作数中,即的操作数中,即OPRD1OPRD2 OPRD12、ADC OPRD1,OPRD2功能:功能:OPRD1OPRD2CF OPRD1 这两条指令的源操作数OPRD2可以是寄存器、存储器或立即数,目的操作数OPRD1只能用寄存器和存储单元。注意,源操作数和目的操作数不能同时为存储器,而且它们的类型必须一致,即都是字节或字。它们影响的标志位为:CF、OF、PF、SF、ZF和AF。二、算术运算指令二、算术运算指令24执行指令执行指令 ADD AX,CX;(;(AX)=5389H,CF=1 ADC DX,BX;(;(DX)=1128H,CF=0例:设,(例:设,(AX)=7365H,(BX)=1025H,(CX)=0E024H (DX)=0102H结果:结果:(AX)=5389H,(DX)=1128H,(,(BX)=1025H,(CX)=0E024H 标志位标志位 SF=0,ZF=0,CF=0,OF=0,AF=03、INC OPRD增量指令(单操作数)增量指令(单操作数)功能:对目的操作数加功能:对目的操作数加1,结果送回目的操作数。即,结果送回目的操作数。即OPRD1 OPRD。目的操作数可以在通用寄存器或内存中。目的操作数可以在通用寄存器或内存中。指令执行后影响指令执行后影响AF、OF、PF、SF和和ZF,但不影响,但不影响CF。例:例:INC BL INC CX例:对内存单元的内容加例:对内存单元的内容加1必须说明该单元必须说明该单元的类型的类型 INC BYTE PTRBX INC WORD PTRBX254、AAA 未组合未组合BCD码加法调整指令码加法调整指令功能:在用功能:在用ADD或或ADC指令对两个未组合指令对两个未组合BCD码作加法后,运码作加法后,运算结果已存在算结果已存在AL中,用中,用AAA指令对指令对AL中的数据进行调整,中的数据进行调整,产生一个未组合的十进制和放在产生一个未组合的十进制和放在AX中。中。例:实现两个未组合十进制数加法运算。设例:实现两个未组合十进制数加法运算。设AL=08H,BL=07H ADD AL,BL;AAA ;AL=0FHAX=0105H 未组合十进制数的和放在未组合十进制数的和放在AX中中5、DAA 组合组合BCD码加法调整指令码加法调整指令例:实现两个组合十进制数加法运算。设例:实现两个组合十进制数加法运算。设AL=28H,BL=68H执行执行 ADD AL,BL;AL=90H,CF=0,AF=1 DAA ;AL06HAL,AL=96H结果结果 AL=96H,CF=0,AF=0。功能:将两个组合功能:将两个组合BCD码相加后,存放在码相加后,存放在AL中的结果,调整为中的结果,调整为正确的组合正确的组合BCD数。数。DAA指令要紧跟在指令要紧跟在ADD或或ADC指令指令之后使用,以实现组合的十进制数加法运算。之后使用,以实现组合的十进制数加法运算。26例:求两个多字节无符号数之和。加数在例:求两个多字节无符号数之和。加数在DATA1开始的单元中,被开始的单元中,被加数在加数在DATA2开始的单元中,字节长度为开始的单元中,字节长度为5,和存放在,和存放在DATA2中。中。设置循环计数器设置循环计数器0送送CF,0送送SI取加数送取加数送AL结束结束被加数被加数+加数送加数送DATA2修改循环次数及指针修改循环次数及指针加完加完YN程序框图:程序框图:源程序段:源程序段:MOV CX,5 MOV SI,0 CLCMOV AL,DATA1SILOP:ADC DATA2SI,ALINC SIDEC CXJNZ LOP HLT27(二)减法指令(二)减法指令1、SUB OPRD1,OPRD2功能:功能:OPRD1 OPRD2 OPRD12、SBB OPRD1,OPRD2 功能:功能:OPRD1 OPRD2 CF OPRD1这两条指令均影响这两条指令均影响AF、CF、OF、PF、SF和和ZF3、DEC OPRD 减量指令减量指令功能:功能:OPRD 1 OPRD执行后不影响执行后不影响 CF,但影响但影响 AF、OF、PF、SF和和ZF4、NEG OPRD 取负指令取负指令 功能:功能:0 OPRD OPRD 指令执行后影响指令执行后影响AF、CF、OF、PF、SF和和 ZF。若字节操作数为若字节操作数为80H(128),),字操作数为字操作数为8000H(32768),),执行执行NEG指令后操作数无变化,但指令后操作数无变化,但OF=1。如操作数为。如操作数为0,执行该指令后,结果仍为,执行该指令后,结果仍为0,且,且CF=0,否则否则CF=1。28例例1:设(:设(DX)=3A49H,CF=1 执行指令执行指令 SBB DX,1850H 执行结果执行结果(DX)=21F8H,CF=0 例例2:已知(:已知(AL)=13H 执行指令执行指令 NEG AL 执行结果执行结果(AL)=0EDH 以上以上5条指令实际上都做减法操作,而且都可以进行字或字条指令实际上都做减法操作,而且都可以进行字或字节运算。对于双操作数指令,源操作数可以是寄存器、存储器节运算。对于双操作数指令,源操作数可以是寄存器、存储器或立即数;目的操作数可以是寄存器或存储器,但不能立即数,或立即数;目的操作数可以是寄存器或存储器,但不能立即数,而且两个操作数不能同时为储存器。而且两个操作数不能同时为储存器。对于单操作数指令,目的操作数可以是寄存器或存储器,对于单操作数指令,目的操作数可以是寄存器或存储器,但不能立即数,但不能立即数,如果操作数是存储器,还必须指出其类型如果操作数是存储器,还必须指出其类型。5、比较指令、比较指令CMP OPRD1,OPRD2 功能:功能:将目的操作数减去源操作数,但不送结果,仅将结果反将目的操作数减去源操作数,但不送结果,仅将结果反映在标志位上,映在标志位上,接着可用条件转移指令决定程序的流向。接着可用条件转移指令决定程序的流向。29比较指令主要用在希望比较两个数之间的关系,而又比较指令主要用在希望比较两个数之间的关系,而又不破坏原操作数的场合。即两者是否相等,或两个中哪一个大。不破坏原操作数的场合。即两者是否相等,或两个中哪一个大。*在比较指令之后,根据在比较指令之后,根据ZF标志即可判断两者是否相等。标志即可判断两者是否相等。若两者相等,执行若两者相等,执行CMP指令后,指令后,ZF=1,否则为,否则为0。*若是两个无符号数进行比较,则在比较指令之后,可根据若是两个无符号数进行比较,则在比较指令之后,可根据CF的状态判断大小的状态判断大小。*若是判断两个带符号数的大小,可根据若是判断两个带符号数的大小,可根据 SF和和OF进行判断。进行判断。在执行在执行CMP AX,BX后后 1、当无溢出(当无溢出(OF=0),若),若SF=0,则,则AX BX;否则;否则AXBX。2、当产生溢出(、当产生溢出(OF=1),若),若SF=0,则,则AXBX。即:即:OF“异或异或”SF=0,则,则AXBX;OF“异或异或”SF=1,则,则AXBX转转NEXT MOV AX,BX ;小于,则小数送;小于,则小数送AXNEXT:INC BX ;修改指针;修改指针 INC BX MOV MAX,AX ;完,则存大数;完,则存大数 HLT32(三)乘法指令(三)乘法指令1、无符号数乘法指令无符号数乘法指令MUL 源源功能:完成将功能:完成将AL(字节)或字节)或AX(字)中的无符号(字)中的无符号数与源操作数相乘。数与源操作数相乘。双倍长度的乘积送回到双倍长度的乘积送回到AX或或DX:AX。影响标志位影响标志位CF、OF。若乘积的高半部分(在字节相乘时为若乘积的高半部分(在字节相乘时为AH,在字相乘,在字相乘时为时为DX)不为零,则标志)不为零,则标志CF=1,OF=1;否则否则CF=0,OF=0。2、带符号数乘法指令带符号数乘法指令IMUL 源源功能:完成两个功能:完成两个带符号数相乘,带符号数相乘,操作及对标志位的影响与操作及对标志位的影响与MUL指令完全类似。指令完全类似。字节操作数:字节操作数:(AL)(源源)AX 字操作数:字操作数:(AX)(源源)DX:AX3、AAM功能:把在功能:把在AX中的两个未组合十进制数相乘的结果,进行十进中的两个未组合十进制数相乘的结果,进行十进制数的调整,使得在制数的调整,使得在AX中得到正确的未组合十进制数的乘积。中得到正确的未组合十进制数的乘积。指令执行后影响标志位指令执行后影响标志位 PF、SF、ZF,对对AF、CF、OF 未定义。未定义。例:设(例:设(AL)=90H,(,(BL)=04H。执行指令执行指令MUL BL后,后,(AX)=0240H,CF=1,OF=1例:设(例:设(AL)=09H,(,(BH)=06H 执行执行 MUL BL;(;(AL)=36HAAM;调整得调整得(AH)=05H,(,(AL)=04H 即即 (AX)=0504H 为未组合十进制数为未组合十进制数09和和06相乘的结果相乘的结果5433功能:对两个无符号数进行除法运算。源操功能:对两个无符号数进行除法运算。源操作数可以是字节或字。作数可以是字节或字。字节操作数:(字节操作数:(AX)/(源源)()(字节)的商送字节)的商送 AL(最大为(最大为FFH),余数送),余数送AH字操作数字操作数:(DX:AX)/(源源)()(字)的商字)的商送送AX(最大为最大为FFFFH)余数送)余数送DX若被除数只有若被除数只有16位,除数也是位,除数也是16位,则必须将位,则必须将16位被除数送位被除数送AX,并将并将DX清清0,然后相除。然后相除。DIV指令执行后,所有标志位均无定义。指令执行后,所有标志位均无定义。2、带符号数除法指令带符号数除法指令IDIV 源源功能:该指令执行的操作与功能:该指令执行的操作与DIV相同,但操作数都必须相同,但操作数都必须是带符号数,商和余数也都是带符号数,而且规定余数是带符号数,商和余数也都是带符号数,而且规定余数的符号和被除数的相同,且所有标志位均无定义。的符号和被除数的相同,且所有标志位均无定义。对于对于IDIV指令,字节操作时要求被除数为指令,字节操作时要求被除数为16位,字操作时要求被除数为位,字操作时要求被除数为32位。位。如果被除数不满足这个条件,不能简单地将高位置如果被除数不满足这个条件,不能简单地将高位置0,而应该先用下面的符号扩,而应该先用下面的符号扩展指令将被除数转换成除法指令所要求的格式,再执行除法指令。展指令将被除数转换成除法指令所要求的格式,再执行除法指令。3、把字节转换为字指令把字节转换为字指令CBW 若若(AL)80H,扩展后扩展后(AH)=00H,若,若(AL)80H,扩展后扩展后(AH)=0FFH。该指令执行后,不影响标志位。该指令执行后,不影响标志位。功能:把功能:把AL中字节的符号位扩展到中字节的符号位扩展到AH的所有位。的所有位。(四)除法指令四)除法指令 1、无符号数除法指令无符号数除法指令 DIV 源源344、CWD 把字转换成双字指令 指令执行后,不影响标志位功能:把AX中字的符号位扩展送到DX寄存器的所有位中去。若(AX)8000H,则(DX)=0000H ;若(AX)8000H,则(DX)=0FFFFH例:编程求38/3的商和余数。MOV AL,0BAH;被除数38送AL MOV CH,03H;除数3 送CH CBW;把字节扩展为字,使AX=0FFBAH IDIV CH;AL=0F4H=12(商),AH=0FEH=2(余数)5、AAD 未组合十进制数除法调整指令功能:能把AX中的两个未组合的十进制数,在两个数相除以前进行校正。这样在两个未组合的十进制数相除以后,可以得到正确的未组合十进制结果。例:设AX中存有两个未组合BCD数0307H,即十进制数37,BL中存有一个未组合十进制数05H,若要完成37/5的运算,可用以下两条指令:AAD;(AH)10+(AL)=37=25H ALDIV BL;(AL)=7(商),(AH)=2(余数)注意:加法、减法和乘法的十进制调整指令都是紧跟在加法、减法和乘法运算指令之后,对运算结果进行调整。而除法的十进制调整指令AAD则不同,它是在除法运算之前进行调整。35三、逻辑运算指令三、逻辑运算指令8088/8086可以对字节或字操作数按位操作可以对字节或字操作数按位操作,包括逻辑与、包括逻辑与、或、非、异或及测试和移位、循环移位指令。逻辑操作可以或、非、异或及测试和移位、循环移位指令。逻辑操作可以分成单操作数操作和双操作数操作两类。分成单操作数操作和双操作数操作两类。(一)单操作数操作指令(一)单操作数操作指令1、NOT 逻辑非指令(取反指令)逻辑非指令(取反指令)指令格式:指令格式:NOT 目的操作数目的操作数功能:将目的操作数求反后送回目的操作数,即功能:将目的操作数求反后送回目的操作数,即目的操作数目的操作数可以是可以是8位或位或16位寄存器或存储器。位寄存器或存储器。例:设例:设(BX)=8DCFH,执行执行 NOT BX 后,后,(BX)=7230H指令执行后对标志位没有影响指令执行后对标志位没有影响对双操作数的逻辑运算(对双操作数的逻辑运算(CF,OF清零,清零,AF未定义,影响未定义,影响ZF,SF,PF)36(二二)双操作数操作指令双操作数操作指令该类指令能对两个操作数按位进行与、或、异或及测试操作。目的操作数可以是该类指令能对两个操作数按位进行与、或、异或及测试操作。目的操作数可以是寄存器或内存操作数;源操作数可以是寄存器或内存操作数,还可以是立即数。寄存器或内存操作数;源操作数可以是寄存器或内存操作数,还可以是立即数。1 1、ANDAND逻辑与指令逻辑与指令格式:AND OPRD1,OPRD2功能:对两个操作数进行按位功能:对两个操作数进行按位“逻辑与逻辑与”操作,操作,结果送回目的操作数。主要用于使操作数结果送回目的操作数。主要用于使操作数的某些位保持不变的某些位保持不变(和和11相与相与),),而使某而使某些位清些位清0(0(和和00相与相与)例例:设设(AX)=3538H,执行指令执行指令 AND AX,0F0FH 后后;(AX)=0508H2、TEST 测试指令测试指令格式:TEST OPRD1,OPRD2功能:对两个操作数进行功能:对两个操作数进行“逻辑与逻辑与”操作操作,但不回送结果但不回送结果,即指令执行后两操即指令执行后两操作数不变。该指令常用在要检测某些条件是否满足,但又不希望改变原有作数不变。该指令常用在要检测某些条件是否满足,但又不希望改变原有操作数的情况下。紧跟在这条指令后面的往往是一条件转移指令,根据测操作数的情况下。紧跟在这条指令后面的往往是一条件转移指令,根据测试结果产生分支,转向不同的处理程序。试结果产生分支,转向不同的处理程序。例如,要判断在例如,要判断在BX寄存器中寄存器中16位数的最高位是否为位数的最高位是否为 1,可用指令可用指令 TEST BX,8000H 若最高位为若最高位为 1,指令执行后,指令执行后,ZF=0,若不是,若不是 1,则,则ZF=1(结果是结果是0)373、OR“逻辑或”指令格式:OR OPRD1,OPRD2功能:对两个操作数进行按位功能:对两个操作数进行按位“逻辑或逻辑或”操作,结果送回目的操作数。操作,结果送回目的操作数。该指令主要用于使操作数的某些位保留该指令主要用于使操作数的某些位保留(和和 0相或相或),而使某些位置,而使某些位置1(和和 1相或相或)。例如,例如,AX中存放两个未组合中存放两个未组合BCD数数0509H,要将它们分别转换成,要将它们分别转换成ASCII码,结果码,结果仍放在仍放在AX中,则可用如下指令实现:中,则可用如下指令实现:OR AX,3030H ;(AX)=3539H4、XOR 异或操作指令格式:XOR OPRD1,OPRD2功能:对两个操作数进行按位逻辑异或运算,结果送回目的操作功能:对两个操作数进行按位逻辑异或运算,结果送回目的操作数。数。主要用于使操作数的某些位保留主要用于使操作数的某些位保留(和和 0相异或相异或),而使某些,而使某些位取反位取反(和和 1相异或相异或)。例如:欲使例如:欲使BH寄存器中的高寄存器中的高4位取反位取反,低低4位保持不变位保持不变,可执行指令可执行指令 XOR BH,0F0H38CFMSB LSB 0SHL/SAL 指指令令2、移位指令、移位指令 SAL算术左移指令算术左移指令 指令格式:指令格式:SAL OPRD,CNT SHL 逻辑左移指令逻辑左移指令 指令格式:指令格式:SHL OPRD,CNT功能:以上两条指令的功能完全相同,均将寄存器或存储器功能:以上两条指令的功能完全相同,均将寄存器或存储器中目的操作数的各位左移,每移一次,最低有效位中目的操作数的各位左移,每移一次,最低有效位LSB补补0,而最高有效位而最高有效位MSB进入标志位进入标志位CF。移动一次,相当于将目的。移动一次,相当于将目的操作数乘以操作数乘以2。指令中的计数值。指令中的计数值CNT决定所要移位的次数。决定所要移位的次数。若只需要移位一次,可直接将指令中的若只需要移位一次,可直接将指令中的CNT置置1,若移位次,若移位次数大于数大于1,应先将移位次数送进,应先将移位次数送进CL寄存器,再把寄存器,再把CL放在指令放在指令的的CNT位置上。位置上。39 SHR 逻辑右移指令逻辑右移指令指令格式:指令格式:SHR OPRD,CNT 功能:对目的操作数中的各位进行右移,每执行一次移位操作,功能:对目的操作数中的各位进行右移,每执行一次移位操作,操作数右移一位,最低位进入操作数右移一位,最低位进入CF,最高位补,最高位补0。右移次数由计数值决定,同。右移次数由计数值决定,同SAL/SHL指令一样。若目的操作数是无符号数,每右移一次,使目的操作数指令一样。若目的操作数是无符号数,每右移一次,使目的操作数除以除以2,例如,右移,例如,右移2次相当于除以次相当于除以4,右移,右移3次相当于除以次相当于除以8等等。但用这种等等。但用这种方法作除法时,余数将被丢掉。方法作除法时,余数将被丢掉。SAR 算术右移指令算术右移指令指令格式:指令格式:SAR OPRD,CNT 功能:它的功能与功能:它的功能与 SHR 相似,移位次数由相似,移位次数由CNT决定。每移位一次,决定。每移位一次,OPRD各位右移一位,最低位进入各位右移一位,最低位进入CF,但最高位(即符号位)保持不变,而不是,但最高位(即符号位)保持不变,而不是补补0。每移一次,相当于对带符号数进行除。每移一次,相当于对带符号数进行除2操作。操作。MSB LSB MSB LSB CFCF0 SHR 指令SAR 指令40指令执行后对标志位的影响:标志位CF 总是为目的操作数最后被移出的那一位的值。标志位OF:只有当CNT=1时才有效,用以表示移位前后符号位是否改变,若改变,OF=1,否则OF=0。即对左移指令(SAL/SHL),若移位后最高有效位与标志位CF 不相等,则OF=1,否则OF=0。而对右移指令,若移位后,操作数的最高有效位与次高位不同,则OF=1,否则OF=0。标志位标志位ZF、SF 根据指令执行后目的操作数的状态来决定,根据指令执行后目的操作数的状态来决定,PF 只只有当目的操作数在有当目的操作数在AL中时才有效。标志位中时才有效。标志位AF 未定义。未定义。例例1:设(:设(BL)=5AH,执行指令执行指令 SHL BL,1 后后(BL)=0B4H,标志位,标志位CF=0,OF=1例2:设(DS)=2800H,(DI)=180AH,(2980AH)=1256H 执行 MOV CL,02H SAR DI,CL 后 (2980AH)=0495H,CF=1,ZF=0,SF=0413、循环移位指令 ROL循环左移指令 指令格式:ROL OPRD,CNTMSB LSB操作CFMSB LSB ROR循环右移指令指令格式:ROR OPRD,CNT操作CF RCL带进位循环左移指令指令格式:RCL OPRD,CNT操作MSB LSBCF RCR带进位循环右移指令指令格式:RCR OPRD,CNT操作MSB LSBCF四条指令都按指令中四条指令都按指令中CNT规定的移位次数进行循环移位,移位后的结果仍送规定的移位次数进行循环移位,移位后的结果仍送回目的操作数。回目的操作数。OPRD可以是可以是8/16位的寄存器或内存操作数,移位次数可以是位的寄存器或内存操作数,移位次数可以是1,也可以由,也可以由CL寄存器的值指定。寄存器的值指定。标志位标志位CF的值由最后一次被移出的值决定;的值由最后一次被移出的值决定;OF位仅在位仅在CNT为为1时才有效,在时才有效,在移位后操作数的最高有效位移位后操作数的最高有效位(符号位符号位)发生变化时,则发生变化时,则OF=1,否则否则OF置置0.例:设CF=1,(AL)=0B4H,若执行指令ROL AL,1;则(AL)=69H,CF=1,OF=1 若执行指令RCR AL,1;则(AL)=0DAH,CF=0,OF=0 42四、串操作指令四、串操作指令*串操作指令是用于处理存放在存储器中的字或字节数据,串操作指令是用于处理存放在存储器中的字或字节数据,字符串长度可达字符串长度可达64K字节字节。*串操作指令串操作指令共有五种基本指令,可以对字符串进行传送、比共有五种基本指令,可以对字符串进行传送、比较、搜索及存和取操作。较、搜索及存和取操作。*在串操作指令可前加重复前缀,指令就重复执行,直至在串操作指令可前加重复前缀,指令就重复执行,直至CX寄寄存器中的操作次数满足为止,重复过程可以被中断。存器中的操作次数满足为止,重复过程可以被中断。*串操作指令串操作指令的源串位于当前数据段中,以的源串位于当前数据段中,以SI为指针,目的串必为指针,目的串必须位于当前附加段中,以须位于当前附加段中,以DI为指针。每执行一次串操作指令,指针为指针。每执行一次串操作指令,指针SI和和DI会自动修改,标志位会自动修改,标志位DF=0为递增方向,这时在每次操作后为递增方向,这时在每次操作后SI、DI增量,字节操作时加增量,字节操作时加1,字操作时加,字操作时加2;DF=1为递减方向,为递减方向,这时在每次操作后这时在每次操作后SI、DI减量,字节操作时减减量,字节操作时减1,字操作时减,字操作时减2。要。要处理的字符串长度(字节或字数)放在处理的字符串长度(字节或字数)放在CX寄存器中。寄存器中。431、MOVS串传送指令串传送指令 (不影响标志位)(不影响标志位)格式:格式:1)MOVS OPRD1,OPRD2 2)MOVSB(字节传送指令)字节传送指令)MOVSW(字传送指令)(字传送指令)功能:把由功能:把由SI作指针的源串中的一个字节或一个字,传送到由作指针的源串中的一个字节或一个字,传送到由DI作作指针的目的串中,且自动修改指针指针的目的串中,且自动修改指针SI和和DI。可方便地实现在。可方便地实现在存储单元之间传送数据。若在指令前加前缀存储单元之间传送数据。若在指令前加前缀 REP 则可执行至则可执行至CX=0。例:编写程序段把数据段中以例:编写程序段把数据段中以SRC为偏移地址,长度为为偏移地址,长度为100个字节的个字节的字符串,传送到附加段中以字符串,传送到附加段中以LOC为为偏移地址的存储区域中。偏移地址的存储区域中。程序段:LEA SI,SRC LEA DI,LOC MOV CX,100 CLD REP MOVSBAGAIN:MOVS LOC,SRC DEC CX JNZ AGAIN指令REP MOVSB也可用几条指令代替442、CMPS 串比较指令串比较指令格式:格式:1)CMPS OPRD1,OPRD2 2)CMPSB (字节操作字节操作)/CMPSW (字操作字操作)功能:将以功能:将以SI为指针的源串中的一个字(或字节)与为指针的源串中的一个字(或字节)与DI为指针的目为指针的目的串中的一个字(或字节)相比较(相减),但不影响操作数,的串中的一个字(或字节)相比较(相减),但不影响操作数,结果反映在标志位上,同时相应修改源串和目的串的指针,指结果反映在标志位上,同时相应修改源串和目的串的指针,指向串中的下一个元素。向串中的下一个元素。标志位标志位AF、CF、OF、PF、ZF和和SF反反映两个串的相应元素之间的关系映两个串的相应元素之间的关系。在在CMPS指令前可以加重复前缀,即指令前可以加重复前缀,即REPE CMPS 或或REPZ CMPS;其功能相同,若比较结果为;其功能相同,若比较结果为CX0(指定的长度还未比较指定的长度还未比较完)和完)和ZF=1(两串相等),则重复比较,直至两串相等),则重复比较,直至CX=0(比完了)或(比完了)或ZF=0(两串不相等)时才停止操作。也可改用重复前缀(两串不相等)时才停止操作。也可改用重复前缀REPNE或或REPNZ,它们表示:若,它们表示:若CX0(串没有结束)和串不等(串没有结束)和串不等(ZF=0ZF=0)则)则重复比较,直至重复比较,直至CX=0或或ZF=1时才停止比较。时才停止比较。45例:在自例:在自KA和和KB单元开始各有单元开始各有一个由一个由30个字符组成的字符串,个字符组成的字符串,检查这两个字符串是否相等,并检查这两个字符串是否相等,并在在GG单元中建立一个标志(相等单元中建立一个标志(相等为为00,不等为,不等为FFH)程序段:LEA SI,KA LEA DI,KB MOV CX,30 CLD REPE CMPSB JNZ L1 MOV GG,0 JMP L2 L1:MOV GG,0FFH L2:HLT 初始化(KA)和(KB)相应字符比较 串相等否?0送GGFF送GG暂停YN初始化:初始化:KA指针送指针送SI KB指针送指针送DI 串长送串长送CX 指针增量变化指针增量变化思考:第一个不相等的字符思考:第一个不相等的字符的地址的地址463、SCAS 串搜索指令格式:格式:1)SCAS 目的串目的串 2)SCASB 或或 SCASW 功能:功能:*将将AL(字节操作)或字节操作)或AX(字操作)的内容减去附加段(字操作)的内容减去附加段中以中以DI为指针的目的串元素,结果反映在标志位上,但不改变为指针的目的串元素,结果反映在标志位上,但不改变目的串元素及累加器的内容。目的串元素及累加器的内容。*操作后自动修改指针操作后自动修改指针DI,使之指向下一个待搜索的串元素。,使之指向下一个待搜索的串元素。SCAS指令前也可加重复前缀 REPE/REPZ,表示相等继续搜索,不等提前退出;REPNE/REPNZ表示不等继续搜索,相等提前退出。利用SCAS指令,可在内存中搜索所需要的数据(关键字)。指令执行前应先将关键字存放在累加器中。47例:内存中以例:内存中以BUF0 单元开始的区域单元开始的区域连续存放着一个长度为连续存放着一个长度为80的字符的字符串串(ASCII码串码串),查找字符串中是,查找字符串中是否有字符否有字符B,若有,将关键字,若有,将关键字的地址送的地址送BX,若没有查到,则将,若没有查到,则将BX寄存器清寄存器清0。程序段:LEADI,BUF0 MOVAL,B MOVCX,80 CLDREPNE SCASBJZNEXTMOVBX,0JMPDONE NEXT:DECDIMOVBX,DI DONE:HLT块首址送DI关键字送AL块长送CX增量调整指针
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!