《(精品)第三章 寻址方式及指系统 (1).ppt》由会员分享,可在线阅读,更多相关《(精品)第三章 寻址方式及指系统 (1).ppt(145页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章 寻址方式及指令系统寻址方式及指令系统授课教师:陈振华授课教师:陈振华Email:主要内容主要内容3.1基本概念基本概念3.2寻址方式寻址方式3.3指令系统指令系统3.4DOS中断调用和中断调用和BIOS中断调用中断调用3.1基本概念基本概念指令:指令:CPU可以理解并执行的命令可以理解并执行的命令;指令系统:某种指令系统:某种CPU所有指令的集合所有指令的集合;程序:为了解决某一问题而编写的有程序:为了解决某一问题而编写的有限指令序列限指令序列程序有三大特征:程序有三大特征:目的性目的性有限性有限性有序性。有序性。图图3.1程序执行流程图程序执行流程图指令的构成:操作码指令的构成
2、:操作码+操作数操作数 操作码:表示指令完成什么样的功能操作码:表示指令完成什么样的功能 操作数:指令的操作对象操作数:指令的操作对象 一般格式:一般格式:操作码操作码 操作数操作数,操作数操作数 ;注释注释指令可分为两个级别:机器级和汇编级指令可分为两个级别:机器级和汇编级机器指令:由机器指令:由2进制代码构成的可由进制代码构成的可由CPU直接理解并执行的指令;直接理解并执行的指令;汇编指令:机器指令符号化的结果,与机器指令是一一对应。汇编指令:机器指令符号化的结果,与机器指令是一一对应。指令的基本构成指令的基本构成8088指令系统概述指令系统概述8088指令系统共包含指令系统共包含92种基
3、本指令,分类如下:种基本指令,分类如下:按操作数的个数按操作数的个数按指令级别分为机器指令和汇编指令按指令级别分为机器指令和汇编指令按是否转移分为转移指令和顺序指令按是否转移分为转移指令和顺序指令按功能分为七大类按功能分为七大类按指令长度(即指令占用的字节数)按指令长度(即指令占用的字节数)按指令执行期间取操作数是否需要与总线打交道分为内部指按指令执行期间取操作数是否需要与总线打交道分为内部指令(不需)和外部指令(需要)令(不需)和外部指令(需要)8088指令按照功能分为指令按照功能分为6大类:大类:数据传送类数据传送类算术运算类算术运算类逻辑运算和移位逻辑运算和移位串操作串操作控制转移类控制
4、转移类处理器控制处理器控制8088CPU各类常用指令助记符各类常用指令助记符 操作数概述操作数概述操作数:指令的操作对象,分类如下:操作数:指令的操作对象,分类如下:根据操作数在指令中的位置分为第根据操作数在指令中的位置分为第1操作数和第操作数和第2操作数以及操作数以及隐含操作数。隐含操作数。根据操作数的作用分为源操作数(仅取出使用)和目的操作根据操作数的作用分为源操作数(仅取出使用)和目的操作数(用于存放结果)。数(用于存放结果)。根据操作数所对应的操作对象的字节数(也叫数据类型)分根据操作数所对应的操作对象的字节数(也叫数据类型)分为字节操作数为字节操作数(Byte)、字操作数、字操作数(
5、Word)、双字操作数、双字操作数(DoubleWord)、8字节操作数字节操作数(Octalbyets,LongWord)、十字节操作、十字节操作数数(TenBytes)。操作数根据寻址方式分类操作数根据寻址方式分类立即数立即数-立即寻址立即寻址寄存器操作数寄存器操作数-寄存器寻址寄存器寻址存储器操作数存储器操作数-储存器寻址储存器寻址I/O端口操作数端口操作数-端口寻址端口寻址8088的寻址方式:的寻址方式:如何找到操作数的方法如何找到操作数的方法寻址方式寻址方式立即寻址立即寻址寄存器寻址寄存器寻址端口寻址端口寻址直接寻址直接寻址储存器寻址储存器寻址间接间接基址变址基址变址相对基址变址相对
6、基址变址相对相对立即数寻址方式立即数寻址方式立即数:各种进制的常数、字符常数、符号常量、地址立即数:各种进制的常数、字符常数、符号常量、地址(段名、段名、段地址、偏移地址段地址、偏移地址)、常数表达式等。、常数表达式等。指令中的操作数为立即数,该立即数即为立即数寻址方式。指令中的操作数为立即数,该立即数即为立即数寻址方式。例例3.1:(以下第二操作数为立即寻址方式,:(以下第二操作数为立即寻址方式,MOV指令功能是将指令功能是将第二操作数送给第一操作数)第二操作数送给第一操作数)MOVAL,5;5为十进制为十进制字节字节常数常数MOVAX,5;5为十进制为十进制字字常数常数MOVAX,300H
7、;300H为为十六进制字十六进制字常数常数MOVCX,N;在此之前在此之前N已定义为常量已定义为常量MOVAX,DATA;DATA为段名为段名MOVAX,5+2*3;“5+2*311”为常数表达式为常数表达式注意!注意!立即数只能作为源操作数,不能作为目的操作数。立即数只能作为源操作数,不能作为目的操作数。立即数的数据类型可能是字节、也可能是字,由指令本身决定。立即数的数据类型可能是字节、也可能是字,由指令本身决定。如如3.1例中的第一条指令例中的第一条指令“MOVAL,5”中的中的5为字节,第二条指为字节,第二条指令令“MOVAX,5”中的中的5则为字。则为字。字节数据的取值范围为字节数据的
8、取值范围为-128+255,字数据的取值范围为,字数据的取值范围为-32768+65535。寄存器寻址方式寄存器寻址方式寄存器名寄存器名作为操作数的寻址方式叫寄存器寻址方式,操作对象实作为操作数的寻址方式叫寄存器寻址方式,操作对象实质上是寄存器中的内容。质上是寄存器中的内容。汇编指令所涉及的寄存器操作数共有汇编指令所涉及的寄存器操作数共有20个寄存器名。个寄存器名。l段寄存器(段寄存器(SR)有)有DS、ES、SS、CS四个,属于字类型;四个,属于字类型;l通用寄存器通用寄存器(UR)又分为又分为8位通用寄存器和位通用寄存器和16位通用寄存器,位通用寄存器,8位通用寄存器位通用寄存器(UR8)
9、有有AH、AL、BH、BL、CH、CL、DH、DL八个,属于字节类型;八个,属于字节类型;16位通用寄存器位通用寄存器(UR16)有有AX、BX、CX、DX、BP、SP、SI、DI八个,属于字八个,属于字类型。类型。例例3.2:(以下例子中第一、第二操作数均为寄存器寻址方:(以下例子中第一、第二操作数均为寄存器寻址方式)式)MOVAX,BXMOVDH,CLMOVDS,AX寄存器操作数的类型是由其名决定,不同类型的不能混用,寄存器操作数的类型是由其名决定,不同类型的不能混用,CS不能作为目的操作数,段寄存器只能在少许几条指令中不能作为目的操作数,段寄存器只能在少许几条指令中可以使用。可以使用。存
10、储器寻址方式存储器寻址方式操作数是操作对象在操作数是操作对象在内存中内存中的的存放地址存放地址的寻址方式叫存储器寻址的寻址方式叫存储器寻址方式,操作对象实质上是方式,操作对象实质上是内存地址内存地址所对应的存储单元中的内容。所对应的存储单元中的内容。段地址确定用哪个段地址确定用哪个段寄存器段寄存器,除非在指令中特别指定(即段超越,除非在指令中特别指定(即段超越,用段寄存器名加用段寄存器名加“:”),其它情况下均为默认的,如下表所示),其它情况下均为默认的,如下表所示(括号内代表可以使用的段超越)。(括号内代表可以使用的段超越)。存储器寻址方式存储器寻址方式根据形成根据形成EA的方法的方法将将存
11、储器寻址方式存储器寻址方式分为五种:分为五种:直接寻址方式直接寻址方式寄存器间接寻址方式寄存器间接寻址方式寄存器相对寻址方式寄存器相对寻址方式基址变址寻址方式基址变址寻址方式相对基址变址方式相对基址变址方式直接寻址方式直接寻址方式操作数在存储器中操作数在存储器中指令中直接包含有操作数的有效地址,即指令中直接包含有操作数的有效地址,即EA=n。主要有常数、。主要有常数、常量或常数表达式常量或常数表达式+以及变量名或变量名加减常量形成的以及变量名或变量名加减常量形成的表达式。表达式。默认的段地址在段寄存器默认的段地址在段寄存器DS中中可使用段超越可使用段超越例例3.3:(第二操作数为直接寻址方式:
12、(第二操作数为直接寻址方式)MOVAX,2000HMOVBX,N;N为常量名为常量名MOVCX,ES:2+3*5MOVDX,A;A为变量名为变量名MOVSI,寄存器间接寻址方式(简称间接寻址)寄存器间接寻址方式(简称间接寻址)操作数在存储器中操作数在存储器中操作数的有效地址在操作数的有效地址在BX、BP、SI、DI中,即中,即EAR。BP默认相对默认相对SS段,段,BX/SI/DI默认相对默认相对DS段。段。可使用段超越可使用段超越例:例:MOVAX,BXMOVBX,BPMOVSP,SS:DI相对寻址方式相对寻址方式操作数在存储器中操作数在存储器中有效地址有效地址=BX/BP/SI/DI+位移
13、量位移量位移量可以是常数、常量、常数表达式以及变量名等。位移量可以是常数、常量、常数表达式以及变量名等。可使用段超越可使用段超越基址变址寻址方式基址变址寻址方式操作数在存储器中操作数在存储器中操作数的有效地址由基址寄存器(操作数的有效地址由基址寄存器(BX或或BP)的内容和变址)的内容和变址寄存器(寄存器(SI或或DI)的内容相加得到)的内容相加得到BX基址寄存器对应的默认段寄存器是基址寄存器对应的默认段寄存器是DS,BP基址寄存器对基址寄存器对应的默认寄存器是应的默认寄存器是SS可使用段超越可使用段超越相对基址变址寻址方式相对基址变址寻址方式操作数在存储器中操作数在存储器中操作数的有效地址由
14、基址操作数的有效地址由基址寄存器(寄存器(BX或或BP)的内容)的内容和和变址寄变址寄存器(存器(SI或或DI)的内容)的内容及及指令中的位移量指令中的位移量相加得到相加得到BX基址寄存器对应的默认段寄存器是基址寄存器对应的默认段寄存器是DS,BP基址寄存器对应基址寄存器对应的默认寄存器是的默认寄存器是SS可使用段超越可使用段超越MOVAX,0250BXSIMOVAX,02050BX+SIMOVAX,BX+SI+0250H三者是等价三者是等价五种存储器寻址方式可用下图总结。五种存储器寻址方式可用下图总结。存储器操作数的类型可能是字节、字、双字等,可由另外一个操作数类型或存储器操作数的类型可能是
15、字节、字、双字等,可由另外一个操作数类型或定义的类型或指明的类型决定。类型可由定义的类型或指明的类型决定。类型可由BYTEPTR、WORDPTR、DWORD、PTR分别说明或强行指定。分别说明或强行指定。任一存储单元可采用五种存储器寻址方式任一种任一存储单元可采用五种存储器寻址方式任一种端口寻址方式端口寻址方式端口操作数指明端口的地址,端口地址所对应的端口中的内容才端口操作数指明端口的地址,端口地址所对应的端口中的内容才是操作对象,端口操作数只能出现在是操作对象,端口操作数只能出现在IN和和OUT指令。指令。端口地址:端口地址:1)常数(端口直接寻址方式);)常数(端口直接寻址方式);2)DX
16、寄存器(端口间接寻址方式)。寄存器(端口间接寻址方式)。端口直接寻址方式的端口寻址范围为端口直接寻址方式的端口寻址范围为0255(00HFFH),即一个字,即一个字节的地址值。节的地址值。端口间接寻址端口间接寻址DX的取值范围为的取值范围为065535(0000HFFFFH),很明,很明显当端口地址超出显当端口地址超出255时,只能先将地址送给时,只能先将地址送给DX,然后再用,然后再用DX间接间接寻址。寻址。例例3.8:INAX,41H;41H为端口直接寻址为端口直接寻址OUTDX,AL;DX为端口间接寻址为端口间接寻址转移指令的寻址方式转移指令的寻址方式 程序的顺序执行:指令指针程序的顺序
17、执行:指令指针IP会自动加会自动加1移向下一条指令,移向下一条指令,程序转移实质上是使指令指针指向待转移到的指令处。程序转移实质上是使指令指针指向待转移到的指令处。在在8088/86中,除了指令指针还会涉及到代码段寄存器中,除了指令指针还会涉及到代码段寄存器CS。CS:IP是控制程序执行流程的段地址:段内偏移。所以是控制程序执行流程的段地址:段内偏移。所以86系列微机中,系列微机中,转移指令实质上是对转移指令实质上是对CS:IP的值进行改变。的值进行改变。CS:IP值改变的方式就叫转移寻址方式。值改变的方式就叫转移寻址方式。具体过程参看具体过程参看“转移指令转移指令”3.3指令系统指令系统80
18、88指令按功能可分为指令按功能可分为7大类大类1.数据传送指令数据传送指令2.算术运算指令算术运算指令3.逻辑运算和移位指令(位运算类指令)逻辑运算和移位指令(位运算类指令)4.串操作指令串操作指令5.程序控制指令程序控制指令6.处理器控制指令处理器控制指令7.I/O类指令类指令指令合法性判断指令合法性判断数据类型方面。如数据类型是否匹配、是否明确。数据类型方面。如数据类型是否匹配、是否明确。两数数据类型均明确,则必须一致;两数数据类型均明确,则必须一致;两数数据类型均不明确,则必须进行类型说明两数数据类型均不明确,则必须进行类型说明(用用BYTEPTR或或WORDPTR);两数数据类型一方明
19、确,一方不明确,则一定匹配,不明确方两数数据类型一方明确,一方不明确,则一定匹配,不明确方按明确方处理。(举例说明)按明确方处理。(举例说明)书写格式方面。如单词拼写、标点符号、间隔等书写格式方面。如单词拼写、标点符号、间隔等寻址方式方面。如操作数的寻址方式是否合法、两操作数寻址寻址方式方面。如操作数的寻址方式是否合法、两操作数寻址方式是否相匹配。方式是否相匹配。英文缩写含义英文缩写含义SR:段寄存器:段寄存器N:立即数立即数F:标志位标志位UR:通用寄存器:通用寄存器UR8:8位通用寄存器,位通用寄存器,UR16:16位通用寄存器位通用寄存器M或或EA:存储器操作数:存储器操作数B:字节,字
20、节,W:字,:字,DW:双字:双字DST:目的操作数,:目的操作数,SRC:源操作数:源操作数OD:操作数操作数通用数据传送类指令通用数据传送类指令注意:栈操作都是对注意:栈操作都是对“字字”的操作的操作基本传送类指令基本传送类指令一般传送只有一条指令即一般传送只有一条指令即MOV(赋值)指令。(赋值)指令。MOV指令的六个方面如下:指令的六个方面如下:助助记记符符MOV基本格式基本格式MOVDST,SRC数据类型数据类型B/W寻址方式寻址方式见左图见左图功功能能:将第二操作数送给将第二操作数送给第一操作数,第一操作数,即:即:DSTSRC对对F影响影响 无无NUR(特别注意数据表示范围)(特
21、别注意数据表示范围)例例3.9:MOVAL,80;AL8050HMOVAX,80;AX800050HMOVBX,1200MOVCX,N;N为常量为常量MOVAX,DATA;DATA为段名,段名代表段的段地址为段名,段名代表段的段地址错:错:MOVCL,300;数据;数据300超出字节表示范围超出字节表示范围NM(特别注意类型要明确)(特别注意类型要明确)例例3.10:MOVA,8;A为变量名,为变量名,8的类型由的类型由A的变量类型决定的变量类型决定MOVBYTEPTRBX,8;字节传送;字节传送,如图如图3.5左左MOVWORDPTRBX,8;字传送,如图;字传送,如图3.5右右错:错:MO
22、VSI,8;类型不明确;类型不明确图图3.6字节字节/字操作的不同字操作的不同URUR(特别注意类型要匹配)(特别注意类型要匹配)例例3.11:MOVAL,AHMOVBH,DLMOVSP,AXMOVCX,CX错:错:MOVCX,BL;类型不匹配;类型不匹配URSR例例3.12:MOVDS,AXMOVES,DX错:错:MOVCS,AX;CS不能作为目的操作数不能作为目的操作数错:错:MOVSS,CL;CL为字节类型,类型不匹配为字节类型,类型不匹配(特别注意(特别注意CS不能作为目的操作数及类型要匹配)不能作为目的操作数及类型要匹配)URM类型由类型由UR决定,若变量与决定,若变量与UR类型不一
23、致,则需类型转换类型不一致,则需类型转换例例3.13:MOV20H,ALMOVBX,BXMOVES:BP,CXMOVA,DX;A为字变量为字变量错:错:MOVA,DL;A为字变量,应为上句或为字变量,应为上句或MOVBYTEPTRA,DLSRURSRMSRUR(特别注意类型要匹配)(特别注意类型要匹配)例例3.14:MOVAX,CSMOVBX,SS错:错:MOVCL,DS;类型不匹配类型不匹配SRM例:(例:(M的类型必须为字)的类型必须为字)例例3.15:MOVCS:BX,DSMOVBP,SS错:错:MOVB,CS;若若B为字节变量,则类型不匹配为字节变量,则类型不匹配MURMSRMUR例:
24、(类似于例:(类似于URM,只是方向相反),只是方向相反)例例3.16:MOVAL,20HMOVBX,BXMSR例:(类似于例:(类似于SRM,只是方向相反,而且,只是方向相反,而且SR不不能是能是CS)例例3.17:MOVDS,SS:20HMOVSS,BP注意:注意:N不能送给不能送给SR、SR不能送给不能送给SR、M不能送给不能送给M。错:错:MOVDS,1000H,错:错:MOVDS,CS,错:错:MOVA,B;A、B均为变量,变量实质是存储器的直接寻址方式。均为变量,变量实质是存储器的直接寻址方式。错:错:MOVAX,CX等不能随便用某一数据加实现存储器寻址。操作数等不能随便用某一数据
25、加实现存储器寻址。操作数的寻址方式实质上是指令可以操作的数据形式。的寻址方式实质上是指令可以操作的数据形式。不能直接赋值时可通过间接赋值来实现。不能直接赋值时可通过间接赋值来实现。例例3.18:MOVAX,DATAMOVDS,AX;实现将实现将DATA段地址送段地址送DSMOVAX,CSMOVDS,AX;实现将实现将CS送送DSMOVAL,AMOVB,AL;A、B为字节变量,实现将为字节变量,实现将A的值送给的值送给B交换传送交换传送XCHG(互换互换)和和XLAT(换码换码)XCHG指令的六个方面如下:指令的六个方面如下:助助记记符符XCHG基本格式基本格式XCHGOD1,OD2数据类型数据
26、类型B/W寻址方式寻址方式功功能:将第二操作数与第一操作数的值互换,即能:将第二操作数与第一操作数的值互换,即OD1OD2对对F影响:影响:无无XCHGAX,BX可以用可以用MOV代替如下:代替如下:MOVCX,AXMOVAX,BXMOVBX,CX寻址方式寻址方式根据根据XCHG的寻址方式,可见的寻址方式,可见SR不能参加互换、立即数不能不能参加互换、立即数不能参加互换、参加互换、M与与M不能互换,不能互换,互换指令至少一端操作数为通互换指令至少一端操作数为通用寄存器,另一端为寄存器或存储器操作数。用寄存器,另一端为寄存器或存储器操作数。例例3.20:XCHGAX,BXXCHGAL,AHXCH
27、GCL,BXXCHGDI,DX3.21:AB(A、B为字节变量)为字节变量)MOVAL,AXCHGAL,BMOVA,ALXLAT指令指令助助记记符符XLAT基本格式基本格式XLAT代码表的起始地址代码表的起始地址数据类型隐含数据类型隐含寻址方式隐含寻址方式隐含功功能能(BXAL)AL对对F影响影响无无实际使用时用实际使用时用BX指向待转换代码指向待转换代码表的起始地址,而且表的起始地址,而且AL为代码表为代码表的第几个的序号,然后才使用的第几个的序号,然后才使用XLAT指令实现换码。即:指令实现换码。即:MOV BX,OFFSET码表码表;将码表的首地址送;将码表的首地址送BXMOV AL,序
28、号,序号;将需转换的第几个送;将需转换的第几个送ALXLAT;将;将DS:(BX+AL)对应存储单元内容送对应存储单元内容送AL堆栈传送堆栈传送PUSH(进栈)和(进栈)和POP(出栈)。(出栈)。基本方法是:先进后出、后进先出。在程序调用、中断调用的子基本方法是:先进后出、后进先出。在程序调用、中断调用的子程序中一般使用程序中一般使用PUSH和和POP指令实现现场信息的保护及恢复。指令实现现场信息的保护及恢复。PUSH:助助记记符符PUSH基本格式基本格式PUSHSRC数据类型数据类型W,只能为字操作,只能为字操作寻址方式寻址方式SRC可以为可以为SR、UR16、M16功功能能将将SRC的内
29、容压入栈顶,的内容压入栈顶,即即:SPSP-2,SRC(SP)对对F影响无影响无PUSH指令只能是字操作,立即数不能进栈。指令只能是字操作,立即数不能进栈。例例3.22:合法的例子如下:合法的例子如下:PUSHCSPUSHBXPUSHA;A为字变量为字变量PUSHWORDPTRBXPUSHBX;一定为字操作,所以类型说明可省略;一定为字操作,所以类型说明可省略非法的例子如下:非法的例子如下:PUSHAL;字节不能进栈;字节不能进栈PUSHB;若;若B为字节变量,则不对为字节变量,则不对PUSH1000H;立即数不能进栈;立即数不能进栈POP指令指令助助记记符符POP基本格式基本格式POPDST
30、数据类型数据类型W,只能为字操作,只能为字操作寻址方式寻址方式DST可以为可以为SR(除(除CS外)、外)、UR16、M16功功能能将栈顶元素出栈给将栈顶元素出栈给DST,即,即(SP)DST,SPSP+2,对对F影响影响无无POP指令只能是字操作,立即数、指令只能是字操作,立即数、CS不能作为目的操作数不能作为目的操作数例例3.23:合法的例子如下:合法的例子如下:POPDSPOPBXPOPA;A为字变量为字变量POPWORDPTRBXPOPBX;一定为字操作,所以类型说明可省略一定为字操作,所以类型说明可省略非法的例子如下:非法的例子如下:POPAL;字节不能出栈字节不能出栈POPB;若若
31、B为字节变量,则不对为字节变量,则不对POPCS;CS不能作为出栈对象不能作为出栈对象用用PUSH和和POP的组合也可实现两数的互换,例如实现的组合也可实现两数的互换,例如实现AX与与BX的互换可用以下指令序列的互换可用以下指令序列:例例3.24:(互换原理如图:(互换原理如图3.6所示)所示)PUSHAX;PUSHBX;POPAX;POPBX;图图3.6堆栈操作示意图堆栈操作示意图AXBXSPSP地址传送指令地址传送指令LEA指令指令LEA指令:有效地址送寄存器指令指令:有效地址送寄存器指令助助记记符符LEA基本格式基本格式LEAUR16,EA数据类型隐含数据类型隐含寻址方式包含在基本格式中
32、寻址方式包含在基本格式中功功能能将第二操作数存储器操作数的偏移地将第二操作数存储器操作数的偏移地址送给第一操作数指定的址送给第一操作数指定的16位通用寄位通用寄存器,即存器,即EAUR16。对对F影响影响无无LEA指令可以使某一地址寄存器(指令可以使某一地址寄存器(BX/BP/SI/DI)指向某一)指向某一存储单元。存储单元。例例3.25:LEABX,TABLE;BX指向指向TABLE,即,即TABLE的偏移地址送的偏移地址送BXLEASI,2000H;SI2000H,与,与MOVSI,2000H等价等价LEADI,BP;DIBP,与,与MOVDI,BP等价等价LDS/LESLDS与与LES很
33、类似,二者联合讲解,指令的六个方面:很类似,二者联合讲解,指令的六个方面:助助记记符符LDS/LES基本格式基本格式LDS/LESUR16,EA数据类型隐含数据类型隐含寻址方式包含在基本格式中寻址方式包含在基本格式中功功能能将存储器操作数的第一字送给第一操作数指定将存储器操作数的第一字送给第一操作数指定的的16位通用寄存器,并将存储器操作数的第二位通用寄存器,并将存储器操作数的第二字送给操作码部分指明的段寄存器字送给操作码部分指明的段寄存器DS/ES。即:(即:(EA)UR16,(,(EA2)DS/ES。对对F影响无影响无BXDSSIDSLDSBX,SI的功能的功能LDS/LES不但使指定的通
34、用寄存器值发生变化,不但使指定的通用寄存器值发生变化,而且而且DS/ES也会发生变化。也会发生变化。例如:例如:LDSBX,SI;BX(SI),),DS(SI2),),其功能示意图。其功能示意图。标志传送指令标志传送指令LAHF/SAHF指令指令助助记记符符LAHF/SAHF基本格式基本格式LAHF/SAHF数据类型隐含数据类型隐含寻址方式隐含寻址方式隐含功功能能PSW低低8位位AH/AHPSW低低8位位对对F影响除影响除OF外的其余外的其余5个状态标志个状态标志SF、ZF、AF、PF和和CF,AH的对应位去填充各标志位。的对应位去填充各标志位。SF ZFAFPFCF01234567AH图图3
35、.8LAHF的功能的功能SF ZFAFPFCF01234567AH图图3.9SAHF的功能的功能PUSHF/POPF指令指令助助记记符符PUSHF/POPF基本格式基本格式 PUSHF/POPF数据类型隐含数据类型隐含寻址方式隐含寻址方式隐含功功能能SPSP-2,PSW(SP)/(SP)PSW,SPSP2对对F影响无影响无/影响影响所有状态标志(所有状态标志(SF、ZF、AF、PF、OF和和CF)及所有控制)及所有控制标志(标志(IF、TF和和DF),弹出的栈顶元素对应位去填充各标),弹出的栈顶元素对应位去填充各标志位。志位。PSW的各位含义如下:的各位含义如下:151413121110987
36、6543210XXXXOFDFIFTFSFZFXAFXPFXCFPUSHF/POPF指令主要用于标志位的保存和恢复,指令主要用于标志位的保存和恢复,PUSHF用于保存所有标志位到栈中,用于保存所有标志位到栈中,POPF用于从栈中恢复所有标用于从栈中恢复所有标志位。它们是利用堆栈保存和恢复,相对于志位。它们是利用堆栈保存和恢复,相对于LAHF/SAHF而而言速度较慢,所以在只需保存和恢复除言速度较慢,所以在只需保存和恢复除OF外的外的5个状态标志个状态标志则最好使用则最好使用LAHF/SAHF。标志传送举例标志传送举例例例3.26设置设置SF=1,ZF=0,AF=0,PF=1,CF=0。分析:要
37、置分析:要置5个状态标志位可用个状态标志位可用SAHF指令,先按对应位填充指令,先按对应位填充一个立即数送一个立即数送AH,再用,再用SAHF实现将实现将AH送送PSW的低的低8位。位。解:解:MOVAH,10000100B;无关位一般填无关位一般填0,即,即84HSAHF例例3.27设置设置OF=1,DF=0,IF=1,TF=0,SF=1,ZF=0,AF=0,PF=1,CF=0。分析:要置分析:要置9个状态标志位可用个状态标志位可用POPF指令,先按对应位填充一个指令,先按对应位填充一个立即数送立即数送AX,再将,再将AX进栈,而后再用进栈,而后再用POPF实现将栈顶元素出实现将栈顶元素出栈
38、送栈送PSW,即,即NAX栈栈PSW。解:解:MOVAX,000010101010100B;无关位一般填;无关位一般填0,即,即0A84HPUSHAXPOPF算术运算类指令(算术运算类指令(2020条)条)算术运算类指令算术运算类指令可分为三小类:可分为三小类:加减运算加减运算乘除运算乘除运算BCD修正修正加减法指令加减法指令加减指令可分为两类加减指令可分为两类一种分类方法是分为单目运算和双目运算一种分类方法是分为单目运算和双目运算单目运算指令有三条,即单目运算指令有三条,即INC(加(加1)、)、DEC(减(减1)、)、NEG(求补),这三条指令的六个方面如下:(求补),这三条指令的六个方面
39、如下:助助记记符符INC/DEC/NEG基本格式基本格式INC/DEC/NEGOD数据类型数据类型B/W寻址方式寻址方式OD可以为可以为UR及及M功功能能OD=OD+1/OD=OD-1/OD=0-OD对对F影响影响INC、DEC对标志位影响是相同的,除对对标志位影响是相同的,除对CF标志位无影响外,对其余标志位无影响外,对其余5个状态标志位均有影响;个状态标志位均有影响;NEG对对6个状态标志位均有影响。个状态标志位均有影响。减法运算指令减法运算指令INC指令用于使某数加指令用于使某数加1后送回,后送回,DEC指令用于使某数减指令用于使某数减1后送后送回,回,NEG指令是对某数求补(即正变负,
40、负变正)后回送(注指令是对某数求补(即正变负,负变正)后回送(注意:不是求补码)。意:不是求补码)。例例3.26:INCBX;BXBX1DECAL;ALAL-1INCBYTEPTRBX;DS:BX对应的内存字节对应的内存字节单元加单元加1DECWORDPTRBP;SS:BP对应的内存字单对应的内存字单元减元减1NEGDL;DL-DL,设,设DL原始值为原始值为5,则执行,则执行后后DL为为-5,即即FBH(为(为-5的补码),的补码),SF1,PF0,ZF0,OF0,CF1,AF1。单目运算指令的应用单目运算指令的应用可用负数的绝对值求补得到这个负数的补码。负数的补码可用负数的绝对值求补得到这
41、个负数的补码。负数的补码0-此此数的绝对值此数绝对值求补。(补码的快速求解方法)数的绝对值此数绝对值求补。(补码的快速求解方法)NEG求补指令只有当对求补指令只有当对80H(8位位)或或8000H(16位位)求补时求补时OF1,其它情况下其它情况下OF0;只有当对只有当对0求补时求补时CF0,其它情况下,其它情况下CF1。INC加加1指令只是当对指令只是当对7FH或或7FFFH加加1时时OF=1。DEC减减1指令只是当对指令只是当对80H或或8000H减减1时时OF=1。例例3.29理解下面的程序段,并填充结果。理解下面的程序段,并填充结果。;设设CF=0MOVAL,0MOVAH,1DECAL
42、;AX=H,CF=。分析:主要要理解分析:主要要理解AL、AH、AX三者之间的关系及三者之间的关系及DEC对对CF无影响。无影响。解:解:AL=00H-1=FFH,CF不变,不变,AH=01H,所以,所以AX=01FFH,CF=0。双目运算指令(双目运算指令(5条)条)即即ADD(加加)、ADC(带带CF加加)、SUB(减减)、SBB(带带CF减减)、CMP(比较比较)。这五条指令的六个方面如下:。这五条指令的六个方面如下:助助记记符符ADD/ADC/SUB/SBB/CMP基本格式基本格式ADD/ADC/SUB/SBB/CMPDST,SRC功功能能DST=DST+SRC/DST=DST+SRC
43、+CF/DST=DST-SRC/DST=DST-SRC-CF/DST-SRC数据类型数据类型B/W寻址方式寻址方式对对F影响影响这这5条指令对条指令对6个状态标志位均有影响。影响的填个状态标志位均有影响。影响的填充方法按通用填充方法填充。充方法按通用填充方法填充。例例3.30:ADDAX,BX;AXAXBX设指令执行前设指令执行前AX35C9H,BX726DH,则执行后,则执行后AXA836H,BX不不变,变,SF=1,PF=1,ZF=0,OF=1,CF=0,AF=1例例3.31:ADCBH,DL;BHBHDLCF设指令执行前设指令执行前BH96H,DL6DH,CF=1,则执行后,则执行后BH
44、04H,DL不变,不变,SF=0,PF=0,ZF=0,OF=0,CF=1,AF=1例例3.32:SUBCX,BX;CXCX-(BX),字操作,字操作设指令执行前设指令执行前CX1296H,DS2000H,BX100H,(,(20100H)3DH,(20101H)28H,则(,则(BX)283DH,执行后,执行后CX0EA59H,BX、(BX)不变,)不变,SF=1,PF=1,ZF=0,OF=0,CF=1,AF=1无符号数及有符号数的溢出判断无符号数及有符号数的溢出判断无符号数、有符号数的加减运算指令相同。无符号数、有符号数的加减运算指令相同。判断是否溢出是不同的:判断是否溢出是不同的:无符号数
45、用无符号数用CF判断,判断,CF1溢出,否则未溢出;溢出,否则未溢出;有符号数用有符号数用OF判断,判断,OF1溢出,否则未溢出。溢出,否则未溢出。CMP指令主要用于两个数大小比较,无符号数和有符号数的大小指令主要用于两个数大小比较,无符号数和有符号数的大小关系比较所用的标志位是不同的。关系比较所用的标志位是不同的。设设A、B为为CMP指令可以使用的第一操作数和第二操作数。指令可以使用的第一操作数和第二操作数。无符号数的大小关系相对简单:无符号数的大小关系相对简单:AB,即,即A够减够减B,则,则CF0且且ZF0;AB,则,则ZF1;AB,即,即A不够减不够减B,则,则CF1。有符号数的八种情
46、况(设为有符号数的八种情况(设为8位有符号二进制数补码):位有符号二进制数补码):正比正(如正比正(如5,3),),AB;正比正(如正比正(如3,5),),AB;负比负(如负比负(如-3,-5),),AB;负比负(如负比负(如-5,-3),),AB;正比负(如正比负(如5,-3),不会溢出,),不会溢出,AB;正比负正比负(如如80,-100),会溢出,会溢出,AB;负比正(如负比正(如-5,3),不会溢出,),不会溢出,AB;负比正负比正(如如-80,100),会溢出,会溢出,AB。并对并对8种情况下的种情况下的SF、OF进行填充,最后得出结论。在此直接给进行填充,最后得出结论。在此直接给出
47、结论:出结论:AB,SF OF0且且ZF0;AB,ZF1;AB,SF OF1。比较指令举例比较指令举例例例3.35理解下面的程序段,并填充结果。理解下面的程序段,并填充结果。MOV AX,爱爱MOV BX,AICMP AX,BX;SF OF=,CF=。分析:主要要理解分析:主要要理解ASCII码、汉字内码,以及无符号数、有符号数的大小比码、汉字内码,以及无符号数、有符号数的大小比较。较。ASCII码最高位为码最高位为0,汉字内码最高位为,汉字内码最高位为1,所以作为无符号数汉字比英,所以作为无符号数汉字比英文字符大,作为有符号数汉字比英文字符要小。文字符大,作为有符号数汉字比英文字符要小。解:
48、解:SF OF=1,CF=0。乘除法运算指令乘除法运算指令乘法指令乘法指令助助记记符符MUL/IMUL基本格式基本格式MUL/IMULSRC数据类型数据类型B/WSRC的数的数据类型据类型被乘数隐被乘数隐含含结果送寻址方式寻址方式标志位填充标志位填充字节字节ALAXSRC只能只能是是UR或或M,不能为,不能为N或或SR字节乘未超过字节范字节乘未超过字节范围或字乘未超过字范围或字乘未超过字范围围则则CF0、OF0否则否则CF1、OF1。字字AXDX保存高保存高16位位AX保存低保存低16位位1)隐含操作数:)隐含操作数:被乘数一定为被乘数一定为AL或或AX,积为,积为AX或或DX&AX,不需在指
49、令中,不需在指令中另行指明;另行指明;2)对)对CF、OF的填充:的填充:无符号数只要判断高位段是否为全无符号数只要判断高位段是否为全0,若是则未超出范围,有,若是则未超出范围,有符号数只要判断高位段是否为低位的符号位扩展,若是则未超符号数只要判断高位段是否为低位的符号位扩展,若是则未超出范围;出范围;3)模拟计算:)模拟计算:无符号数直接相乘即可,有符号数则需先用绝对值相乘,而后无符号数直接相乘即可,有符号数则需先用绝对值相乘,而后再加符号位(同号得正、异号得负)。再加符号位(同号得正、异号得负)。注意!注意!模拟计算模拟计算例例3.36:若:若AL为为05H、BL为为F7H则则MULBL指
50、令执行后指令执行后AX?CF、OF?无符号数乘法直接相乘,无符号数乘法直接相乘,AX 05*F7H04D3H、CF1、OF1。例例3.37:若:若AL为为05H、BL为为F7H则则IMULBL指令执行后指令执行后AX、CF、OF?有符号数乘法先用绝对值相乘、再加符号位,有符号数乘法先用绝对值相乘、再加符号位,AX-(05*09H)-2DHFFD3H、CF0、OF0。除法指令除法指令助助记记符符DIV/IDIV基本格式基本格式DIV/IDIVSRC数据类型数据类型B/WSRC的数的数据类型据类型被除数隐被除数隐含含结果送寻址方式寻址方式标志位填充标志位填充字节字节AX商送商送AL、余数、余数送送