
《第3章 8088指令系统1》由会员分享,可在线阅读,更多相关《第3章 8088指令系统1(167页珍藏版)》请在文档大全上搜索。
1、指令指令(Instruction)是指示是指示CPU执行某种操作执行某种操作的命令;的命令;n 指令系统指令系统(Instruction Set)是某一是某一CPU所能所能执行的全部指令的集合,也称为指令集;执行的全部指令的集合,也称为指令集;n 8086/8088的指令系统完全相同。的指令系统完全相同。n 指令是构成指令是构成程序程序的基础,程序是指令的有序组的基础,程序是指令的有序组合,合,CPU执行程序就是执行一条条指令。执行程序就是执行一条条指令。n 1、指令格式指令格式n 2、寻址方式寻址方式 n(1)操作码操作码指定指定CPU执行某种操作,如传送、运算等;执行某种操作,如传送、运算
2、等;n(2)操作数操作数为参与操作的数据,如寄存器中的数据或内存为参与操作的数据,如寄存器中的数据或内存单元中的数据等。单元中的数据等。n 包含一个操作数的指令称为包含一个操作数的指令称为单操作数指令单操作数指令;n 包含两个操作数的指令称为包含两个操作数的指令称为双操作数指令双操作数指令;n 在指令执行过程中使用的操作数,保持原值不变的称在指令执行过程中使用的操作数,保持原值不变的称为为源操作数源操作数;n 不保留原值而将处理结果存入其中的称为不保留原值而将处理结果存入其中的称为目的操作数目的操作数 。 操作码操作码 操作数操作数 一条指令通常包括两部分:一条指令通常包括两部分:操作码操作码
3、和和操作数操作数。格式:格式:21234H20000H当前数据段A1H21235H66HFFH内存单元地址内存单元地址 内存单元内容内存单元内容n(2)MOV AX,1234H 说明:说明: 根据指令根据指令EA=1234H,段地址即取当前段地址即取当前数据段数据段DS, 设设DS=2000H,则则 20位物理地址位物理地址=DS10H+1234H=21234H, 该指令的功能就是将内存单元该指令的功能就是将内存单元(21234H)的的字内字内容容传送到传送到寄存器寄存器AX中,也可表示为中,也可表示为: ( 2000H:1234H)=66A1H,也就是将也就是将66A1H送送AX,因此,当执
4、行完该指令后因此,当执行完该指令后, AX=66A1H21234H20000H当前数据段A1H21235H66HFFH内存单元地址内存单元地址 内存单元内容内存单元内容nEA由指令中给出的基址由指令中给出的基址/变址寄存器和位移量组成。变址寄存器和位移量组成。n如:如:MOV AL,BX+0120H ;EA=BX+0120Hn通式(其中通式(其中D为位移量):为位移量): 注意:求物理地址的方法与内存寻址中的直接注意:求物理地址的方法与内存寻址中的直接寻址方法一样。注意对应的段!寻址方法一样。注意对应的段!EA=+DBPDISIBXn有效地址有效地址EA由基址寄存器和变址寄存器组成。如:由基址
5、寄存器和变址寄存器组成。如: n MOV AL,BX+SI ;EA=BX+SIn或或 MOV AL,BXSI;EA=BX+SIn通式:通式:EA=DISI+BPBX 注意:求物理地址的方法与内存寻址中的直接注意:求物理地址的方法与内存寻址中的直接寻址方法一样。注意对应的段!寻址方法一样。注意对应的段!nEA由基址寄存器、变址寄存器和位移量组成。如:由基址寄存器、变址寄存器和位移量组成。如: n MOV AL,BP+DI+20H ; EA=BP+DI+20Hn或或MOV AL,20HBPDI ; EA=BP+DI+20Hn通式:通式:EA=DISIDBPBX+ 注意:求物理地址的方法与内存寻址中
6、的直接注意:求物理地址的方法与内存寻址中的直接寻址方法一样。注意对应的段!寻址方法一样。注意对应的段!n1、指出各指令中源操作数和目的操作数的寻址方、指出各指令中源操作数和目的操作数的寻址方式,并说明操作数的类型(字节或字数据)。式,并说明操作数的类型(字节或字数据)。n(1)MOV SI,1000H源操作数是立即数寻址;目的操作数是寄存器寻址;传送的是字数据。源操作数是内存寻址中的源操作数是内存寻址中的直接寻址直接寻址EA=1000H;目的操作数是目的操作数是寄存器寻址寄存器寻址;传送的是传送的是字节数据字节数据。源操作数是源操作数是寄存器寻址寄存器寻址;目的操作数是内存寻址中的目的操作数是
7、内存寻址中的相对基址寻址相对基址寻址,EA=BX+0100H;传送的是传送的是字数据字数据。源操作数是源操作数是立即数寻址立即数寻址,十进制数,十进制数100;目的操作数是内存寻址中目的操作数是内存寻址中基址变址寻址基址变址寻址,EA=BX+SI;传送的是传送的是字节数据字节数据。说明:斜体字是伪指令,表示是字节说明:斜体字是伪指令,表示是字节源操作数是内存寻址中的源操作数是内存寻址中的相对基址变址寻址相对基址变址寻址,EA=BX+DI+0004H;目的操作数是目的操作数是寄存器寻址寄存器寻址;传送的是传送的是字数据字数据。源操作数是内存寻址中的源操作数是内存寻址中的寄存器间接寻址,寄存器间接
8、寻址,EA=BX;目的操作数是目的操作数是寄存器寻址寄存器寻址;传送的是传送的是字数据字数据。n指令格式指令格式: XLAT 表首址表首址(表首址可省略)(表首址可省略)n指令功能指令功能:将:将AL中的值转换为内存表格中某中的值转换为内存表格中某一值后一值后,送回送回AL。n 这条指令完成一个字节的查表转换,指这条指令完成一个字节的查表转换,指令隐含规定用令隐含规定用BX和和AL,两者之和为访问的内两者之和为访问的内存单元。存单元。n例题例题 n通用寄存器和存储单元之间的传送;通用寄存器和存储单元之间的传送;n如:如: MOV AL,BX ;将将EA=BX的内存单元的内存单元n ;的内容送寄
9、存器;的内容送寄存器ALn MOV 1400H,BX ;将将BX的内容送的内容送EA=1400n ;的内存单元;的内存单元n段寄存器和存储单元之间的传送。段寄存器和存储单元之间的传送。n如:如: MOV 1400H,CS ;将将CS的内容送的内容送EA=1400n ;的内存单元;的内存单元n MOV DS,BX ;将将EABX的内存单元内容的内存单元内容n ;送;送DSAX=1352HEA=1352H,DS=1000H,内存单元地址内存单元地址=DS10H+EA=11352H,所以,所以,AX=26FFH因为因为 EA=BX+0150H=1350H,CH=33H,内存单元地址内存单元地址=DS
10、10H+1350H=11350H,所以,(所以,(11350H)=33H,(11351H)=3CH因为因为 EA=BP+0150H=1350H,内存单元的地址内存单元的地址=SS10H+1350H=21350H所以,所以,AX=5188H21233H20000H当前数据段当前数据段A1H21235HFFH内存单元地址内存单元地址 内存单元内容内存单元内容21234HAHFFHFFHMOV 1235, AH堆栈段是用来保存数据和地址的一个存储区。堆栈段是用来保存数据和地址的一个存储区。n堆栈堆栈段寄存器用段寄存器用SS表示,堆栈段栈顶指针是表示,堆栈段栈顶指针是SP(隐隐含)。含)。n 由于堆栈
11、段只有一个出入口,堆栈操作按由于堆栈段只有一个出入口,堆栈操作按先入先入后出后出的方式工作。的方式工作。n 入栈指令入栈指令PUSHn 出栈指令出栈指令POPn不影响标志位!不影响标志位!堆堆栈栈段段低地址低地址高地址高地址SP执行执行 PUSH AX指令前指令前YYYY.设设 AX3412H设设 SP 1000H堆堆栈栈段段低地址低地址高地址高地址SP1234YYYY执行执行PUSH AX指令后指令后.SP 0FFEH出栈指令先传送字数据,出栈指令先传送字数据, 因为因为SP=1352H,SS=2000H,字地址字地址=SS10H+SP=21352H,所以,所以,AX=5188H, 再修改再
12、修改SP=SP+2=1354HZFSFCFAFPF指令格式:指令格式:LAHF指令功能:指令功能:将标志寄存器的低将标志寄存器的低8位送位送AH。即即ZFSFCFAFPFADD AX,3A5FH;AX+3A5FHAXADD AL,BX;将将EA=BX的内存单元的的内存单元的;内容;内容+ALALADD BX,AX;将将EA=BX的内存内容的内存内容; +AX 该内存单元该内存单元ADC AX,BX;AX+BX+CFAXADC AL,BX;将将EA=BX的内存单元的的内存单元的;内容;内容+AL+CFALADC BX,AX;将将EA=BX的内存内容的内存内容+AX; +CF 该内存单元该内存单元
13、例题例题ADC AX,BXADC AL,BX;AX+BX+CFAX;将将EA=BX的内存单元的的内存单元的;内容;内容+AL+CFALADC BX,AXADC AX,BXADC AL,BX79H= 0111 1001B+) B3H= 1011 0011B0010 1100B1所以,所以,AL=0010 1100B=2CH,BH=0B3HSF=0, ZF=0,AF=0,PF=0,CF=1,OF=0。AX= 5 6 7 8H+) CX= ABCDHAX= 0 2 4 5HCF= 1DX= 1 2 3 4HBX= 6 7 8 9H+) CF= 1DX= 7 9 B EH CF= 0所以双字之和是所以
14、双字之和是79BE 0245HINC AX;AX+1AXINC CL;CL+1CLINC BX;将将EA=BX的内存单元内容的内存单元内容; +1 该内存单元该内存单元0101 1100B =5CH)62BCD 显然,执行加法指令与实际结果不符合。显然,执行加法指令与实际结果不符合。0101 1100B (=5CH,则低则低4位位9) 0110B (=06H)0110 0010B (=62H即为即为62BCD)+) 所以所以,对于压缩,对于压缩BCD码,在进行加法运算后,码,在进行加法运算后,必须紧跟一条调整指令必须紧跟一条调整指令DAA,以保证计算结果正确。以保证计算结果正确。SUB AX,
15、3A5FH ;AX3A5FHAXSUB AL,BX;将将AL (EA=BX)的内存的内存;单元的内容;单元的内容ALADD BX,AX;将将EA=BX的内存内容的内存内容AX ; 该内存单元该内存单元n指令格式指令格式: CMP dst, srcn指令功能指令功能: (dst) (src), 影响标志位。影响标志位。n注意:注意: 目的操作数不发生变化。目的操作数不发生变化。n如:如:nCMP AH, 00H ;AH与与0比较,结果影响标志比较,结果影响标志位位nCMP AX, BX ;AX与与EA=BX的内存单元的的内存单元的字字n ;比较,结果影响标志位。;比较,结果影响标志位。(1)无符
16、号数乘法指令无符号数乘法指令MULn指令格式指令格式: MUL srcn指令功能指令功能: (src) ALAX (src是字节数是字节数据据)n (src) AXDX,AX (src是字数据是字数据)n如:如:MUL BL ;BLALAXn MUL BX ;BX AXDX,AXn MUL BYTE PTRSI ;将将EA=SI的内存单元的内存单元的的n ;内容;内容ALAXn注意隐含操作!注意隐含操作!EA=SI=1354H;DS=1000H内存单元的字地址内存单元的字地址=100010H+1354H=11354H该内存单元的字该内存单元的字=0E752H而,而,CX=339AH;该内存单元
17、的字该内存单元的字= E 7 5 2 HCX= 3 3 9 A H+)+)1 A E C HCF=1所以执行指令后,所以执行指令后,(11355H)=1AH,(11354H)=0ECH同时,因为执行加法指令后最高位同时,因为执行加法指令后最高位 = 0,所以,所以,SF=0,ZF=0,又因为这是两个不同符号的数相加,又因为这是两个不同符号的数相加, 故,故,OF=0习题习题36n根据以下要求,写出指令。根据以下要求,写出指令。n 把把BX寄存器的内容和寄存器的内容和DX寄存器的内容相加,寄存器的内容相加,结果存入结果存入BX寄存器中。寄存器中。n答:答: ADD BX,DXn 用寄存器用寄存器
18、BX和和SI的基址变址寻址方式把存储的基址变址寻址方式把存储器中一个字节与器中一个字节与AL寄存器的内容相加,并把结果送寄存器的内容相加,并把结果送回到回到AL中。中。n答:答: ADD AL,BX+SI 或或n ADD AL,BXSI习题习题36n根据以下要求,写出指令。根据以下要求,写出指令。 用寄存器用寄存器BX和位移量和位移量0B2H的寄存器相的寄存器相对寻址方式,把存储器中的一个字和对寻址方式,把存储器中的一个字和CX相相加,并把结果送回到存储器中。加,并把结果送回到存储器中。 答:答:ADD 0B2H+BX,CX 用位移量用位移量0524H的直接寻址方式把存储器的直接寻址方式把存储
19、器中的一个字与立即数中的一个字与立即数3C5AH相加,并把结相加,并把结果送回到该存储单元中。果送回到该存储单元中。 答:答: ADD 0524H,3C5AH习题习题39写出执行以下计算的指令序列。其中写出执行以下计算的指令序列。其中X,Y,Z,R,W均为存放均为存放16位带符号数单元的地址。位带符号数单元的地址。n ZW+(ZX)n解:解: nMOV AX, X ;将将EA=X的内存字数据送入的内存字数据送入AXnSUB Z, AX ;将将EA=Z的内存字数据减的内存字数据减AX后后n ;再送回该内存。;再送回该内存。nMOV AX,W ;将将EA=W的内存字数据送的内存字数据送AXnADD
20、 Z, AX ; 求得结果求得结果 习题习题39ZW+(ZX) MOV AX,Z SUB AX,X ADD AX,W MOV Z,AXn指令格式:指令格式:AND dst,srcn指令功能指令功能: (dst)(src)(dst)n 对源操作数和目的操作数对源操作数和目的操作数按位进行按位进行“与与”运算,运算,影响标志位(影响标志位(AF无定义,无定义,CF0,其他视具体情其他视具体情况)。况)。如:如:nAND AL,80H ;AL 80HALnAND AX,BX;将将EA=BX的内存单元的字的内存单元的字n ;内容;内容AXAXn指令格式:指令格式:OR dst,srcn指令功能:指令功
21、能: (dst)(src)(dst) 对源操作数和目的操作数对源操作数和目的操作数按位进行按位进行“或或”运算运算,影响标志位(,影响标志位(AF无定义,无定义,CF0,其他视具体情其他视具体情况)。况)。如:如:nOR AL,01H ;AL01HALnOR AX,BX ;将将EA=BX的内存单元的字的内存单元的字n ;内容;内容AXAXn指令格式:指令格式:NOT dstn指令功能:指令功能:dstdst 对目的操作数对目的操作数按位进行按位进行“非非”运算,不影响标运算,不影响标志位。志位。如:如:nNOT AL ;ALAL nNOT WORD PTRBX ;将将EA=BX的内存单的内存单
22、元元n ;的字按位求反后送回;的字按位求反后送回n ;该内存单元;该内存单元n指令格式:指令格式:XOR dst, srcn指令功能:指令功能: (dst) (src)(dst) 对源操作数和目的操作数对源操作数和目的操作数按位进行按位进行“异或异或”运算,影响标志位(运算,影响标志位(AF无定义,无定义,CF0,其他视具体情况)。其他视具体情况)。如:如:nXOR AX,AX ;AX清零清零n指令格式:指令格式:TEST dst, srcn指令功能:指令功能: (dst)(src)n 对源操作数和目的操作数对源操作数和目的操作数按位进行按位进行“与与”运算,影响标志位(运算,影响标志位(AF
23、无定义,无定义,CF0,其他视具体情况),但结果不改变目的其他视具体情况),但结果不改变目的操作数。操作数。n如:如:n TEST AL,80H ;测试测试D71?逻辑移位的特点是移出的位进入进位位逻辑移位的特点是移出的位进入进位位CF,空空出的位用出的位用“0”填入。填入。n逻辑左移指令逻辑左移指令SHLn指令格式:指令格式:SHL dst,countn指令功能:指令功能:D6 D5 D4 D3 D2 D1 D0 0 D7“0”CFCount=1,直接写入指令;大于直接写入指令;大于1时,应送入时,应送入CL预先设定。预先设定。如:如:SHL AX,1 SHL AL,CL0 D7 D6 D5
24、 D4 D3 D2 D1D0“0”CFCount=1,直接写入指令;大于直接写入指令;大于1时,应送入时,应送入CL预先预先设定。设定。如:如:SHL AX,1 SHL AL,CLn算术左移指令算术左移指令SALn指令格式:指令格式:SAL dst,countn指令功能指令功能 :与逻辑左移指令功能完全相同:与逻辑左移指令功能完全相同D6 D5 D4 D3 D2 D1 D0 0 D7“0”CFCount=1,直接写入指令;大于直接写入指令;大于1时,应送入时,应送入CL预先预先设定。设定。n算术右移指令算术右移指令SARn指令格式:指令格式:SAR dst,countn指令功能:指令功能:D7
25、 D7 D6 D5 D4 D3 D2 D1D0CF最高位保持不变,其他各位右移。最高位保持不变,其他各位右移。Count=1,直接写入指令;大于直接写入指令;大于1时,应送入时,应送入CL预先预先设定。设定。n循环左移指令循环左移指令ROLn指令格式:指令格式:ROL dst,countn指令功能指令功能 :D6 D5 D4 D3 D2 D1 D0 D7 D7CF Count=1,直接写入指令;大于直接写入指令;大于1时,应送入时,应送入CL预先设定。预先设定。n循环右移指令循环右移指令n指令格式:指令格式:ROR dst,countn指令功能:指令功能:D0 D7 D6 D5 D4 D3 D
26、2 D1D0CF Count=1,直接写入指令;大于直接写入指令;大于1时,应送入时,应送入CL预先设定。预先设定。n通过进位位循环左移指令通过进位位循环左移指令RCLn指令格式:指令格式:RCL dst,countn指令功能指令功能 :D6 D5 D4 D3 D2 D1 D0 CF D7CF Count=1,直接写入指令;大于直接写入指令;大于1时,应送入时,应送入CL预先设定。预先设定。n通过进位位循环右移指令通过进位位循环右移指令n指令格式:指令格式:RCR dst,countn指令功能指令功能 :CF D7 D6 D5 D4 D3 D2 D1D0CF Count=1,直接写入指令;大于
27、直接写入指令;大于1时,应送入时,应送入CL预先设定。预先设定。例题例题nMOV AL,08H nSHL AL,1 nMOV BL,AL MOV CL,2 nSHL AL,CLn nADD AL,BL;N=08H AL;AL逻辑左移一位逻辑左移一位,相当于相当于N2;AL=2NBL;2CL;AL算术左移两位,算术左移两位,AL=2N;相当于相当于2N4=8N;AL+BL=(8N+2N)AL,;整个过程相当于整个过程相当于N101、以下指令序列,请问实现了什么功能?、以下指令序列,请问实现了什么功能?习题习题312nMOV CL, 04HnSHL DX,CLnMOV BL,AHnSHL AX,C
28、LnnSHR BL,CLnOR DL,BL;04H CL;DX逻辑左移逻辑左移4位,相当于位,相当于DX;低低4位清零,位清零,DX= 0H;AHBL;AX逻辑左移逻辑左移4位,相当于位,相当于AX低低4位位;清零,;清零,AX= 0H;BL逻辑右移逻辑右移4位,相当于位,相当于AH=0H;现现DL的高的高4位是原来位是原来DL的低的低4位,位,;现现DL的低的低4位是原位是原AH的高的高4位位 所以,本程序段完成将所以,本程序段完成将DX,AX组成的双字逻辑组成的双字逻辑左移左移4位。位。试分析下面的程序段完成什么功能试分析下面的程序段完成什么功能?例题例题MOV AX,1234HMOV D
29、X,5678HSHL AX,1 RCL DX,1功能功能 : CFDXAX;CF=0 0010,0100,0110,1000=AX;CF=0 1010,1100,1111,0000=DX0习题习题313n 编制一个程序段,实现编制一个程序段,实现CX中的数除以中的数除以4,结,结果仍旧放回果仍旧放回CX中。中。n解:假设解:假设CX内是无符号数;若为有符号数则将内是无符号数;若为有符号数则将 SHR改为改为SARn程序段如下:程序段如下:n MOV AX,CXnMOV CL,02HnSHR AX,CLn MOV CX,AXn HLT指令执行顺序是由代码段寄存器指令执行顺序是由代码段寄存器CSC
30、S和指令指针和指令指针寄存器寄存器IPIP确定的。确定的。n 执行顺序程序时,执行顺序程序时,BIU(总线接口部件)每取总线接口部件)每取一字节指令,一字节指令,IP就自动加就自动加1,指向下一指令字节,实,指向下一指令字节,实现程序的顺序控制。现程序的顺序控制。n 控制转移类指令的目的就是通过改变控制转移类指令的目的就是通过改变CS、IP,从而实现对程序流向的控制。从而实现对程序流向的控制。n 程序转移分为两类:程序转移分为两类:n (1)段内转移段内转移n (2)段间转移段间转移n (3)寻址方式寻址方式指令格式指令格式:JMP dstn 指令功能指令功能:使程序无条件地转移到:使程序无条
31、件地转移到dst指明的指明的目的地址去执行。通常目的地址去执行。通常dst用符号表示,不影响标志用符号表示,不影响标志位。位。n如:如:nJMP short HEY ;转移到目标地址转移到目标地址HEY处,处,n ;IP被修改了被修改了(128127)nJMP ABC ;转移到目标地址转移到目标地址ABC处,处,n ;IP被修改了(逻辑段内)被修改了(逻辑段内)n例题例题 ;NEAR可省略可省略习题习题315解:因为解:因为IP当前值为:当前值为: 0628H+0002H=062AH所以:所以:(1)EA=062AH+27H=0651H (2)EA=062AH+6BH=0695H (3)EA=
32、062AH+0C6H=06F0H2022-5-27119条件转移指令是根据上一条指令执行后的标条件转移指令是根据上一条指令执行后的标志位的状态来决定程序是否转移。志位的状态来决定程序是否转移。n 当条件成立时,便转向指令中给出的目标地当条件成立时,便转向指令中给出的目标地址;址;n 当条件不成立时,程序按顺序执行。当条件不成立时,程序按顺序执行。n 指令格式指令格式:Jcc dst8n 指令功能指令功能:当转移条件:当转移条件cc成立时,转移到目成立时,转移到目的地址去执行;否则按顺序执行。不影响标志位。的地址去执行;否则按顺序执行。不影响标志位。n 转移条件转移条件cc条件转移指令条件转移指
33、令转移条件转移条件 JS dst JNS dst SF=1 SF=0 JZ dst JNZ dst ZF=1 ZF=0 JP dst JNP dst PF=1 PF=0 JC dst JNC dst CF=1 CF=0 JO dst JNO dst OF=1 OF=0n2、用、用CMP(或或SUB)指令来比较两个数的大小指令来比较两个数的大小n 无符号数无符号数n 若若XY,则则CF=0,且且ZF=0 (JA dst) n (A即即 Above)n 若若XY,则则SF OF=0,且且ZF=0 (JG dst) (G即即 Greater than)n 若若XY,则则SF OF =1,且且ZF=0
34、 (JL dst) (L 即即 Less than) n 例题例题习题习题317假定假定AX和和BX中的内容为带符号数中的内容为带符号数,CX和和DX中的内容中的内容为无符号数。请用比较指令和条件转移指令实现以下为无符号数。请用比较指令和条件转移指令实现以下判断。判断。(1) 若若DX的内容高于的内容高于CX的内容,转去执行的内容,转去执行EXCEED。(3)若若CX的内容等于零,转去执行的内容等于零,转去执行ZERO。(5)若若DX的内容低于等于的内容低于等于CX的内容,转去执行的内容,转去执行 EXCEED。 (1)解:)解:CMP DX,CX 或或 CMP CX,DX JA EXCEED
35、 JBE EXCEED习题习题 3-17(3)解:)解:CMP CX,0 JZ ZERO (5)解:)解:CMP DX,CX 或或 CMP CX,DX JBE EXCEED JA EXCEED习题习题318n1、分析下列程序段,程序转向哪里?、分析下列程序段,程序转向哪里?nADD AX,BXnJNO L1nJNC L2nSUB AX, BXnJNC L3nJNO L4nJMP SHORT L5nAX=B568H,BX=54B7H习题习题318 (1)习题习题318 (4)n1、分析下列程序段,程序转向哪里?、分析下列程序段,程序转向哪里?nADD AX, BXnJNO L1nJNC L2nS
36、UB AX, BXnJNC L3nJNO L4nJMP SHORT L5nAX=42C8H,BX=608DH习题习题318 (4)n解:解:n第一步:第一步:ADD AX, BXnAX=42C8H 0100 0010 1100 1000nBX=608DH 0110 0000 1000 1101nAX=A355H 1010 0011 0101 0101n 所以,所以,CF=0,OF=1n第二步:第二步:JNO L1 ;OF=1,不满足条件,顺序执不满足条件,顺序执行行n第三步第三步:JNC L2 ;CF=0,满足条件,转去满足条件,转去L2执执行行2、编写一段指令序列,测试、编写一段指令序列,测
37、试AL的内容,的内容,若低若低4位全为位全为0,就转移去,就转移去NEXT执行程序,执行程序,否则按顺序执行。否则按顺序执行。n解:解:n TEST AL, 0FHn JZ NEXTn nNEXT: 习题习题319 SUB AX,AX SUB CX,CXLP: INC AXLOOP LP; AX=0; CX=0; AX+1 AX; CX-1 CX, CX=0?CX=0 LP功能:功能: CX=0 ,AX=0程序设计时,往往把某些具有独立功能的程序编写程序设计时,往往把某些具有独立功能的程序编写成独立的程序模块,称之为子程序,可以方便地供其他程序成独立的程序模块,称之为子程序,可以方便地供其他程
38、序调用。调用。n(1)调用指令)调用指令n 指令格式指令格式:CALL dst(子程序名)子程序名)n 指令功能指令功能:无条件地转移去执行子程序;:无条件地转移去执行子程序;n(2)返回指令)返回指令n 指令格式指令格式:RETn 指令功能指令功能:在子程序结尾处必须有这条指令,保证子程:在子程序结尾处必须有这条指令,保证子程序结束后返回原断点。序结束后返回原断点。n习题习题316习题习题316带参数的返回指令用在什么场合?设栈顶地址为带参数的返回指令用在什么场合?设栈顶地址为4000H,当执行当执行RET 0008H后后,SP指针的值是多少?指针的值是多少?解:解: 在某些情况下,执行返回
39、指令后,往往需要自动修改堆栈在某些情况下,执行返回指令后,往往需要自动修改堆栈指针,以便废弃一些指针,以便废弃一些CALL指令执行前入栈的参数。为了达到这指令执行前入栈的参数。为了达到这一目的,一目的,RET指令可以带一个操作数(一般为立即数),其指指令可以带一个操作数(一般为立即数),其指令如下:令如下:RET N其中为其中为N一个偶数。当一个偶数。当RET指令完成返回地址指令完成返回地址出栈后,还进一步执行出栈后,还进一步执行(SP) (SP)+N操作,从而实现了修改堆操作,从而实现了修改堆栈指针的目的。栈指针的目的。设栈顶地址为设栈顶地址为4000H,当执行当执行RET 0008H后,后
40、,如果从段内返回如果从段内返回,(SP) (SP)+2+8=400AH;如果从段间返回,则如果从段间返回,则(SP) (SP)+4+8=400CH相对寻址:把当前相对寻址:把当前IP值增加(或减少)某一值增加(或减少)某一值。值。n 绝对寻址:以新的值完全取代当前的绝对寻址:以新的值完全取代当前的IP值。值。n 段内直接寻址段内直接寻址n 段内间接寻址段内间接寻址 段间直接寻址段间直接寻址 段间间接寻址段间间接寻址绝对寻址绝对寻址相对寻址相对寻址这种寻址方式的转移指令,直接给出这种寻址方式的转移指令,直接给出一个相对位移量。一个相对位移量。n 指令转向的有效地址为当前指令转向的有效地址为当前I
41、P寄存器寄存器内容和指令中给出的内容和指令中给出的8位或位或16位位移量之和,位位移量之和,即即(IP)(IP)位移量位移量。n 若位移量为若位移量为8位,则为位,则为短转移短转移(short) 。n 因为位移量是相对于当前的因为位移量是相对于当前的IP值值来计来计算的,所以算的,所以段内直接寻址段内直接寻址又称又称相对寻址相对寻址。数据串数据串是指存放在存储器中的一组字节(或字)是指存放在存储器中的一组字节(或字)数据。一个数据串的长度最长为数据。一个数据串的长度最长为64KB。n1)串传送(串传送(MOVS)n2)串比较(串比较(CMPS)n3)串扫描(串扫描(SCAS)n4)取数据串(取
42、数据串(LODS)n5)存数据串(存数据串(STOS)n6)三个重复前缀指令)三个重复前缀指令n例题例题执行串操作指令时应注意隐含约定和特点:执行串操作指令时应注意隐含约定和特点:n (1)数据串包括字节串和字串;)数据串包括字节串和字串;n (2)所有串操作指令都)所有串操作指令都用用SI寄存器指示源串中寄存器指示源串中元素的偏移地址,源串的起始地址元素的偏移地址,源串的起始地址DS:SI,目的串目的串的起始地址的起始地址ES:DI;n (3)每执行一次串操作指令,处理一个元素,)每执行一次串操作指令,处理一个元素,SI和和DI自动修改指向下一个元素,修改方向由自动修改指向下一个元素,修改方
43、向由DF标标志决定,志决定, DF0,地址递增,用地址递增,用CLD指令指令(DF1,地址递减,用地址递减,用STD指令);指令);(4)串长度放在)串长度放在CX中;中;n (5)在基本串操作指令前加重复前缀符,使)在基本串操作指令前加重复前缀符,使串操作指令重复执行,直至整个串处理完毕,每重串操作指令重复执行,直至整个串处理完毕,每重复一次,复一次,SI和和DI根据方向标志,自动进行修改,根据方向标志,自动进行修改,CX值自动减值自动减1。重复前缀符:。重复前缀符:n REP 无条件重复无条件重复n REPE/REPZ 相等相等/结果为结果为0,则重复,则重复n REPNE/REPNZ 不
44、相等不相等/结果不为结果不为0,则重,则重复复n 注意:所有重复前缀符不能单独使用,必须与注意:所有重复前缀符不能单独使用,必须与基本串操作指令配合使用。基本串操作指令配合使用。n无条件重复前缀无条件重复前缀REP的的操作操作:n 若若CX0,则退出则退出REP,否则继续执行;否则继续执行;n CX1CX;n 执行执行REP后的数据串操作指令;后的数据串操作指令;n 重复步骤重复步骤 。n REP常与常与MOVS、 STOS指令连用,以实现连指令连用,以实现连续的数据串数据传送或串数据的存操作。续的数据串数据传送或串数据的存操作。n条件重复前缀条件重复前缀REPE/REPZ的操作的操作:n 当
45、当ZF1(结果全零,即两数相等),结果全零,即两数相等),且且CX 0时,重复串操作;时,重复串操作;n 直到直到CX0或或ZF0,停止重复过程。停止重复过程。n 条件重复前缀条件重复前缀REPE和和REPZ常与常与CMPS、 SCAS指令连用。指令连用。n条件重复前缀条件重复前缀REPNE/REPNZ的操作的操作:n 当当ZF0(结果不为零,即两数不相结果不为零,即两数不相等),且等),且CX 0时,重复串操作;时,重复串操作;n 直到直到CX0或或ZF1,停止重复过程。停止重复过程。n 条件重复前缀条件重复前缀REPE和和REPZ常与常与CMPS、 SCAS指令连用。指令连用。n指令格式:
46、指令格式:MOVS dst,srcn 或或 MOVSB ;字节操作字节操作n MOVSW ;字操作字操作n指令功能:将源串中由指令功能:将源串中由SI所指一个字节或字所指一个字节或字 元素传送到由元素传送到由DI所指示的目的串中。所指示的目的串中。n 执行后自动修改执行后自动修改SI、DI地址指针。地址指针。n 在串传送指令前加在串传送指令前加REP重复前缀,可实重复前缀,可实现一批数据的传送。现一批数据的传送。n 不影响标志位。不影响标志位。例例3-7 :将数据段中偏移地址为:将数据段中偏移地址为ADDR1开始的开始的100个字节数据传送到附加段中从个字节数据传送到附加段中从ADDR2开始的
47、单元中。开始的单元中。n解:解:nCLD;设设DF0,地址递增地址递增nLEA SI,ADDR1;装载装载ADDR1的偏移地址的偏移地址nLEA DI,ADDR2 ;装载装载ADDR2的偏移地址的偏移地址nMOV CX,100 ;重复次数重复次数100送送CXnREP MOVSB ;完成数据串传送完成数据串传送n 指令格式:指令格式:CMPS dst,srcn 或或 CMPSB ;字节操作字节操作n CMPSW ;字操作字操作n 指令功能:将指令功能:将DS段中由段中由SI所指示的源串中的一个所指示的源串中的一个字节或字元素减去字节或字元素减去ES段中由段中由DI所指示的相对应的一所指示的相对
48、应的一个元素,结果不送回,影响标志位。个元素,结果不送回,影响标志位。n 比较之后,自动修改指针比较之后,自动修改指针SI、DI,指向下一个待指向下一个待 比较的元素。比较的元素。n 常用常用CMPS指令指令来比较两个串是否相同。来比较两个串是否相同。n指令格式:指令格式:SCAS dstn 或或 SCASB ;字节操作字节操作n SCASW ;字操作字操作n指令功能:从累加器指令功能:从累加器AL或或AX中减去中减去ES中由中由DI指示指示的目的串的一个元素,结果不送回,影响标志位。的目的串的一个元素,结果不送回,影响标志位。n 比较之后,自动修改指针比较之后,自动修改指针DI,指向下一个待
49、比指向下一个待比较的元素。较的元素。n 常用常用SCAS指令指令来查找目的串中的关键元素,来查找目的串中的关键元素,待查找的关键数据放在待查找的关键数据放在AL或或AX中中。例例3-9 :在某一数据块中查找是否存在:在某一数据块中查找是否存在“E”字符,若存在,将字符,若存在,将“E”字符所在地址记入字符所在地址记入DX寄存器中,否则将寄存器中,否则将DX置为全置为全“1”。设目。设目的串首元素偏移地址为的串首元素偏移地址为0100H,串长度串长度100(64H)。n解:程序如下:解:程序如下:程序如下:程序如下: nMOV AL,“E” ;关键数据放入关键数据放入ALnMOV CX,64H
50、;串长度串长度100送送CXnMOV DI,0100H ;目的串偏移地址送目的串偏移地址送DInCLD ;设设DF0,地址递增地址递增nREPNE SCASB ;串扫描,与串扫描,与AL值比较值比较nJZ FIND ;相等则转移到相等则转移到FINDnMOV DX,0FFFFH ;不等,则送全不等,则送全1至至DXnJMP STOP ;程序无条件转移到程序无条件转移到STOPnFIND: DEC DI ;相等,取该数的偏移地址相等,取该数的偏移地址nMOV DX,DI ;该地址送该地址送DXnSTOP: HLT ;程序结束程序结束4、 取数据串/数据串装入指令(LODS)n指令格式:指令格式:
51、LODS srcn 或或 LODSB ;字节操作字节操作n LODSW ;字操作字操作n指令功能:把位于指令功能:把位于DS段中由段中由SI所指示的源所指示的源串某一元素取到串某一元素取到AL(或或AX)中,同时修改中,同时修改SI内容使它指向下一元素。内容使它指向下一元素。n 本指令加重复前缀无实际意义,每重复本指令加重复前缀无实际意义,每重复一次,一次,AL(或或AX)中的内容就被修改,只中的内容就被修改,只保留最后一次写入的内容。保留最后一次写入的内容。n 不影响标志位。不影响标志位。n指令格式:指令格式:STOS dst或或 STOB ;字节操作字节操作n STOW ;字操作字操作n指
52、令功能:将累加器指令功能:将累加器AL(或或AX)中的一个字节中的一个字节(或字)传送到附加段中由(或字)传送到附加段中由DI指示的目的串中,同指示的目的串中,同时修改时修改DI内容,使其指向目的串的下一单元。内容,使其指向目的串的下一单元。n 本指令加重复前缀本指令加重复前缀REP可实现将若干内存单可实现将若干内存单元置相同的数据。元置相同的数据。n 不影响标志位。不影响标志位。串操作习题串操作习题314MOV SI,2270H ;源串源串DS:2270HMOV DI,1000H ;目的串目的串ES:1000HMOV CX,0064H ;100个字节个字节CLD ;串方向递增串方向递增REP MOVSBMOV DI,1000HMOV CX,0064HREPNE SCASB ;搜索等于搜索等于AL的字节的字节JNZ STOPDEC DI ;等于等于AL字节的地址字节的地址MOV DI,20H ;送空格的送空格的ASCII码码STOP: HLT2022-5-271652022-5-27166