资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章 寻址方式及指令系统,授课教师:陈振华,Email,:,zhenhuachen,主要内容,3.1,基本概念,3.2,寻址方式,3.3,指令系统,3.4 DOS,中断调用和,BIOS,中断调用,3.1,基本概念,指令:,CPU,可以理解并执行的命令,;,指令系统:某种,CPU,所有指令的集合,;,程序:为了解决某一问题而编写的有,限指令序列,程序有三大特征:,目的性,有限性,有序性。,图,3.1,程序执行流程图,指令的构成:操作码,+,操作数,操作码:表示指令完成什么样的功能,操作数:指令的操作对象,一般格式:操作码,操作数,操作数,;,注释,指令可分为两个级别:机器级和汇编级,机器指令:由,2,进制代码构成的可由,CPU,直接理解并执行的指令;,汇编指令:机器指令符号化的结果,与机器指令是一一对应。,指令的基本构成,8088,指令系统概述,8088,指令系统共包含,92,种基本指令,分类如下:,按操作数的个数,按指令级别分为机器指令和汇编指令,按是否转移分为转移指令和顺序指令,按功能分为七大类,按指令长度(即指令占用的字节数),按指令执行期间取操作数是否需要与总线打交道分为内部指令(不需)和外部指令(需要),8088,指令按照功能分为,6,大类:,数据传送类,算术运算类,逻辑运算和移位,串操作,控制转移类,处理器控制,8088CPU,各类常用指令助记符,操作数概述,操作数:指令的操作对象,分类如下:,根据操作数在指令中的位置分为第,1,操作数和第,2,操作数以及隐含操作数。,根据操作数的作用分为源操作数(仅取出使用)和目的操作数(用于存放结果)。,根据操作数所对应的操作对象的字节数(也叫数据类型)分为字节操作数,(Byte),、字操作数,(Word),、双字操作数,(Double Word),、,8,字节操作数,(Octal,byets,Long Word),、十字节操作数,(Ten Bytes),。,操作数根据寻址方式分类,立即数,-,立即寻址,寄存器操作数,-,寄存器寻址,存储器操作数,-,储存器寻址,I/O,端口操作数,-,端口寻址,8088,的寻址方式:,如何找到操作数的方法,寻址方式,立即寻址,寄存器寻址,端口寻址,直接寻址,储存器寻址,间接,基址变址,相对基址变址,相对,立即数寻址方式,立即数:各种进制的常数、字符常数、符号常量、地址,(,段名、段地址、偏移地址,),、常数表达式等。,指令中的操作数为立即数,该立即数即为立即数寻址方式。,例,3.1,:(以下第二操作数为立即寻址方式,,MOV,指令功能是将第二操作数送给第一操作数),MOV,AL,,,5,;5,为十进制,字节,常数,MOV,AX,,,5,;5,为十进制,字,常数,MOV AX,300H ;300H,为,十六进制字,常数,MOV,CX,,,N,;,在此之前,N,已定义为常量,MOV,AX,,,DATA,;DATA,为段名,MOV,AX,,,5+2*3 ;“5+2*3,11”,为常数表达式,注意!,立即数只能作为源操作数,不能作为目的操作数。,立即数的数据类型可能是字节、也可能是字,由指令本身决定。,如,3.1,例中的第一条指令“,MOV,AL,,,5”,中的,5,为字节,第二条指令“,MOV,AX,,,5”,中的,5,则为字。,字节数据的取值范围为,-128,+255,,字数据的取值范围为,-32768,+65535,。,寄存器寻址方式,寄存器名,作为操作数的寻址方式叫寄存器寻址方式,操作对象实质上是寄存器中的内容。,汇编指令所涉及的寄存器操作数共有,20,个寄存器名。,段寄存器(,SR,)有,DS,、,ES,、,SS,、,CS,四个,属于字类型;,通用寄存器,(UR),又分为,8,位通用寄存器和,16,位通用寄存器,,8,位通用寄存器,(UR8),有,AH,、,AL,、,BH,、,BL,、,CH,、,CL,、,DH,、,DL,八个,属于字节类型;,16,位通用寄存器,(UR16),有,AX,、,BX,、,CX,、,DX,、,BP,、,SP,、,SI,、,DI,八个,属于字类型。,例,3.2,:(以下例子中第一、第二操作数均为寄存器寻址方式),MOV,AX,,,BX,MOV,DH,,,CL,MOV,DS,,,AX,寄存器操作数的类型是由其名决定,不同类型的不能混用,,CS,不能作为目的操作数,段寄存器只能在少许几条指令中可以使用。,存储器寻址方式,操作数是操作对象在,内存中,的,存放地址,的寻址方式叫存储器寻址方式,操作对象实质上是,内存地址,所对应的存储单元中的内容。,段地址确定用哪个,段寄存器,,除非在指令中特别指定(即段超越,用段寄存器名加“,:”,),其它情况下均为默认的,如下表所示(括号内代表可以使用的段超越)。,存储器寻址方式,根据形成,EA,的方法,将,存储器寻址方式,分为五种:,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址方式,直接寻址方式,操作数在存储器中,指令中直接包含有操作数的有效地址,即,EA=n,。主要有常数、常量或常数表达式,+,以及变量名或变量名加减常量形成的表达式。,默认的段地址在段寄存器,DS,中,可使用段超越,例,3.3,:(第二操作数为直接寻址方式,),MOV,AX,,,2000H,MOV BX,N,;,N,为常量名,MOV,CX,,,ES,:,2+3*5,MOV DX,A,;,A,为变量名,MOV,SI,,,寄存器间接寻址方式(简称间接寻址),操作数在存储器中,操作数的有效地址在,BX,、,BP,、,SI,、,DI,中,即,EA,R,。,BP,默认相对,SS,段,,BX/SI/DI,默认相对,DS,段。,可使用段超越,例:,MOV AX,BX,MOV BX,BP,MOV SP,SS:DI,相对寻址方式,操作数在存储器中,有效地址,=BX/BP/SI/DI+,位移量,位移量可以是常数、常量、常数表达式以及变量名等。,可使用段超越,基址变址寻址方式,操作数在存储器中,操作数的有效地址由基址寄存器(,BX,或,BP,)的内容和变址寄存器(,SI,或,DI,)的内容相加得到,BX,基址寄存器对应的默认段寄存器是,DS,,,BP,基址寄存器对应的默认寄存器是,SS,可使用段超越,相对基址变址寻址方式,操作数在存储器中,操作数的有效地址由基址,寄存器(,BX,或,BP,)的内容,和,变址寄存器(,SI,或,DI,)的内容,及,指令中的位移量,相加得到,BX,基址寄存器对应的默认段寄存器是,DS,,,BP,基址寄存器对应的默认寄存器是,SS,可使用段超越,MOV AX,0250BXSI,MOV AX,02050BX+SI,MOV AX,BX+SI+0250H,三者是等价,五种存储器寻址方式可用下图总结。,存储器操作数的类型可能是字节、字、双字等,可由另外一个操作数类型或,定义的类型或指明的类型决定。类型可由,BYTE,PTR,、,WORD,PTR,、,DWORD,、,PTR,分别说明或强行指定。,任一存储单元可采用五种存储器寻址方式任一种,端口寻址方式,端口操作数指明端口的地址,端口地址所对应的端口中的内容才是操作对象,端口操作数只能出现在,IN,和,OUT,指令。,端口地址:,1,)常数(端口直接寻址方式);,2,),DX,寄存器(端口间接寻址方式)。,端口直接寻址方式的端口寻址范围为,0255(00HFFH),,即一个字节的地址值。,端口间接寻址,DX,的取值范围为,065535(0000HFFFFH),,很明显当端口地址超出,255,时,只能先将地址送给,DX,,然后再用,DX,间接寻址。,例,3.8,:,IN,AX,,,41H,;,41H,为端口直接寻址,OUT,DX,,,AL,;,DX,为端口间接寻址,转移指令的寻址方式,程序的顺序执行:指令指针,IP,会自动加,1,移向下一条指令,,程序转移实质上是使指令指针指向待转移到的指令处。,在,8088/86,中,除了指令指针还会涉及到代码段寄存器,CS,。,CS,:,IP,是控制程序执行流程的段地址:段内偏移。所以,86,系列微机中,转移指令实质上是对,CS,:,IP,的值进行改变。,CS,:,IP,值改变的方式就叫转移寻址方式。,具体过程参看“转移指令”,3.3,指令系统,8088,指令按功能可分为,7,大类,1.,数据传送指令,2.,算术运算指令,3.,逻辑运算和移位指令(位运算类指令),4.,串操作指令,5.,程序控制指令,6.,处理器控制指令,7.I/O,类指令,指令合法性判断,数据类型方面。如数据类型是否匹配、是否明确。,两数数据类型均明确,则必须一致;,两数数据类型均不明确,则必须进行类型说明,(,用,BYTE PTR,或,WORD PTR),;,两数数据类型一方明确,一方不明确,则一定匹配,不明确方按明确方处理。(举例说明),书写格式方面。如单词拼写、标点符号、间隔等,寻址方式方面。如操作数的寻址方式是否合法、两操作数寻址方式是否相匹配。,英文缩写含义,SR,:段寄存器,N,:立即数,F,:标志位,UR,:通用寄存器,UR,8,:,8,位通用寄存器,,UR,16,:,16,位通用寄存器,M,或,EA,:存储器操作数,B,:字节,,W,:字,,DW,:双字,DST,:目的操作数,,SRC,:源操作数,OD,:操作数,通用数据传送类指令,注意:栈操作都是对“字”的操作,基本传送类指令,一般传送只有一条指令即,MOV,(赋值)指令。,MOV,指令的六个方面如下:,助 记 符,MOV,基本格式,MOV,DST,,,SRC,数据类型,B/W,寻址方式 见左图,功 能,:,将第二操作数送给 第一操作数,,即:,DSTSRC,对,F,影响 无,NUR,(特别注意数据表示范围),例,3.9,:,MOV,AL,,,80,;,AL,80,50H,MOV,AX,,,80,;,AX,80,0050H,MOV,BX,,,1200,MOV,CX,,,N,;,N,为常量,MOV,AX,,,DATA,;,DATA,为段名,段名代表段的段地址,错:,MOV,CL,,,300,;数据,300,超出字节表示范围,NM,(特别注意类型要明确),例,3.10,:,MOV,A,,,8,;,A,为变量名,,8,的类型由,A,的变量类型决定,MOV,BYTE PTR BX,8,;字节传送,如图,3.5,左,MOV WORD PTR BX,8,;字传送,如图,3.5,右,错:,MOV,SI,,,8,;类型不明确,图,3.6,字节,/,字操作的不同,URUR,(特别注意类型要匹配),例,3.11,:,MOV,AL,,,AH,MOV,BH,,,DL,MOV,SP,,,AX,MOV,CX,,,CX,错:,MOV,CX,,,BL,;类型不匹配,URSR,例,3.12,:,MOV,DS,AX,MOV,ES,DX,错:,MOV,CS,AX,;CS,不能作为目的操作数,错:,MOV,SS,CL,;CL,为字节类型,类型不匹配,(特别注意,CS,不能作为目的操作数及类型要匹配),URM,类型由,UR,决定,若变量与,UR,类型不一致,则需类型转换,例,3.13,:,MOV,20H,AL,MOV,BX,BX,MOV,ES:BP,CX,MOV,A,DX,;A,为字变量,错:,MOV,A,DL,;,A,为字变量,应为上句或,MOV BYTE,PTR A,DL,SRUR SRM,SRUR,(特别注意类型要匹配),例,3.14,:,MOV,AX,CS,MOV,BX,SS,错:,MOV,CL,DS,;,类型不匹配,SRM,例:(,M,的类型必须为字),例,3.15,:,MOV,CS:BX,DS,MOV,BP,SS,错:,MOV,B,CS,;,若,B,为字节变量,则类型不匹配,MUR MSR,MUR,例:(类似于,URM,,只是方向相反),例,3.16,:,MOV,AL,20H,MOV BX,BX,MSR,例:(类似于,SRM,,只是方向相反,而且,SR,不能是,CS,),例,3.17,:,MOV,DS,SS:20H,MOV,SS,BP,注意:,N,不能送给,SR,、,SR,不能送给,SR,、,M,不能送给,M,。,错:,MOV,DS,1000H,,,错:,MOV,DS,CS,,,错:,MOV,A,B,;A,、,B,均为变量,变量实质是存储器的直接寻址方式。,错:,MOV,AX,CX,等不能随便用某一数据加实现存储器寻址。操作数的寻址方式实质上是指令可以操作的数据形式。,不能直接赋值时可通过间接赋值来实现。,例,3.18,:,MOV,AX,DATA,MOV,DS,AX,;,实现将,DATA,段地址送,DS,MOV,AX,CS,MOV,DS,AX,;,实现将,CS,送,DS,MOV,AL,A,MOV,B,AL,;A,、,B,为字节变量,实现将,A,的值送给,B,交换传送,XCHG(,互换,),和,XLAT(,换码,),XCHG,指令的六个方面如下:,助 记 符,XCHG,基本格式,XCHG,OD1,OD2,数据类型,B/W,寻址方式,功 能:将第二操作数与第一操作数的值互换,即,OD1 OD2,对,F,影响:无,XCHG AX,BX,可以用,MOV,代替如下:,MOV,CX,,,AX,MOV,AX,,,BX,MOV,BX,,,CX,寻址方式,根据,XCHG,的寻址方式,可见,SR,不能参加互换、立即数不能参加互换、,M,与,M,不能互换,,互换指令至少一端操作数为通用寄存器,另一端为寄存器或存储器操作数。,例,3.20,:,XCHG,AX,,,BX,XCHG,AL,,,AH,XCHG,CL,,,BX,XCHG,DI,,,DX,3.21,:,A,B,(,A,、,B,为字节变量),MOV,AL,,,A,XCHG,AL,,,B,MOV,A,,,AL,XLAT,指令,助 记 符,XLAT,基本格式,XLAT,代码表的起始地址,数据类型隐含,寻址方式隐含,功 能(,BX,AL,),AL,对,F,影响无,实际使用时用,BX,指向待转换代码,表的起始地址,而且,AL,为代码表的第几个的序号,然后才使用,XLAT,指令实现换码。即:,MOV BX,,,OFFSET,码表 ;将码表的首地址送,BX,MOVAL,,序号 ;将需转换的第几个送,AL,XLAT,;将,DS,:,(BX+AL),对应存储单元内容送,AL,堆栈传送,PUSH,(进栈)和,POP,(出栈)。,基本方法是:先进后出、后进先出。在程序调用、中断调用的子程序中一般使用,PUSH,和,POP,指令实现现场信息的保护及恢复。,PUSH:,助 记 符,PUSH,基本格式,PUSH,SRC,数据类型,W,,只能为字操作,寻址方式,SRC,可以为,SR,、,UR16,、,M16,功 能 将,SRC,的内容压入栈顶,,即,:SP,SP-2,,,SRC,(,SP,),对,F,影响无,PUSH,指令只能是字操作,立即数不能进栈。,例,3.22,:,合法的例子如下:,PUSH,CS,PUSH,BX,PUSH,A,;,A,为字变量,PUSH,WORD,PTR,BX,PUSH,BX,;一定为字操作,所以类型说明可省略,非法的例子如下:,PUSH,AL,;字节不能进栈,PUSH,B,;若,B,为字节变量,则不对,PUSH 1000H,;立即数不能进栈,POP,指令,助 记 符,POP,基本格式,POP,DST,数据类型,W,,只能为字操作,寻址方式,DST,可以为,SR,(除,CS,外)、,UR16,、,M16,功 能 将栈顶元素出栈给,DST,,即(,SP,),DST,,,SP,SP+2,,,对,F,影响 无,POP,指令只能是字操作,立即数、,CS,不能作为目的操作数,例,3.23,:,合法的例子如下:,POP,DS,POP,BX,POP,A ;A,为字变量,POP,WORD,PTR BX,POP,BX ;,一定为字操作,所以类型说明可省略,非法的例子如下:,POP,AL ;,字节不能出栈,POP,B ;,若,B,为字节变量,则不对,POP,CS ;CS,不能作为出栈对象,用,PUSH,和,POP,的组合也可实现两数的互换,例如实现,AX,与,BX,的互换可用以下指令序列,:,例,3.24,:(互换原理如图,3.6,所示),PUSH,AX,;,PUSH,BX,;,POP,AX,;,POP,BX,;,图,3.6,堆栈操作示意图,AX,BX,SP,SP,地址传送指令,LEA,指令,LEA,指令:有效地址送寄存器指令,助 记 符,LEA,基本格式,LEA,UR16,,,EA,数据类型隐含,寻址方式包含在基本格式中,功 能 将第二操作数存储器操作数的偏移地址送给第一操作数指定的,16,位通用寄存器,即,EAUR16,。,对,F,影响 无,LEA,指令可以使某一地址寄存器(,BX/BP/SI/DI,)指向某一存储单元。,例,3.25,:,LEA,BX,TABLE,;,BX,指向,TABLE,,即,TABLE,的偏移地址送,BX,LEA,SI,2000H,;SI,2000H,,与,MOV,SI,,,2000H,等价,LEA,DI,BP,;DI,BP,,与,MOV,DI,,,BP,等价,LDS/LES,LDS,与,LES,很类似,二者联合讲解,指令的六个方面:,助 记 符,LDS/LES,基本格式,LDS/LES,UR16,,,EA,数据类型隐含,寻址方式包含在基本格式中,功 能 将存储器操作数的第一字送给第一操作数指定,的,16,位通用寄存器,并将存储器操作数的第二,字送给操作码部分指明的段寄存器,DS/ES,。,即:(,EA,),UR16,,(,EA,2,),DS/ES,。,对,F,影响无,BX,DS,SI,DS,LDS,BX,,,SI,的功能,LDS/LES,不但使指定的通用寄存器值发生变化,,而且,DS/ES,也会发生变化。,例如:,LDS,BX,,,SI,;,BX,(,SI,),,DS,(,SI,2,),,其功能示意图。,标志传送指令,LAHF/SAHF,指令,助 记 符,LAHF/SAHF,基本格式,LAHF/SAHF,数据类型隐含,寻址方式隐含,功 能,PSW,低,8,位,AH/AHPSW,低,8,位,对,F,影响除,OF,外的其余,5,个状态标志,SF,、,ZF,、,AF,、,PF,和,CF,,,AH,的对应位去填充各标志位。,SF,ZF,AF,PF,CF,0,1,2,3,4,5,6,7,AH,图,3.8,LAHF,的功能,SF,ZF,AF,PF,CF,0,1,2,3,4,5,6,7,AH,图,3.9,SAHF,的功能,PUSHF/POPF,指令,助 记 符,PUSHF/POPF,基本格式,PUSHF/POPF,数据类型隐含,寻址方式隐含,功 能,SP,SP-2,,,PSW(SP)/(SP)PSW,,,SP,SP,2,对,F,影响无,/,影响,所有状态标志(,SF,、,ZF,、,AF,、,PF,、,OF,和,CF,)及所有控制标志(,IF,、,TF,和,DF,),弹出的栈顶元素对应位去填充各标志位。,PSW,的各位含义如下:,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,X X X X OF DF IF TF SF ZF X AF X PF X CF,PUSHF/POPF,指令主要用于标志位的保存和恢复,,PUSHF,用于保存所有标志位到栈中,,POPF,用于从栈中恢复所有标志位。它们是利用堆栈保存和恢复,相对于,LAHF/SAHF,而言速度较慢,所以在只需保存和恢复除,OF,外的,5,个状态标志则最好使用,LAHF/SAHF,。,标志传送举例,例,3.26,设置,SF=1,,,ZF=0,,,AF=0,,,PF=1,,,CF=0,。,分析:要置,5,个状态标志位可用,SAHF,指令,先按对应位填充一个立即数送,AH,,再用,SAHF,实现将,AH,送,PSW,的低,8,位。,解:,MOV AH,,,10000100B ;,无关位一般填,0,,即,84H,SAHF,例,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,实现将栈顶元素出栈送,PSW,,即,NAX,栈,PSW,。,解:,MOV AX,,,000010101010100B,;无关位一般填,0,,即,0A84H,PUSH AX,POPF,算术运算类指令(,20,条),算术运算类指令可分为三小类:,加减运算,乘除运算,BCD,修正,加减法指令,加减指令可分为两类,一种分类方法是分为单目运算和双目运算,单目运算指令有三条,即,INC,(加,1,)、,DEC,(减,1,)、,NEG,(求补),这三条指令的六个方面如下:,助 记 符,INC/DEC/NEG,基本格式,INC/DEC/NEG OD,数据类型,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,指令是对某数求补(即正变负,负变正)后回送(注意:不是求补码)。,例,3.26,:,INC,BX ;BX,BX,1,DEC,AL ;AL,AL-1,INC BYTE PTR BX ;DS:BX,对应的内存字节,单元加,1,DEC,WORD PTR BP ;SS:BP,对应的内存字单,元减,1,NEG,DL ;DL,-DL,,设,DL,原始值为,5,,则执行,后,DL,为,-5,即,FBH,(为,-5,的补码),,SF,1,,,PF,0,,,ZF,0,,,OF,0,,,CF,1,,,AF,1,。,单目运算指令的应用,可用负数的绝对值求补得到这个负数的补码。负数的补码,0-,此数的绝对值此数绝对值求补。(补码的快速求解方法),NEG,求补指令只有当对,80H(8,位,),或,8000H(16,位,),求补时,OF,1,,其它情况下,OF,0,;,只有当对,0,求补时,CF,0,,其它情况下,CF,1,。,INC,加,1,指令只是当对,7FH,或,7FFFH,加,1,时,OF=1,。,DEC,减,1,指令只是当对,80H,或,8000H,减,1,时,OF=1,。,例,3.29,理解下面的程序段,并填充结果。,;,设,CF=0,MOV AL,,,0,MOV AH,,,1,DEC AL,;,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/CMP DST,,,SRC,功 能,DST=DST+SRC/DST=DST+SRC+CF/DST=DST-SRC/,DST=DST-SRC-CF/DST-SRC,数据类型,B/W,寻址方式,对,F,影响 这,5,条指令对,6,个状态标志位均有影响。影响的填充方法按通用填充方法填充。,例,3.30,:,ADD,AX,,,BX,;,AX,AX,BX,设指令执行前,AX,35C9H,,,BX,726DH,,则执行后,AX,A836H,,,BX,不变,,SF=1,PF=1,ZF=0,OF=1,CF=0,AF=1,例,3.31,:,ADC,BH,,,DL,;,BH,BH,DL,CF,设指令执行前,BH,96H,,,DL,6DH,,,CF=1,,则执行后,BH,04H,,,DL,不变,,SF=0,PF=0,ZF=0,OF=0,CF=1,AF=1,例,3.32,:,SUB,CX,,,BX,;,CX,CX-(BX),,字操作,设指令执行前,CX,1296H,,,DS,2000H,,,BX,100H,,(,20100H,),3DH,,(,20101H,),28H,,则(,BX,),283DH,,执行后,CX,0EA59H,,,BX,、(,BX,)不变,,SF=1,,,PF=1,,,ZF=0,,,OF=0,,,CF=1,,,AF=1,无符号数及有符号数的溢出判断,无符号数、有符号数的加减运算指令相同。,判断是否溢出是不同的:,无符号数用,CF,判断,,CF,1,溢出,否则未溢出;,有符号数用,OF,判断,,OF,1,溢出,否则未溢出。,CMP,指令主要用于两个数大小比较,无符号数和有符号数的大小关系比较所用的标志位是不同的。,设,A,、,B,为,CMP,指令可以使用的第一操作数和第二操作数。,无符号数的大小关系相对简单:,A,B,,即,A,够减,B,,则,CF,0,且,ZF,0,;,A,B,,则,ZF,1,;,A,B,,即,A,不够减,B,,则,CF,1,。,有符号数的八种情况(设为,8,位有符号二进制数补码):,正比正(如,5,3,),,A,B,;,正比正(如,3,5,),,A,B,;,负比负(如,-3,,,-5,),,A,B,;,负比负(如,-5,,,-3,),,A,B,;,正比负(如,5,,,-3,),不会溢出,,A,B,;,正比负,(,如,80,,,-100),,会溢出,,A,B,;,负比正(如,-5,,,3,),不会溢出,,A,B,;,负比正,(,如,-80,,,100),,会溢出,,AB,。,并对,8,种情况下的,SF,、,OF,进行填充,最后得出结论。在此直接给出结论:,A,B,,,SFOF,0,且,ZF,0,;,A,B,,,ZF,1,;,A,B,,,SFOF,1,。,比较指令举例,例,3.35,理解下面的程序段,并填充结果。,MOV AX,,爱,MOV BX,,,AI,CMP AX,,,BX,;,SFOF=,,,CF=,。,分析:主要要理解,ASCII,码、汉字内码,以及无符号数、有符号数的大小比较。,ASCII,码最高位为,0,,汉字内码最高位为,1,,所以作为无符号数汉字比英文字符大,作为有符号数汉字比英文字符要小。,解:,SFOF=1,,,CF=0,。,乘除法运算指令,乘法指令,助 记 符,MUL/IMUL,基本格式,MUL/IMUL,SRC,数据类型,B/W,SRC,的数据类型,被乘数隐含,结果送,寻址方式,标志位填充,字节,AL,AX,SRC,只能是,UR,或,M,,不能为,N,或,SR,字节乘未超过字节范围或字乘未超过字范围,则,CF,0,、,OF,0,否则,CF,1,、,OF,1,。,字,AX,DX,保存高,16,位,AX,保存低,16,位,1,)隐含操作数:,被乘数一定为,AL,或,AX,,积为,AX,或,DX&AX,,不需在指令中另行指明;,2,)对,CF,、,OF,的填充:,无符号数只要判断高位段是否为全,0,,若是则未超出范围,有符号数只要判断高位段是否为低位的符号位扩展,若是则未超出范围;,3,)模拟计算:,无符号数直接相乘即可,有符号数则需先用绝对值相乘,而后再加符号位(同号得正、异号得负)。,注意!,模拟计算,例,3.36,:若,AL,为,05H,、,BL,为,F7H,则,MUL,BL,指令执行后,AX,?,CF,、,OF,?,无符号数乘法直接相乘,,AX,05*F7H,04D3H,、,CF,1,、,OF,1,。,例,3.37,:若,AL,为,05H,、,BL,为,F7H,则,IMUL,BL,指令执行后,AX,、,CF,、,OF,?,有符号数乘法先用绝对值相乘、再加符号位,,AX,-(05*09H),-2DH,FFD3H,、,CF,0,、,OF,0,。,除法指令,助 记 符,DIV/IDIV,基本格式,DIV/IDIV,SRC,数据类型,B/W,SRC,的数据类型,被除数隐含,结果送,寻址方式,标志位填充,字节,AX,商送,AL,、余数送,AH,SRC,只能是,UR,或,M,,不能为,N,或,SR,对,6,个状态标志均有影响,但均无定义。,字,DX,AX,商送,AX,、余数送,DX,注意!,1,)隐含操作数,,被除数一定为,AX,或,DX&AX,,商为,AL,或,AX,,余数为,AH,或,DX,,不需在指令中另行指明;,2,)商超出,AL,(除字节)或,AX,(除字)范围时,不是对,OF,置,1,、而是引起,0,号中断即除法溢出中断,一般屏幕上会显示,Divide Overflow,并终止程序的执行。,3,)模拟计算,无符号数直接相除即可,有符号数则需先用绝对值相除,而后再加符号位商的符号为同号得正、异号得负,,余数的符号则与被除数相同。,模拟计算,例,3.38,:若,AX,为,1005H,、,BL,为,17H,则,DIV,BL,指令执行后,AX,?,无符号数除法直接相除,所以,1005H/17H,4101/23,,商为,178,,余数为,7,,即,AL,B2H,、,AH,07H,,因此,AX,07B2H,。,例,3.39,:若,AX,为,FF05H,、,BL,为,17H,则,IDIV,BL,指令执行后,AX,?,有符号数除法先用绝对值相除、再加符号位,,FF05H,的绝对值为,0-FF05H,FBH,251,251/23,的商为,10,,余数为,21,,商的符号为负,余数的符号也为负,所以,AL,-10,F6H,,,AH,-21,EBH,,因此,AX,EBF6H,。,CBW,和,CWD,指令,助 记 符,CBW/CWD,基本格式,CBW/CWD,数据类型隐含,功 能,CBW,为将,AL,有符号扩展成,AX,CWD,为将,AX,有符号扩展成,DX AX,寻址方式隐含,对,F,影响对标志位无影响,将较短十六进制数的符号位对要扩展成的较长十六进制数高位全部填充,也就是符号位若为,0,,则高位全填,0,;符号位若为,1,,则高位填全,1,。例,AX,5678H,,执行,CWD,后,则,DX,0,;,AX,ABCDH,,执行,CWD,后,则,DX,FFFFH,。,例,3.40,:设,A,,,B,,,C,,,D,为字节变量,且,A,除,B,不会溢出,试编写无符号数或有符号数,A/B,商送,C,,余数送,D,。,;,无符号数除,;,有符号数除,MOV,AL,A,MOV,AL,A,MOV,AH,0,CBW,DIV,B,IDIV,B,MOV,C,AL,MOV,C,AL,MOV,D,AH,MOV,D,AH,有符号扩展,例,3.41,理解下面的程序段,并填充结果。,MOV AL,200,MOVAH,-1,MOV BL,10,IDIVBL,;,AX=,H,,商十进制为,。,分析:主要要理解除法是谁除谁,,AX,除,BL,结果商送,AL,,余数送,AH,。,AX=FFC8H=-56,,,BL=10,,商为,-5,即,FBH,,余数为,-6,即,FAH,解:,AX=FBFAH,,商十进制为,-5,。,BCD,修正,应注意,参加运算的数是,BCD,码,修改后的数依然是,BCD,码。,BCD,修正,压缩,BCD,修正,非压缩,BCD,码修正,DAA,加法修正,DAS,减法修正,AAA,加法修正,AAS,减法修正,AAM,乘法修正,AAD,除法修正,DAA,、,DAS,指令,助记符,寻址方式,AL,低,4,位为:,AF,AL,高,4,位为,AF,标志位,DAA,隐含,AL+6,且,AF=1,AL+60H,且,AF=1,对,OF,有影响无定义、其余有影响有定义,,AF,、,PF,、,ZF,按一般填充,DAS,AL-6,且,AF=1,AL-60H,且,AF=1,DAA,一般跟在第一操作数为,AL,的,ADD,或,ADC,指令之后,用于对压缩,BCD,码加法的修正。,DAS,一般跟在第一操作数为,AL,的,SUB,或,SBB,指令之后,用于对压缩,BCD,码减法的修正。,例,3.42,:用压缩,BCD,码实现,35,48,送,AL,。,MOV,AL,35H,ADD,AL,48H ;AL,7DH,DAA ;AL,83H,,低四位加,6,修正了,,AF=1,CF=0,SF=1,ZF=0,PF=0,例,.3.43,:用压缩,BCD,码实现,75-58,送,AL,。,MOV,AL,75H,SUB,AL,48H;AL,2DH,DAS ;AL,27H,,低四位减,6,修正,了,,AF=1,CF=0,SF=0,ZF=0,PF=1,AAA,、,AAS,指令,AAA,一般跟在第一操作数为,AL,的,ADD,或,ADC,指令之后,用于对非压缩,BCD,码加法的修正。,AAS,一般跟在第一操作数为,AL,的,SUB,或,SBB,指令之后,对非压缩,BCD,码减法的修正。,助记符,寻址方式,AL,低,4,位为:,AF,或,AF=1,AL,高,4,位为,AF,标志位,AAA,隐含,AL,AL+6,且置,AF,、,CF,为,1,,否则,AF,、,CF,为,0,;,AH,AH+CF,;清除,AL,的高,4,位,AL+60H,且,AF=1,对,OF,、,SF,、,PF,、,ZF,有影响无定义,,AF,、,CF,有影响有定义,依功能描述方法填充。,AAS,AL,AL-6,且置,AF,、,CF,为,1,,否则,AF,、,CF,为,0,;,AH,AH-CF,;清除,AL,的高,4,位,AL-60H,且,AF=1,例,3.44,:用非压缩,BCD,码实现,35,8,送,AX,。,MOV,AX,0305H,ADD,AL,8H ;AX,030DH,AAA ;AX,0403H,,低四位加,6,修,正了,,AF=1,CF=1,例,3.45,:用非压缩,BCD,码实现,75-6,送,AX,。,MOV,AX,0705H,SUB,AL,6H ;AX,07FFH,AAS ;AX,0609H,,低四位减,6,修正了,,AF=1,CF=1,AAM,、,AAD,指令,助 记 符,数据类型,功 能,对,F,影响,AAM,隐含,AH*10+AL,送,AX,先乘后修正,可以用于将低于,63H,的十六进制数分解为十位和个位数,十位数存于,AH,,个位数存于,AL,对状态标志位,OF,、,AF,、,CF,有影响无定义,,SF,、,PF,、,ZF,有影响有定义,按通用方法填充。,AAD,AX/10,的商送,AH,、余数送,AL,先修正再除,用于实现将非压缩,BCD,码转化为十六进制数据,例,3.46,:用非压缩,BCD,码实现,5*8,送,AX,MOV,AL,5,MOV,BL,8,MUL,BL,;AX,0028H,AAM,;AX,0400H,,即将十六进制数,0028H,变成非,压缩,BCD,码,0400H,例,3.47,:用非压缩,BCD,码实现,25/8,送,AX,MOV,AX,0205H,;,AX,0205H,MOV,BL,8,AAD,;AX,0019H,,即将非压缩,BCD,码,0205H,变成十六进制数,0019H,DIV,BL,;AX,0103H,,即商为,3,、余数为,1,位运算指令,位运算类指令又要分为逻辑运算和移位运算两小类。分类情况如图,3.14,所示。,移位运算,位运算类指令,位运算类指令又要分为逻辑运算和移位运算两小类。分类情况如图,3.14,所示。,逻辑运算,逻辑运算共有,5,条指令:,NOT,(非)、,OR,(或)、,XOR,(异或)、,AND,(与)、,TEST,(测试)。,1,、单目运算,NOT,指令的六个方面如下:,助记符,NOT,基本格式,NOT,OD,数据类型,B/W,功能,OD,按位取反后送
展开阅读全文