微处理器原理及应用寻址方式与指令系统.pptx
高 低高字 低字高双字低双字字节字双字四字高四字低四字双四字70701581503116310633263012764NNN+1NN+2NN+4NN+8图3.1基本数据类型的结构形式第1页/共91页9CH48H2BH6AH7AH1AHC3H23H72H92H8BH3AHABHA2H12H45HNN1N2N3N4N5N6N7N8N9N10N11N12N13N14N+15N+15单元地址单元地址图3.2基本数据类型存储规律第2页/共91页3.1.2 3.1.2 数字数据类型数字数据类型数据类型包含:无符号整数、带符号整数和浮点数。数据类型包含:无符号整数、带符号整数和浮点数。1 1无符号整数(范围:无符号整数(范围:0 02 2n n-1-1)2 2带符号整数(范围:带符号整数(范围:2 2n-1 n-1 +2+2n-1n-1-1-1)带带符符号号整整数数是是用用2 2的的补补码码表表示示的的二二进进制制值值。规规定定操操作作数数的最高位为符号位。的最高位为符号位。3 3浮点数浮点数 浮浮点点数数据据类类型型可可分分为为三三种种:单单精精度度浮浮点点、双双精精度度浮浮点点和双和双扩展的精度浮点。扩展的精度浮点。第3页/共91页指针数据类型指针数据类型在在实实方方式式下下有有两两种种类类型型的的指指针针:近近指指针针(1616位位)和和远远指指针针(3232位)位)偏移Near指针310偏移段选择子Far指针或逻辑地址3104732(a)(b)图3.3指针数据类型(虚拟方式)第4页/共91页字符串、位及位串数据类型字符串、位及位串数据类型字符串包括字节串、字串和双字串。字符串包括字节串、字串和双字串。它们分别是字节、字和双字的相邻序列。它们分别是字节、字和双字的相邻序列。707070150150150310310310字节串字串双字串NN+1N+MNN+2N+2MNN+4N+4M图3.4字节、字、双字字符串数据类型第5页/共91页3.2 3.2 计算机指令格式计算机指令格式指令包括两部分:指令操作码部分和地址码部分。指令操作码部分是给出该指令应完成何种操作。地址码部分是用来描述该指令的操作对象。指令格式可分为:零地址指令、一地址指令、二地址指令和三地址指令。零地址指令:只有操作码部分,而没有操作数的指令;一地址指令:只有目的操作数的单操作数指令;二地址指令:有两个地址指出两个操作数的地址;三地址指令优点:操作结束后,原两个操作数的内容均未被破坏;缺点:增加一个地址后,使得指令码加长,增加了存储空间,取指时间变长。第6页/共91页3.2.1 3.2.1 指令的助记符格式指令的助记符格式助记符格式可用以下通式表示:助记符格式可用以下通式表示:L L:op D1,D2,D3op D1,D2,D3其中:其中:L L是标号,在标识符后面跟有冒号(:)是标号,在标识符后面跟有冒号(:)opop是助记符,具有相同功能的指令操作码的保留名是助记符,具有相同功能的指令操作码的保留名例如:例如:MOV AX,BX操作码的助记符目的操作数源操作数第7页/共91页3.2.2 80 x863.2.2 80 x86指令编码格式指令编码格式指令编码格式包含操作码和操作数两部分。指令编码格式包含操作码和操作数两部分。操作码表示计算机执行什么操作。操作码表示计算机执行什么操作。操作数指明参与操作的数的本身,或规定了操作数的地址。操作数指明参与操作的数的本身,或规定了操作数的地址。图图 3.5 8086 CPU3.5 8086 CPU指令编码的一般形式指令编码的一般形式1)1)操操作作码码字字节节 它它是是指指令令的的第第一一字字节节,规规定定指指令令的的操操作作类类型型,是指令的必选字节,字节内容如下:是指令的必选字节,字节内容如下:D D7 7 D D6 6 D D5 5 D D4 4 D D3 3 D D2 2 D D1 1 D D0 0 操作码字节寻址方式字节偏移量字节(1/2)立即数字节(1/2)OPDW第8页/共91页OPOP:表示指令操作码,:表示指令操作码,D D:表示指令中数据传送的方向。:表示指令中数据传送的方向。W W:表示操作数类型。:表示操作数类型。2)2)寻寻址址方方式式字字节节。它它是是指指令令的的第第二二字字节节,规规定定操操作作数数的的寻寻址址方式。是指令的可选字节,字节内容如下:方式。是指令的可选字节,字节内容如下:D D7 7 D D6 6 D D5 5 D D4 4 D D3 3 D D2 2 D D1 1 D D0 0 MODMOD:表示方式域,:表示方式域,D D7 7、D D6 6位能表示位能表示4 4种不同的方式。种不同的方式。REGREG:表表示示寄寄存存器器域域,D D5 5、D D4 4、D D3 3位位能能表表示示8 8种种不不同同的的寄寄存存器。器。R/MR/M:表表示示寄寄存存器器存存储储器器域域,D D2 2、D D1 1、D D0 0位位能能表表示示8 8种种不同的寄存器存储器。不同的寄存器存储器。MODREGR/M第9页/共91页表表3-1 mod3-1 mod与与r rm m域所组合的寻址方式域所组合的寻址方式 MOD MODR/MR/M存储器寻址存储器寻址寄存器寻址寄存器寻址逻辑地址的计算公式逻辑地址的计算公式W W0 0W W1 1MODMOD00B00BMODMOD01B01BMODMOD10B10BMODMOD11B11B000000001001010010011011100100101101110110111111DS:BX+SIDS:BX+SIDS:BX+DIDS:BX+DISS:BP+SISS:BP+SISS:BP+DISS:BP+DIDS:SIDS:SIDS:DIDS:DIDS:disp16DS:disp16 Ds:BXDs:BXDS:BX+SI+disp8DS:BX+SI+disp8DS:BX+DI+disp8DS:BX+DI+disp8SS:BP+SI+disp8SS:BP+SI+disp8SS:BP+DI+disp8SS:BP+DI+disp8DS:SI+disp8DS:SI+disp8DS:DI+disp8DS:DI+disp8DS:disp16 DS:disp16+disp8+disp8Ds:BX+disp8Ds:BX+disp8DS:BX+SI+disp16DS:BX+SI+disp16DS:BX+DI+disp16DS:BX+DI+disp16SS:BP+SI+disp16SS:BP+SI+disp16SS:BP+DI+disp16SS:BP+DI+disp16DS:SI+disp16DS:SI+disp16DS:DI+disp16DS:DI+disp16DS:disp16 DS:disp16+disp16+disp16Ds:BX+disp16Ds:BX+disp16ALALCLCLDLDLBLBLAHAHCHCHDHDHBHBHAXAXCXCXDXDXBXBXSPSPBPBPSISIDIDI第10页/共91页3 3)偏偏移移量量字字节节 是是指指令令的的第第三三、四四字字节节,是是指指令令的的可可选选字字节,节,给出了存储器操作数的偏移量。给出了存储器操作数的偏移量。4 4)立即数字节立即数字节 是指令的可选字节,给出了指令的立即数。是指令的可选字节,给出了指令的立即数。3.3 8086CPU3.3 8086CPU的寻址方式的寻址方式寻址方式寻址方式寻找指令或操作数存放地址的方法。寻找指令或操作数存放地址的方法。两两种种寻寻址址方方式式:一一种种是是用用来来对对操操作作数数进进行行寻寻址址;另另一一种是种是 用用来来对对转转移移地地址址或或调调用用地地址址进进行行寻寻址址,即即 对指令地址进行寻址。对指令地址进行寻址。第11页/共91页3.3.1 3.3.1 操作数的寻址方式操作数的寻址方式1 1、立即寻址立即寻址立即数寻址特点:指令执行速度快。立即数寻址特点:指令执行速度快。立即数只能是整数,且只能作为源操作数。立即数只能是整数,且只能作为源操作数。图3-6立即数寻址过程代码段1234MOVAX,3412H的指令代码34AXAHAL操作码12第12页/共91页2 2、寄存器寻址方式寄存器寻址方式寄寄存存器器寻寻址址方方式式的的优优点点:不不但但可可以以减减少少指指令令码码的的长长度度,而而且且由由 于于操操作作数数已存于寄存器中,执行速度已存于寄存器中,执行速度 较快。较快。寄存器既能作为源操作数,又能作为目的操作数。寄存器既能作为源操作数,又能作为目的操作数。例如:例如:MOV AXMOV AX,CXCX 该该指指令令将将CXCX(源源操操作作数数)的的内内容容传传送送到到AXAX寄寄存存器器(目目的的操操作作数数)中中,其其中中源源操操作作数数CXCX,目目的的操操作作数数AXAX都都是是寄寄存存器器寻址方式。寻址方式。3 3、存储器寻址存储器寻址指令给出了操作数在数据区中的地址信息。指令给出了操作数在数据区中的地址信息。五种不同的存储器寻址方式:五种不同的存储器寻址方式:第13页/共91页(1 1)直接寻址方式)直接寻址方式例如:例如:MOV AXMOV AX,7834H7834H 该该指指令令将将有有效效地地址址EA=8064HEA=8064H单单元元中中的的内内容容传传送送到到AXAX寄寄存存器器中中。若若(DSDS)=2000H=2000H,则则该该指指令令源源操操作作数数的的存存储储单单元元的物理地址为的物理地址为20000H20000H7834H=27834H7834H=27834H。代码段操作码34数据段2000DS20000+7834278343412AXMOVAX,7834H指令代码781234图3-7直接寻址方式寻址过程第14页/共91页(2 2)寄存器间接寻址)寄存器间接寻址操作数存放在存储单元中。操作数存放在存储单元中。注注意意两两点点:一一是是寄寄存存器器中中的的内内容容是是操操作作数数的的有有效效地地址址,而而不不是是 操作数本身;操作数本身;二二是是只只能能用用CPUCPU中中的的基基址址寄寄存存器器BXBX、BPBP或或变变址址寄寄存器存器 DIDI、SISI来间接寻址。来间接寻址。如如果果指指令令前前面面没没有有用用前前缀缀指指令令指指明明操操作作数数在在哪哪一一段段,则则通常默认段寄存器为通常默认段寄存器为DSDS。即:。即:物理地址物理地址=DS10H+EA=DS10H+=DS10H+EA=DS10H+或或 物理地址物理地址=SS10H+BP=SS10H+BP第15页/共91页例如:例如:MOV AXMOV AX,DI DI 代码段操作码数据段12341234DS2468BX12340+2468147A83412AXMOVAX,BX指令代码图3-8寄存器间接寻址示意图第16页/共91页(3(3)寄存器相对寻址)寄存器相对寻址操作数存放在存储单元中操作数存放在存储单元中物理地址物理地址=DS10H+EA=DS10H+=DS10H+EA=DS10H+或或 物理地址物理地址=SS10H+BP=SS10H+BP例如:例如:MOV BXMOV BX,DI+10H DI+10H 第17页/共91页基址寻址基址寻址用用BXBX、BPBP为基址寄存器进行寻址为基址寄存器进行寻址变址寻址变址寻址用用SISI、DIDI为变址寄存器进行寻址为变址寄存器进行寻址 代码段操作码24数据段2678681234DS2732BX1234027321B2967826AXMOVAX,BX6824H指令代码+6824图3-9寄存器相对寻址操作过程第18页/共91页(4(4)基址加变址寻址方式)基址加变址寻址方式操作数存放在存储单元中操作数存放在存储单元中 物理地址物理地址=DS10H+EA=DS10H+=DS10H+EA=DS10H+或或 物理地址物理地址=SS10H+=SS10H+例如:例如:ADD AXADD AX,BX+SI BX+SI+1026003412340代码段操作码数据段78561234DS1026SI1339A5678AXMOVAX,BXSI指令代码0034BX图3-10基址加变址寻址方式操作过程第19页/共91页(5(5)相对的基址和变址寻址方式)相对的基址和变址寻址方式操作数存放在存储单元中操作数存放在存储单元中物理地址物理地址=DS10H+EA=DS10H+=DS10H+EA=DS10H+或或 物理地址物理地址=SS10H+=SS10H+第20页/共91页例如:例如:MOV AHMOV AH,BXBXSISI2468H2468HMOVAH,BXSI2468H指令代码0110010020000代码段操作码68数据段26232000DS0110SI2267826AH0100BX+246824图3-11相对的基址和变址寻址方式操作过程过程第21页/共91页4 4、I IO O端口寻址端口寻址操作数在操作数在I IO O端口中。端口中。两种编址方式:与存储器统一编址方式两种编址方式:与存储器统一编址方式独立的独立的I IO O空间编址方式空间编址方式与存储器统一编址方式,上述五种存储器寻址方式均可采用。与存储器统一编址方式,上述五种存储器寻址方式均可采用。独立的独立的I IO O空间编址方式则对空间编址方式则对I IO O端口有两种寻址方式:端口有两种寻址方式:(l(l)直接端口寻址方式)直接端口寻址方式端端口口地地址址的的寻寻址址范范围围是是 0 0 0FFH0FFH,端端口口地地址址直直接接由由指指令给出。令给出。(2(2)间接端口寻址方式间接端口寻址方式端端口口地地址址的的寻寻址址范范围围是是 0 0 0FFFFH0FFFFH,端端口口地地址址由由DXDX寄寄存器给出。存器给出。第22页/共91页3.3.2 3.3.2 指令地址的寻址方式指令地址的寻址方式指令地址的寻址方式以下指令地址的寻址方式以下4 4种:种:(1)(1)段内直接寻址方式段内直接寻址方式转移的指令地址是由当前的转移的指令地址是由当前的IPIP内容和指令中规定的内容和指令中规定的8 8位或位或1616位偏移量之和给出。位偏移量之和给出。+2101012112340代码段操作码操作码01211234CS14562段内直接转移指令代码0121IP目标指令代码图3-12段内直接寻址方式过程第23页/共91页(2)(2)(2)(2)段内间接寻址方式段内间接寻址方式段内间接寻址方式段内间接寻址方式转移的指令地址是由用寄存器或一个字存储单元的内容给转移的指令地址是由用寄存器或一个字存储单元的内容给转移的指令地址是由用寄存器或一个字存储单元的内容给转移的指令地址是由用寄存器或一个字存储单元的内容给出。出。出。出。代码段操作码操作码数据寻址方式CS段内间接转移指令代码根据数据寻址方式计算EAIP目标指令代码图3-13段内间接寻址方式过程第24页/共91页(3)(3)段间直接寻址方式段间直接寻址方式 转移的指令地址是由指令码字节直接给出。转移的指令地址是由指令码字节直接给出。3412+78560代码段操作码操作码12347856CS7B972段间直接转移代码3412IP目标指令代码5678图3-14段间直接寻址过程第25页/共91页(4)(4)段间间接寻址方式段间间接寻址方式 转移的指令地址由一个双字存储单元的内容给出转移的指令地址由一个双字存储单元的内容给出。图3-15段间间接寻址方式过程代码段操作码操作码数据寻址方式段间间接转移指令代码目标指令代码DSCSIP数据段12345678根据数据寻址方式计算EA第26页/共91页3.4 80863.4 8086指令系统指令系统指令系统按功能可分为指令系统按功能可分为6 6类:类:数据传送类指令;数据传送类指令;算术运算类指令;算术运算类指令;逻辑运算与移位类指令;逻辑运算与移位类指令;字符串指令;字符串指令;控制转移类指令;控制转移类指令;处理器控制类指令。处理器控制类指令。第27页/共91页3.4.1 3.4.1 数据传送类指令数据传送类指令分为分为4 4种:种:通用数据传送指令通用数据传送指令 累加器专用传送指令累加器专用传送指令 地址传送指令地址传送指令 标志传送指令。标志传送指令。1 1通用数据传送指令通用数据传送指令(1(1)最基本的传送指令)最基本的传送指令格式:格式:MOV 目的操作数,源操作数目的操作数,源操作数第28页/共91页举例:举例:MOVBL,ALMOVDS,AXMOVDL,DIMOVBX,AXMOVDX,1000MOVBH,120MOVDX,1234H第29页/共91页(2(2)堆栈操作指令)堆栈操作指令 堆堆栈栈是是一一种种数数据据结结构构,是是在在内内存存中中开开辟辟了了一一个个比比较较特特殊殊的的存存储储区区,这这个个区区域域中中数数据据的的存存取取采采用用“后后进进先先出出”的的原则。原则。1000SS0018SP605040302010100181001A栈顶栈底1000SS0016SP605040302010ABCD100181001A栈顶栈底1000SS001ASP403020101001A栈顶栈底10016图68086系统椎栈及其操作(a)堆栈原始状态(b)执行pushAX(c)执行POPAX(AX)=CDABHPOPBX后的状态(a)(b)(c)第30页/共91页堆栈段堆栈段8086CPU在存储器分段管理时,划分了一个专在存储器分段管理时,划分了一个专门的门的堆栈区。堆栈区。格式:格式:PUSH源操作数源操作数POP目的操作数目的操作数举例:举例:PUSHBXPUSHESPUSHDSPUSHSIPOPAXPOPBX1.POSHDI第31页/共91页(3)交换指令)交换指令实现两个操作数之间进行直接交换,方便程序的编写。实现两个操作数之间进行直接交换,方便程序的编写。格式:格式:XCHG目的操作数,源操作数目的操作数,源操作数举例:举例:XCHGAH,BLXCHGDX,BXXCHG505H,AX第32页/共91页2累加器专用传送指令累加器专用传送指令累加器是累加器是8086CPU进行数据传输的核心。进行数据传输的核心。有两类指令:有两类指令:输入输出指令输入输出指令换码指令换码指令(1)输入输出指令)输入输出指令工业控制中常用的指令工业控制中常用的指令格式:格式:INAC,源操作数,源操作数OUT目的操作数,目的操作数,AC举例:举例:INAL,20HOUTDX,AX第33页/共91页(2(2)换码指令)换码指令该指令用来将一个代码值转换成相应的另一种代码值,该指令用来将一个代码值转换成相应的另一种代码值,格式:格式:XLAT代码段D779数据段40780300BX0703008030707ALXLAT指令代码+800008000DS803008030180307图3-17XLAT指令执行过程第34页/共91页举例:举例:若若要要将将十十进进制制数数09转转换换成成共共阳阳极极LEDLED显显示示的的字字形形代代码码,则列表如表则列表如表3-23-2所示。所示。十进制数(十进制数(BCDBCD码)码)字形代码字形代码0 040H40H1 179H79H2 224H24H3 330H30H4 419H19H5 512H12H6 602H02H7 778H78H8 800H00H9 918H18H表3-2十进制数09转换成LED显示的字形代码第35页/共91页3地址传送指令地址传送指令它包括它包括3条指令:条指令:取有效地址指令取有效地址指令LEA;将地址指针装入将地址指针装入DS指令指令LDS;将地址指针装入将地址指针装入ES指令指令LES。格式:格式:LEA寄存器,源操作数寄存器,源操作数LDS寄存器,源操作数寄存器,源操作数LES寄存器,源操作数寄存器,源操作数举例:举例:LEAAX,DI+1000LEAAX,3721HLDSSI,2130HLESDI,SI 第36页/共91页代码段C578数据段5600201000DS初值+2130121307856SILDSSI,2130H指令代码36213010000图3-18LDS指令执行过程2000DS终值第37页/共91页4标志传送指令标志传送指令标志传送指令包括标志传送指令包括4条指令:条指令:标志读取指令标志读取指令LAHF标志设置指令标志设置指令SAHF标志寄存器压入堆栈指令标志寄存器压入堆栈指令PUSHF标志寄存器从堆栈弹出指令标志寄存器从堆栈弹出指令POPF格式:格式:LAHFSAHFPUSHFPOPF第38页/共91页举例:举例:PUSHFPOPBXPUSHCXPOPFOFDFIFTFSFZFAFPFCF1511109876543210FLAGSLAHFSAHFAH图3-19LAHF和SAHF指令传送操作第39页/共91页3.4.2算术运算类指令算术运算类指令1加法指令加法指令格式:格式:ADD目的操作数,源操作数目的操作数,源操作数ADC目的操作数,源操作数目的操作数,源操作数INC目的操作数目的操作数举例:举例:ADDBL,15HADDBX,SIADCCX,BXINCDX第40页/共91页2 2减法指令减法指令格式:格式:SUB 目的操作数,源操作数目的操作数,源操作数 SBB 目的操作数,源操作数目的操作数,源操作数 DEC 目的操作数目的操作数 NEG 目的操作数目的操作数 CMP 目的操作数,源操作数目的操作数,源操作数举例:SUB AX,BX SUB AH,110 SBBBX,AX DEC BX第41页/共91页3 3乘法指令乘法指令格式:格式:MUL 源操作数源操作数 IMUL 源操作数源操作数举例:举例:MULDLIMULBX AL操作数乘积AHALAX操作数乘积DXAX(a)(b)图3-20乘法运算操作数及其运算结果间关系(a)字节操作数(b)字操作数第42页/共91页4 4除法指令除法指令格式:格式:DIV 源操作数源操作数 IDIV 源操作数源操作数 CBWCBD举例:DIVDLIDIVBXMOVAL,72HCBWMOVAX,8600H CWD第43页/共91页ALAH商余数操作数AX8位16位AXDX商余数操作数DXAX16位32位(a)(b)图3-21除法运算操作数及其运算结果存放关系(a)字节操作数(b)字操作数第44页/共91页5 5BCDBCD码运算的调整指令码运算的调整指令分为两类:组合式分为两类:组合式BCDBCD码和分离式码和分离式BCDBCD码码格式:格式:DAAAAADASAASAAMAAD第45页/共91页举例:举例:ADCAL,SIDAAADDAL,DIAAASUBAL,BXDASMULDLAAMAADDIVBL第46页/共91页3.4.3逻辑运算和移位指令逻辑运算和移位指令两组处理指令:逻辑运算指令和移位指令。两组处理指令:逻辑运算指令和移位指令。1逻辑运算指令逻辑运算指令指令格式:指令格式:AND目的操作数,源操作数目的操作数,源操作数OR目的操作数,源操作数目的操作数,源操作数NOT目的操作数目的操作数XOR目的操作数,源操作数目的操作数,源操作数TEST目的操作数,源操作数目的操作数,源操作数第47页/共91页举例:举例:ANDBL,0FHORCX,BX+DIXORAX,0FF00HTESTBX,8000HNOTDH2移位指令移位指令分为两大类:非循环移位指令和循环移位指令。分为两大类:非循环移位指令和循环移位指令。第48页/共91页(1)非循环移位指令)非循环移位指令指令格式:指令格式:SAL目的操作数,计数值目的操作数,计数值SHL目的操作数,计数值目的操作数,计数值SAR目的操作数,计数值目的操作数,计数值SHR目的操作数,计数值目的操作数,计数值举例:举例:SALAX,1SHLAX,CLSARWORDPTRSI,1SHRDI,1第49页/共91页CF0MSBLSBCFCFMSBLSBMSBLSB0(a)(b)(c)图3-22非循环移位指令操作示意图(a)SHL/SAL算术左移(b)SHR逻辑右移(c)SAR算术右移第50页/共91页(2)循环移位指令)循环移位指令指令格式:指令格式:ROL目的操作数,计数值目的操作数,计数值ROR目的操作数,计数值目的操作数,计数值RCL目的操作数,计数值目的操作数,计数值RCR目的操作数,计数值目的操作数,计数值举例:举例:ROLAX,1RORAH,CLRCLBYTEPTRBX,1RCRBX,1第51页/共91页图3.23循环移位移位指令操作示意图(a)ROL不带进位循环左移(b)ROR不带进位循环右移(c)RCL带进位循环左移(d)RCR带进位循环右移CFMSBLSBCFCFMSBLSBMSBLSB(a)(b)(d)CFMSBLSB(c)第52页/共91页3.4.4 3.4.4 串操作指令串操作指令串操作指令串操作指令-用一条指令实现对一串字符或数据的操作。用一条指令实现对一串字符或数据的操作。串操作指令的特点:串操作指令的特点:通通过过加加重重复复前前缀缀来来实实现现串串操操作作,规规定定CXCX寄寄存存器器存存放放要要处处理的字符串的元素个数,即:字节数或字数。理的字符串的元素个数,即:字节数或字数。可以对字节串进行操作,也可以对字串进行操作。可以对字节串进行操作,也可以对字串进行操作。串串操操作作时时,SISI和和DIDI的的增增减减规规定定由由方方向向标标志志DFDF设设定定,当当DF=1DF=1时时,SISI和和DIDI作作自自动动减减量量修修改改,当当DF=0DF=0时时,SISI和和DIDI作作自自动动增量修改,对字节串操作增减量为增量修改,对字节串操作增减量为1 1,对字串操作增减量为,对字串操作增减量为2 2。重复的字符串处理过程可以被中断。重复的字符串处理过程可以被中断。5 5条条串串操操作作指指令令:串串传传送送指指令令MOVSMOVS、串串比比较较指指令令CMPSCMPS、串串检检索指索指 令令SCASSCAS、LODSLODS串串装装入入指指令令和和串串存存储储指指令令STOSSTOS。第53页/共91页3条条重重复复前前缀缀:重重复复前前缀缀REP、相相等等时时重重复复REPE和和不相等时重复不相等时重复REPNE。1指令的重复前缀指令的重复前缀格式:格式:REP串操作指令串操作指令REPE串串操操作作指指令令或或REPZ串串操操作作指令指令REPNE串串操操作作指指令令或或REPNZ串串操操作作指令指令第54页/共91页2 2字符串指令字符串指令(1(1)字符串传送指令)字符串传送指令指令格式:指令格式:MOVSBMOVSW举例:举例:MOVDS,2000HMOVES,3000HCLDMOVCX,20MOVSI,200HMOVDI,100HREPMOVSW第55页/共91页(2)字符串比较指令)字符串比较指令指令格式:指令格式:CMPSBCMPSW举例:举例:编编程程比比较较从从逻逻辑辑地地址址2000H:100H开开始始的的10个个字字节节与与逻逻辑辑地地址址4000H:200H开开始始的的10个个字字节节是是否否对对应应相相等等,相等则转相等则转DONE。MOVDS,2000HMOVES,4000HMOVDI,200HMOVSI,100HCLD第56页/共91页 MOV CX,10 REPZ CMPSB JZ DONE RET DONE (3)字符串检索指令指令格式:SCASW SCASB功能:SCASB/SCASW在字符串中查找一个与已知数值 相同或不同的元素。第57页/共91页举例:举例:从从逻逻辑辑地地址址9000H:100H开开始始的的10个个单单元元中中如如果果有有一一个单元的内容为个单元的内容为2CH,则,则BX加加1。MOVES,9000HMOVDI,100HCLDMOVCX,10MOVAL,2CHREPNZSCASBJNZAAAINCBXAAA:第58页/共91页(4)取字符串指令取字符串指令指令格式:指令格式:LODSBLODSW举例:将100H:20H单元开始10个字节的内容均加5。CLD ;方向标志清0,SI递增 MOV CX,10 ;置计数初值10 MOV DS,100H ;置DS为100H MOV SI,20H ;置SI为20,作为初始地址指针LL1:LODSB ;取1个字节到AL中,并使SI增1 ADD AL,5 ;加5处理 MOV S I,AL ;处理结果送回 DEC CX ;计数值减1 JNZ LL1 ;如未处理完,转LL1 HLT ;暂停第59页/共91页(5)存字符串指令)存字符串指令指令格式:指令格式:STOSBSTOSW举例:举例:将将100H:20H开始的开始的128个单元清个单元清0。CLD;清除方向标志,;清除方向标志,DI递递增增MOVCX,0080H;置计数初值;置计数初值128MOVES,100H;置;置ES为为100HMOVDI,20H;置;置DI为为20H,作为初始,作为初始地址指针地址指针XORAL,AL;AL清清0REPSTOSB;将;将128个字节清个字节清0第60页/共91页3.4.5 3.4.5 控制转移类指令控制转移类指令5 5种转移指令:种转移指令:无条件跳转指令无条件跳转指令条件跳转指令条件跳转指令循环控制指令循环控制指令子程序调用和返回指令子程序调用和返回指令中断指令中断指令1 1无条件跳转指令无条件跳转指令指令格式:指令格式:JMP 目标地址目标地址第61页/共91页举例:举例:JMPSHORTMULTIJMPNEARPRTMULT2JMPCXJMPFARPTRMULT3JMPDWORDPTRSI2条件跳转指令条件跳转指令(1)简单条件跳转指令)简单条件跳转指令指令格式:指令格式:JC目标地址目标地址JNC目标地址目标地址JZ目标地址目标地址JNZ目标地址目标地址JS目标地址目标地址JNS目标地址目标地址第62页/共91页JO目标地址目标地址JNO目标地址目标地址JP目标地址目标地址JNP目标地址目标地址JCXZ目标地址目标地址举例:用条件跳转指令实现程序的循环举例:用条件跳转指令实现程序的循环MOVSI,1000HMOVDI,2000HMOVCX,100KKK:MOVSBDECCXJNZKKK第63页/共91页(2)带符号数条件跳转指令)带符号数条件跳转指令指令格式:指令格式:JG/JNLE目标地址目标地址JGE/JNL目标地址目标地址JL/JNGE目标地址目标地址JLE/JNG目标地址目标地址举例:设有2个互不相等的带符号字节数存放在以100H单元为首地址的数据缓冲区中,试编程把较大的数送200H单元中。第64页/共91页(3)无符号数条件跳转指令)无符号数条件跳转指令指令格式:指令格式:JB/JNAE目标地址目标地址JNB/JAE目标地址目标地址JA/JNBE目标地址目标地址JNA/JBE目标地址目标地址 MOV SI,100H ;首址100H送SI MOV AL,SI ;取第一个数据 CMP AL,SI+1 ;与第二个数相比较 JG L1 ;如果比第二个数大,转L1 MOV AL,SI+1 ;取第二个数 L1:MOV SI,200H ;将较大的数送至200H MOV SI,AL第65页/共91页3循环控制指令循环控制指令指令格式:指令格式:LOOP目标地址目标地址LOOPZLOOPE目标地址目标地址LOOPNZLOOPNE目标地址目标地址举例:举例:编程求1+2+3+4+100 MOV CX,100 ;置循环计数初值100 MOV AX,0 ;求和寄存器AX清0,SUM:ADD AX,CX ;把CX计数值累加入AX LOOP SUM ;CX=CX-1,当CX0时再循环 RET ;返回,结果在AX中第66页/共91页4子程序调用和返回指令子程序调用和返回指令指令格式:指令格式:CALL目标地址目标地址RETRET参数参数举例:举例:CALL200HCALLBXCALL500H:600HCALLDWORDPTRBXRET4第67页/共91页主程序MOVAL,3AHCALLPROGMOVBX,AXCALLPROGMOVDX,AX子程序PROG:MOVBL,ALRET图3-24调用子程序的过程第68页/共91页5中断指令中断指令3.4.6处理器控制类指令处理器控制类指令1标志操作指令标志操作指令指令格式:指令格式:STCCLCCMCSTDCLDSTICLI第69页/共91页28086CPU与外部事件同步指令与外部事件同步指令指令格式:指令格式:HLTWAITESC外部操作码,源操作数外部操作码,源操作数LOCK指令指令3空操作指令空操作指令指令格式:指令格式:NOP3.580X86的寻址方式及新增的指令的寻址方式及新增的指令3.5.1虚地址方式下的寻址方式虚地址方式下的寻址方式第70页/共91页1立即数寻址方式立即数寻址方式例如:例如:MOVEAX,12345678H2寄存器寻址方式寄存器寻址方式例如:例如:MOVEAX,ECX3存储器寻址方式存储器寻址方式偏移量可以由下列公式计算得到:偏移量可以由下列公式计算得到:EA基址十变址基址十变址比例因子十位移量比例因子十位移量基址基址任何通用寄存器都可作为基址寄存器,其内容即为基址。任何通用寄存器都可作为基址寄存器,其内容即为基址。位移量位移量在指令操作码后面的在指令操作码后面的32位、位、16位或位或8位的数。位的数。变变址址除除了了ESP寄寄存存器器外外,任任何何通通用用寄寄存存器器都都可可以以作作为为变变址址寄寄存存器器,其内容即为变址值。其内容即为变址值。比比例例因因子子变变址址寄寄存存器器的的值值可可以以乘乘以以一一个个比比例例因因子子,比比例例因因子子可可以是以是1,2,4或或8。第71页/共91页属性CS段界限值段基地址属性DS段界限值段基地址属性ES段界限值段基地址属性FS段界限值段基地址属性GS段界限值段基地址属性SS段界限值段基地址描述符寄存器选择子CSDSESFSGSSS基址寄存器变址寄存器比例因子1、2、4或8位移量存储器目标地址目标地址图3-25寻址计算图解第72页/共91页9种存储器寻址方式种存储器寻址方式(1)直接寻址方式)直接寻址方式例如:例如:INCWORDPTR1234567H(2)寄存器间接寻址方式)寄存器间接寻址方式例如:例如:MOVEBX,EAXMOVAX,ECXMOVBL,CX(3)基址寻址方式)基址寻址方式例如:例如:MOVECX,EAX124MOVDX,EBP12345H与与8086CPU不不同同之之处处:位位移移量量可可以以是是32位位,任任何何一一个通用寄存器均可个通用寄存器均可第73页/共91页(4)变址寻址方式)变址寻址方式例如:例如:MOVEAX,CNTEBPMOVEDX,CNTEAX与与8086CPU不不同同之之处处:位位移移量量可可以以是是32位位,任何一个通用寄存器均可看成基址寄存器任何一个通用寄存器均可看成基址寄存器(5)带比例因子的变址寻址方式)带比例因子的变址寻址方式EA=变址寄存器内容变址寄存器内容*比例因子比例因子+位移量位移量其中:比例因子可以为其中:比例因子可以为1、2、4或或8例如:例如:MOVEAX,CNTESI*4MOVEAX,VAREDI*2第74页/共91页(6)基址加变址寻址方式)基址加变址寻址方式EA=基址寄存器内容基址寄存器内容+变址寄存器内容变址寄存器内容例如例如1:MOVEAX,EBXEDIMOVEAX,ESPEBP例如例如2:MOVEAX,EDXEBPMOVEAX,EBPEDX(7)带比例因子的变址再加基址寻址方式)带比例因子的变址再加基址寻址方式EA=变址寄存器内容变址寄存器内容*比例因子比例因子+基址基址例如:例如:MOVEBX,EDX*8EBPMOVEAX,EDXEBP*2第75页/共91页(8)带位移量的基址加变址寻址方式)带位移量的基址加变址寻址方式例例如如:ADDEDX,EDIEBP123HEA=基址寄存器内容基址寄存器内容+变址寄存器内容变址寄存器内容+位移量位移量(9)