《第3章 80x86指系统和寻址方式.ppt》由会员分享,可在线阅读,更多相关《第3章 80x86指系统和寻址方式.ppt(96页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式1.1.指令和指令系统指令和指令系统指令是指计算机进行某种操作的命令。指令是指计算机进行某种操作的命令。指令系统是指令的集合。指令系统是指令的集合。助记符是指用英文字母规定的指令符号助记符是指用英文字母规定的指令符号 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式2.2.指令的组成指令的组成 由操作码和操作数组成。由操作码和操作数组成。指令
2、的一般格式如下:指令的一般格式如下:操作码操作码 操作数操作数,操作数操作数 操作码又称指令码,是指指令要进行的是什么样的操作码又称指令码,是指指令要进行的是什么样的操作。操作。操作数是指参加本指令运算的数据。操作数可以是操作数是指参加本指令运算的数据。操作数可以是一个,也可以是两个,还可以没有操作数或隐含操作一个,也可以是两个,还可以没有操作数或隐含操作数。操作数分为三类:立即数操作数、寄存器操作数数。操作数分为三类:立即数操作数、寄存器操作数和存储器操作数。和存储器操作数。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式(1)立即数操作数 立即数是指具有固定数值
3、的操作数。操作数跟随指令操作码一起存放在指令区,故又称为指令区操作数。(2)寄存器操作数 操作数事先存放在某寄存器中(CPU的通用寄存器、专用寄存器或段寄存器)。(3)存储器操作数 操作数存放在存储器中,知道存储器的地址即可寻到操作数。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式3.3.指令的表示方法指令的表示方法 指令用一组二进制编码来表示,计算机根据二进制指令用一组二进制编码来表示,计算机根据二进制代码去完成所需的操作。常用助记符与操作数来表代码去完成所需的操作。常用助记符与操作数来表示指令。示指令。第第3 3章章 80 x8680 x86指令系统和寻址方式
4、指令系统和寻址方式 寻址方式寻址方式是指如何求出操作数有效地址的方法。寻址操作是指计算机按照指令给出的寻址方式求出操作数有效地址的过程。根据操作数的类型及来源大致分为三类:数据寻址、转移地址寻址、I/O 寻址。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式7 7 种基本的数据寻址方式种基本的数据寻址方式(1)(1)立即寻址立即寻址(2)(2)寄存器寻址寄存器寻址(3)(3)直接寻址直接寻址(4)(4)寄存器间接寻址寄存器间接寻址(5)(5)寄存器相对寻址寄存器相对寻址(6)(6)基址变址寻址基址变址寻址(7)(7)相对基址变址寻址相对基址变址寻址第第3 3章章 8
5、0 x8680 x86指令系统和寻址方式指令系统和寻址方式 1.立即寻址操作数直接包含在指令中。跟在操作码的后面,与操作码一起放在代码段区域中。例如:MOV AX,3000H立即数可以是8 位的,也可以是16 位的。若是16 位的,则存储时低位在前,高位在后。立即寻址主要用来给寄存器或存储器赋初值。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 2.2.直接寻址直接寻址操作数地址的操作数地址的1616位偏移量直接包含在指令位偏移量直接包含在指令中。它与操作码中。它与操作码起存放在代码段区域起存放在代码段区域例如:例如:MOV AXMOV AX,DSDS:2000H
6、2000H;0000偏移量低字节偏移量低字节2020偏移量高字节偏移量高字节第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 这种寻址方法是以数据段的地址为基这种寻址方法是以数据段的地址为基础,可在多达础,可在多达64 KB64 KB的范围内寻找操作数。的范围内寻找操作数。允许段超越,即还允许操作数在以代码段、允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。堆栈段或附加段为基准的区域中。MOV MOV AXAX,2000H 2000H;数据段;数据段MOV BXMOV BX,ESES:3000H 3000H;段超越,操作;段超越,操作数在附加段数
7、在附加段即绝对地址即绝对地址=(ESES)16+3000H 16+3000H 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 3.寄存器寻址寄存器寻址是指操作数存放在寄存器中。对于16 位操作数,寄存器可以是:AX,BX,CX,DX,SI,DI,SP,BP,CS,DS,SS,ES;对8 位操作数,寄存器可以是:AH,AL,BH,BL,CH,CL,DH,DL。例如:MOV DS,AX MOV AL,BH第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式特点:(1)操作数在寄存器中,寄存器在CPU 内部,指令执行时,操作就在CPU 的内部进行
8、,不需要访问存储器来取得操作数,因而执行速度快。(2)寄存器符号比内存地址短,汇编后机器码长度最短。(3)寄存器寻址方式既可用于源操作数,也可用于目标操作数,还可以两者都用寄存器寻址方式。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 4.寄存器间接寻址操作数是在存储器中,但是,操作数地址的16 位偏移量包含在以下四个寄存器SI,DI,BP,BX 之一中。可以分成两种情况:(1)以SI,DI,BX 间接寻址,则通常操作数在现行数据段区域中,即数据段寄存器(DS)16 加上SI,DI,BX 中的16 位偏移量,为操作数的地址 第第3 3章章 80 x8680 x86
9、指令系统和寻址方式指令系统和寻址方式例如:MOV AX,SI 操作数地址是:(DS)16+(SI)00偏移量低字节20偏移量高字节第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (2)寄存器BP 间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器(SS)16与BP 的内容相加作为操作数的地址 例如:MOV AX,BP 操作数地址是:(SS)16+(BP)若在指令中规定是段超越的,则BP的内容也可以与其他的段寄存器相加,形成操作数地址。例如:MOV AX,DS:BP 操作数地址是:(DS)16+(BP)第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统
10、和寻址方式 5.寄存器相对寻址(变址寻址)由指定的寄存器内容,加上指令中给出的8 位或16 位偏移量作为操作数的偏移地址。可以作为寄存器变址寻址的四个寄存器是SI,DI,BX,BP。(1)若用SI,DI 和BX 作为变址,则与数据段寄存器相加,形成操作数的地址即默认在数据段;(2)若用BP 变址,则与堆栈段寄存器相加,形成操作数的地址即默认在堆栈段。例如:MOV AX,COUNTSI;操作数地址是:(DS)16+(SI)+COUNT第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 6.基址变址寻址 把BX 和BP 看成是基址寄存器,把SI,DI 看着是变址寄存器,把
11、一个基址寄存器的内容加上一个变址寄存器的内容,再加上指令中指定的8位或16 位偏移量作为操作数的偏移地址 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 操作数在存储器中,其偏移地址由(基址寄存器(变址寄存器)+相对偏移量形成。例如:MOV AX,BXSI 或MOV AX,BX+SI也可放置一个相对偏移量,如COUNT,MASK 等,用于表示相对寻址。MOV AX,MASKBXSIMOV BH,COUNTDIBP;MOV BH,COUNTBP+DI若用BX 作为基地址,则操作数在数据段区域若用BP 作为基地址,则操作数在堆栈段区域第第3 3章章 80 x8680
12、x86指令系统和寻址方式指令系统和寻址方式 7.相对基址变址寻址相对基址变址寻址中操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和8 位或16 位位移量这三者之和。例如:MOV AX,BX+SI+0080H,即将BX 与SI 中的内容与0080H 相加作有效地址。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 例如:设BX=0123H DI=1000H DS=3200H,默认DS 作为操作数对应的段寄存器(假定没使用段前缀),试指出下列指令的寻址方式,并写出其操作数的有效地址和物理地址。(1)MOV AX,1A38H(2)MOV AX,BX(3)MOV A
13、X,BX+1A38H(4)MOV AX,BX+DI(5)MOV AX,BX+DI+1A38H第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式(1)直接寻址有效地址=1A38H,物理地址=32000H+1A38H=33A38H(2)寄存器间接寻址有效地址=0123H,物理地址=32000H+0123H=32123H(3)寄存器相对寻址有效地址=0123H+1A38H=1B5BH,物理地址=32000H+1B5B=33B5BH第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 4)基址变址寻址 有效地址=0123H+1000H=1123H,物理
14、地址=32000H+0123H=33123H(5)相对基址变址寻址有效地址=0123H+1000H+1A38H=2B5BH,物理地址=32000H+2B5BH=34B5BH第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式指令中用到的一些符号所表示的含义。mem 存储器操作数opr 表示操作数ac 累加器操作数(AX 或AL)src 源操作数dist 目的操作数data 立即数第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式disp 8 位或16 位位移量port 输入输出端口,可用数字或表达式表示 存储单元的内容 reg 寄存器segre
15、g 段寄存器count 移位次数,可以是1 或CL第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式指令系统分为:数据传送类指令算术运算类指令逻辑运算与移位类指令串操作类指令控制转移类指令处理器控制指令 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 1.1.数据传送数据传送MOV MOV 指令指令 一般格式:MOV OPRD1,OPRD2MOV 是操作码,OPRD1 和OPRD2 分别是目的操作数和源操作数。功能:完成数据传送 具体来说,一条数据传送指令能实现:(1)CPU 内部寄存器之间数据的任意传送 MOV CX,BX;字传送 第第
16、3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (2)立即数传送至CPU 内部的通用寄存器组(即AX,BX,CX,DX,BP,SP,SI,DI)。MOV CL,4 (3)CPU 内部寄存器(除了CS 和IP 以外)与存储器(所有寻址方式)之间的数据传送。MOV AL,BUFFER第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式(4)能实现用立即数给存储单元赋值MOV 2000H,25H对于MOV 指令应注意几个问题:存储器传送指令中,不允许对CS 和IP 进行操作 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式
17、 两个操作数中,除立即寻址之外必须有一个为寄存器寻址方式,即两个存储器操作数之间不允许直接进行信息传送;如我们需要把地址(即段内的地址偏移量)为AREAl 的存储单元的内容,传送至同一段内的地址为AREA2 的存储单元中去,MOV 指令不能直接完成这样的传送,但我们可以CPU 内部寄存器为桥梁来完成这样的传送第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;如:MOV DS,0;MOV DS,ES 目的操作数,不能用立即寻址方式 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系
18、统和寻址方式 2.2.堆栈指令堆栈指令堆栈是“先进后出,后进先出”的一种数据结构 (1)(1)入栈指令入栈指令PUSHPUSH一般格式:PUSH OPRD源操作数可以是CPU 内部的16 位通用寄存器、段寄存器(CS 除外)和内存操作数(所有寻址方式)。入栈操作对象必须是16 位数。功能:将数据压入堆栈执行步骤为:SP=SP-2;SP=操作数低8 位;SP+1=操作数高8 位第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式例如:PUSH BX执行过程为:SP=SP-1,SP=BH;SP=SP-1,SP=BL第第3 3章章 80 x8680 x86指令系统和寻址方式指
19、令系统和寻址方式 (2)(2)出栈指令出栈指令POPPOP一般格式:POP OPRD功能:将数据弹出堆栈对指令执行的要求同入栈指令。例如:POP AX POP BX POP DS在调用子程序或转入中断服务程序时,堆栈被用于保存返回地址。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 3.3.交换指令交换指令XCHGXCHG一般格式:XCHG OPRD1,OPRD2功能:完成数据交换段寄存器和立即数不能作为一个操作数,不能在累加器之间进行。例如:XCHG AL,CL XCHG AX,DI第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 利
20、用XCHG,实现两个内存单元VALUE1 和VALUE2 的内容互换 MOV AX,VALUE1 XCHG AX,VALUE2 MOV VALUE1,AX 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 4.4.累加器专用传送指令累加器专用传送指令(1)IN(1)IN 指令指令一般格式:一般格式:IN ALIN AL,n n;B ALnB ALn,直接寻址直接寻址IN AXIN AX,n n;W AXn+1nW AXn+1n,直接寻址直接寻址IN ALIN AL,DX DX;B ALDXB ALDX,间接寻址间接寻址IN AXIN AX,DX DX;W AXDX+
21、1DXW AXDX+1DX,间接寻址,间接寻址功能:从功能:从I/O I/O 端口输入数据至端口输入数据至AL AL 或或AXAX。输入指令允许把一个字节或一个字由一个输入端口传送输入指令允许把一个字节或一个字由一个输入端口传送到到AL AL 或或AX AX 中。若端口地址超过中。若端口地址超过255 255 时,则必须用时,则必须用DX DX 保存保存端口地址,这样用端口地址,这样用DX DX 作端口寻址最多可寻找作端口寻址最多可寻找64K 64K 个端口。个端口。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (2)OUT 指令 一般格式:OUT n,AL;B
22、 ALn,直接寻址OUT n,AX;W AXn+1n,直接寻址OUT DX,AL;B ALDX,间接寻址OUT DX,AX;W AXDX+1DX,间接寻址功能:将AL 或AX 的内容输出至I/O 端口。该指令将AL 或AX 中的内容传送到一个输出端口。端口寻址方式与IN 指令相同。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 例如:使用间接寻址方式实现:从端口60H 读字节,把它低4 位清零后,再从61H送出。MOV DX,60H;源端口地址送DX 寄存器中IN AL,DX;从60H 读8 位数AND AL,0F0H;低4 位清0INC DX;DX 寄存器内容为
23、目标端口地址OUT DX,AL;从61H 送出数据第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式注意:对外设端口操作时,当端口地址在0255(0FFH)范围内,寻址方式可选用直接寻址,也可选用间接寻址;当端口地址大于255 时,只能选用间接寻址,并且地址寄存器只能用DX。数据寄存器只能用AL(字节操作)或AX(字操作)第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (3)XLAT 换码指令一般格式:XLAT;AL=(DS)16+(BX)+(AL)功能:完成一个字节的查表转换。要求:寄存器AL 的内容作为一个256 字节的表的下标。表的
24、基地址在BX 中。转换后的结果存放在AL 中 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 例如:表格例如:表格TABLE TABLE 中定义了十六进制数中定义了十六进制数0 0F F 的的ASCII ASCII 码,取出码,取出A A 的的ASCII ASCII 码。码。相关的指令如下:相关的指令如下:TABLE DB 0TABLE DB 0,11,22,33,44,55,66,77DB 8DB 8,99,AA,BB,CC,DD,EE,F F;数;数据定义据定义LEA BXLEA BX,TABLE TABLE;把表格首地址送到;把表格首地址送到BX BX 寄存
25、器中寄存器中MOV ALMOV AL,10 10;字符序号送到;字符序号送到AL AL 寄存器中寄存器中XLAT XLAT;AL=AL=A A=65H=65H 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 5.地址传送指令地址是一种特殊操作数,区别于一般数据操作数,它无符号,长度为16位。(1)有效地址传送指令LEA一般格式:LEA OPRD1,OPRD2功能:把源操作数OPRD2 的地址偏移量传送至目的操作数OPRD1。要求:源操作数必须是一个内存操作数,目的操作数必须是一个16 位的通用寄存器。这条指令通常用来建立串操作指令所须的寄存器指针。第第3 3章章
26、80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (2)指针传送指令LDS一般格式:LDS OPRD1,OPRD2功能:完成一个地址指针的传送。地址指针包括段地址部分和偏移量部分。指令将段地址送入DS,偏移量部分送入一个16 位的指针寄存器或变址寄存器。要求:源操作数是一个内存操作数,目的操作数是一个通用寄存器/变址寄存器。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 例如:LDS SI,BX;将把BX 所指的32 位地址指针的段地址部分送入DS,偏移量部分送入SI。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (3)
27、LES一般格式:LES OPRD1,OPRD2这条指令除将地址指针的段地址部分送入ES 外,与LDS 类似。例如:LES DI,BX+COUNT第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式(1)LAHF(1)LAHF将标志寄存器中的将标志寄存器中的SFSF,ZFZF,AFAF,PF PF 和和CFCF(即低(即低8 8 位)位)传送至传送至AH AH 寄存器的指定位,空位没有定义。寄存器的指定位,空位没有定义。(2)SAHF(2)SAHF将寄存器将寄存器AH AH 的指定位,送至标志寄存器的的指定位,送至标志寄存器的SFSF,ZFZF,AFAF,PF PF 和和
28、CF CF 位(即低位(即低8 8 位)。根据位)。根据AH AH 的内容,影响上述标的内容,影响上述标志位,对志位,对OFOF,DF DF 和和IF IF 无影响。无影响。例:利用例:利用LAHFLAHF,SAHF SAHF 把标志位把标志位CF CF 求反,其他位不变。求反,其他位不变。LAHF LAHF;取标志寄存器的低;取标志寄存器的低8 8 位位XOR AHXOR AH,01H 01H;最低位求反,其他位不变;最低位求反,其他位不变SAHF SAHF;送入标志寄存器的低;送入标志寄存器的低8 8 位位第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (3)
29、PUSHF (3)PUSHF将标志寄存器压入堆栈顶部,同时修改堆栈指针,不影将标志寄存器压入堆栈顶部,同时修改堆栈指针,不影响标志位。响标志位。(4)POPF(4)POPF堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。指针,影响标志位。例:把标志寄存器例:把标志寄存器TF TF 位清零,其他标志位不变。位清零,其他标志位不变。PUSHF PUSHF;标志寄存器入栈;标志寄存器入栈POP AX POP AX;取标志寄存器内容;取标志寄存器内容AND AXAND AX,0FEFFH 0FEFFH;TF TF 清零,其他位不变清零,
30、其他位不变PUSH AX PUSH AX;新值入栈;新值入栈POPF POPF;送入标志寄存器;送入标志寄存器第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 1.1.加法指令加法指令(1)ADD一般形式:ADD OPRD1,OPRD2功能:OPRD1OPRD1+OPRD2完成两个操作数相加,结果送至目的操作数OPRD1。目的操作数可以是累加器,任意一寄存器以及存储器操作数。ADD DX,DATABX+SI;通用寄存器与存储单元内容相加指令对标志位CF,DF,PF,SF,ZF 和AF 有影响。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方
31、式 (2)ADC(带进位的加法)一般形式:ADC OPRD1,OPRD2功能:OPRD1OPRD1+OPRD2+CF在两个操作数相加时,要把进位标志CF 的现行值加上去,结果送至目的操作数。ADC 指令主要用于多字节运算中。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (3)INC (3)INC一般形式:一般形式:INC OPRDINC OPRD功能:功能:OPRDOPRD+1OPRDOPRD+1完成对指定的操作数完成对指定的操作数OPRD OPRD 加加1 1,然后返,然后返回此操作数。此指令主要用于在循环程序回此操作数。此指令主要用于在循环程序中修改地址指针
32、和循环次数等。对进位标中修改地址指针和循环次数等。对进位标志没有影响志没有影响 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 2.2.减法指令减法指令(1)SUB(1)SUB一般形式:一般形式:SUB OPRD1SUB OPRD1,OPRD2OPRD2功能:功能:OPRD1OPRD1-OPRD2OPRD1OPRD1-OPRD2完成两个操作数相减,也即从完成两个操作数相减,也即从OPRD1 OPRD1 中中减去减去OPRD2OPRD2,结果放在,结果放在OPRD1 OPRD1 中。中。例如:例如:SUB CXSUB CX,BXBXSUB BPSUB BP,CLCL
33、第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (2)SBB (2)SBB一般形式:一般形式:SBB OPRD1SBB OPRD1,OPRD2OPRD2功能:功能:OPRD1OPRD1-OPRD2-CFOPRD1OPRD1-OPRD2-CF在两个操作数相减时,还要减去借位标在两个操作数相减时,还要减去借位标志志CF CF 的现行值的现行值 本指令主要用于多字节操作数相减本指令主要用于多字节操作数相减 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (3)DEC一般形式:DEC OPRD功能:OPRDOPRD-1对指令的操作数减1,然后
34、送回此操作数,在相减时,把操作数作为一个无符号二进制数来对待。对CF 标志不影响第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (4)NEG (4)NEG一般形式:一般形式:NEG OPRDNEG OPRD功能:取补功能:取补对操作数取补,即用零减去操作数,再把结果送回操作对操作数取补,即用零减去操作数,再把结果送回操作数。数。例如:例如:NEG ALNEG ALNEG MULRENEG MULRE(AL=00111100AL=00111100)则取补后为)则取补后为1100010011000100即即00000000-00111100=1100010000000
35、000-00111100=11000100若在字节操作时对若在字节操作时对-128-128,或在字操作时对,或在字操作时对-32768-32768 取补,取补,则操作数没变化,但标志则操作数没变化,但标志OFOF置位。置位。一般总是使标志一般总是使标志CF=1CF=1。除非在操作数为零时,才使。除非在操作数为零时,才使CF=0CF=0 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (5)CMP一般形式:CMP OPRD1,OPRD2功能:OPRD1-OPRD2比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果例如:CMP AL,100第第3 3章章
36、 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 相等的比较:相等的比较:若两者相等,相减后结果为零,若两者相等,相减后结果为零,ZF ZF 标志为标志为1 1,否则为,否则为0 0。若两者不相等,则可在比较指令之后利用其他标志位若两者不相等,则可在比较指令之后利用其他标志位的状态来确定两者的大小。的状态来确定两者的大小。大小的比较:大小的比较:如果是两个无符号数(如如果是两个无符号数(如CMP AXCMP AX,BXBX)进行比较,则可)进行比较,则可以根据以根据CF CF 标志的状态判断两数大小。若结果没有产生借位标志的状态判断两数大小。若结果没有产生借位(CF=0CF=0)
37、,显然),显然AXBXAXBX;若产生了借位(即;若产生了借位(即CF=1CF=1),则),则AXAXBXBX。如果是两个符号数进行比较,则分两种情况。不发生溢。如果是两个符号数进行比较,则分两种情况。不发生溢出(出(OF=0OF=0)时,如果)时,如果SF=0SF=0,则,则ABAB,如果,如果SF=1SF=1,则,则ABABAB,如果,如果SF=0SF=0,则,则ABAYXY,AL AL 为为1 1,如果,如果XYXY,AL AL 为为0 0,如果,如果X=YX=Y,AL AL 为为0FFH0FFH。解:设解:设X X,Y Y 为内存变量,功能实现主要代码如下:为内存变量,功能实现主要代码
38、如下:MOV AXMOV AX,X XCMP AXCMP AX,Y YJLE LEJLE LEMOV ALMOV AL,1 1;如果;如果X X 大于大于Y Y,AL=1AL=1JMP DONEJMP DONELELE:JL LJL LMOV ALMOV AL,0FFH 0FFH;如果;如果X X 等于等于Y Y,AL=0FFHAL=0FFHJMP DOWNJMP DOWNL L:MOV ALMOV AL,0 0;如果;如果X X 小于小于Y Y,AL=0AL=0DONEDONE:HLTHLT第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 3.3.循环控制指令循环
39、控制指令为了简化程序设计,设置了一组循环指令,这组指令主要对CX 或标志位ZF 进行测试,确定是否循环 第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式例:有一首地址为例:有一首地址为ARRAY ARRAY 的的M M 个字数组,试编写个字数组,试编写一段程序,求出该数组的内容之和(不考虑溢出)一段程序,求出该数组的内容之和(不考虑溢出),并把结果存入,并把结果存入TOTAL TOTAL 中,程序段如下:中,程序段如下:MOV CXMOV CX,M M;设计数器初值;设计数器初值MOV AXMOV AX,0 0;累加器初值为;累加器初值为0 0MOV SIMOV S
40、I,AX AX;地址指针初值为;地址指针初值为0 0STARTSTART:ADD AXADD AX,ARRAYSIARRAYSIADD SIADD SI,2 2;修改指针值(字操作,因此加;修改指针值(字操作,因此加2 2)LOOP START LOOP START;重复;重复MOV TOTALMOV TOTAL,AX AX;存结果;存结果第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 标志处理指令用来控制标志,主要有CF,DF 和IF 三个。处理器控制指令用以控制处理器的工作状态,均不影响标志位 CPU 控制类指令用于控制CPU 的动作,这类指令不影响标志位。(
41、1)处理器暂停指令HLT格式:HLT功能:使处理器处于暂停状态。说明:由HLT 引起的CPU 暂停,只有复位(RESET 信号)、外中断请求(NMI 信号或INTR 信号)可使其退出。常用于等待中断或多处理机系统的同步操作。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (2)处理器等待指令WAIT格式:WAIT功能:处理器检测TEST 引脚信号,当TEST 有效时,则退出等待状态执行后续指令,否则处理器处于等待状态,直到TEST 有效。(3)处理器交权指令ESC格式:ESC ext-op,memext-op 是其他处理器的一个操作码,称“外操作码”,mem 是内存操作数。功能:使外部处理器能从8086 指令流中取得它们的操作指令,同时指示8086/8088CPU 取出内存操作数,放到数据总线上,以供使用。第第3 3章章 80 x8680 x86指令系统和寻址方式指令系统和寻址方式 (4)封锁总线指令LOCK格式:LOCK 其他指令LOCK 指令是一个前缀,可放在任何指令的前面。功能:封锁总线。在指令执行期间,不允许其他设备对总线进行访问。共享资源的多处理器系统中,必须提供一些手段对这些资源的存取进行控制,指令前缀是一种手段。
限制150内