第4章80X86指令系统_第1页
第4章80X86指令系统_第2页
第4章80X86指令系统_第3页
第4章80X86指令系统_第4页
第4章80X86指令系统_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4 4章章 80X8680X86指令系统指令系统14.14.1操作数寻址方式操作数寻址方式4.24.2指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统24.14.1操作数寻址方式操作数寻址方式4.1.1 80X864.1.1 80X86指令格式指令格式 指令由操作码和操作数两部分构成。操作码表明指令要进行什么样的操作;操作数是参加本指令操作的数据。操作数的表现形式比较复杂,可以是参与操作的数值,也可以是参与操作的数值的“地址”,需要通过寻址方式来体现。操作码操作码操作数操作数介绍操作数之前,首先要清楚计算机中的数据可以存放在哪里呢?介绍操作数之前,首先要清楚计算机中的数

2、据可以存放在哪里呢?在计算机运行过程中大量的数据存储器中(MEM),这部分数据处理时需要给出操作数所在存储单元的地址;少量数据可以放在寄存器中,使用时也需要给出其地址;接口中也有寄存器,对其访问需给出其端口地址(第7章介绍)。第第4 4章章 80X8680X86指令系统指令系统34.1.2 4.1.2 操作数的类型操作数的类型1.1.存储器操作数存储器操作数存放在代码段中的数据是指令格式编码的一部分,在取指令是就随指令被取到CPU,直接可以参加指令操作,通常称为立即数。存储器分为代码段、数据段、附加段和堆栈段,存放在数据段、附加段和堆栈段中的数据即存储器操作数,其地址表示比较复杂,将在寻址方式

3、中做详细介绍;存放在外设端口中的数据称为端口操作数,CPU使用专用的IN、OUT指令来对端口进行访问。2.2.立即操作数立即操作数3.3.寄存器操作数寄存器操作数存放在寄存器中的数据称为寄存器操作数。4.4.端口操作数端口操作数4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统44.1.3 80X864.1.3 80X86指令格式指令格式80X8680X86机器指令格式通常1-6个字节组成。典型的指令格式由2个字节组成,如下图所示。操作码MOD REGR/M第一字节操作码字段表明该指令要完成什么操作。第二字节表明参加操作数据的地址,用来表明参入本次操作

4、的数据及其类型,双操作数不能同为存储器操作数。其中:MOD段(2Bit):表示操作数的类型REG段(3Bit):表示其中一个操作数为寄存器操作数R/M段(3Bit):表示另外一个操作数为寄存器或存储器操作数4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统54.1.4 4.1.4 操作数寻址方式操作数寻址方式 所谓操作数的寻址方式,是在指令格式中怎样有效的表示出操作数的存放位置,CPU在执行该指令时,按照指令格式中的表示找到并对数据进行存取。1.1.立即寻址(立即寻址(Immediate AddressingImmediate Addressing)

5、立即寻址中的操作数作为指令的一部分存放在代码段中,在取指阶段数据随指令一起被取到CPU,这种数据在指令格式中的直接表现为常数。如:MOV AL,34H代码段代码段1000H:0000H1000H:0000H1000H:0100H1000H:0100H操作码操作码34H34HAHAL注:立即数可理解为常数,在指令中只能作为源操作数4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统64.1.4 4.1.4 操作数寻址方式操作数寻址方式2.2.寄存器寻址(寄存器寻址(Register AddressingRegister Addressing)寄存器寻址是指

6、操作数存放在规定的寄存器中。寄存器寻址是指操作数存放在规定的寄存器中。例如:MOV AX,BXAHAL1616位寄存器:位寄存器:AXAX、BXBX、CXCX、DXDX、 SPSP、BPBP、DIDI、SISI;8 8位寄存器:位寄存器:AHAH、BHBH、CHCH、DHDH、 ALAL、BLBL、CLCL、DLDL;1616位段寄存器:位段寄存器:CSCS、DSDS、ESES、SSSS。SSSS、DSDS、ESES既可以作为源操作数,也可既可以作为源操作数,也可以作为目的操作数,但不能互为目的操以作为目的操作数,但不能互为目的操作数。作为目的操作数时,源操作数不作数。作为目的操作数时,源操作

7、数不能是立即数,能是立即数,CSCS只能作为源操作数。只能作为源操作数。 BHBL4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统74.1.4 4.1.4 操作数寻址方式操作数寻址方式 存储器操作数的寻址方式中,数据都存放于存储单元中,指令操作过程中需要BIU通过一个总线周期的访问,才能获取操作数。存储器操作数的寻址方式是怎么计算出操作数的有效地址EA(Effective Address)。有效地址EA是三个地址量因子一个以上组合,由CPU执行单元EU计算出来。 3.3.存储器寻址(存储器寻址(Memory AddressingMemory Addr

8、essing)位移量因子(Displacement):位移量是指令中直接给出的一个8/16位数;基址量因子(Base):由基址寄存器BX或BP提供的内容;变址量因子(Index):由变址寄存器SI或DI提供的内容。注:3个地址量因子组合有7种方式。根据组合后地址量因子的特点,最终合并成5种寻址方式。4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统84.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器寻址之直接寻址存储器寻址之直接寻址(Direct Addressing)(Direct Addressing) 在指令格式中直接给出操作数的有效地址

9、,指令执行时CPU根据给出的有效地址,在相应存储单元存取数据。 有效地址EA=位移量(只取位移量因子) MOV AX,2000H 操作如图所示:数据段数据段3000H:0000H3000H:0000H3000H:2000H3000H:2000H34H12HAHAL注:存储器操作数都是给出其首地址双操作数指令中,两个操作数不能都是存储器操作数存储器操作数无超越前缀时,默认段地址为DS;有BP参入寻址时默认为SS4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统9存储器寻址之存储器寻址之寄存器间接寻址(寄存器间接寻址(Register Indirect A

10、ddressing) 4.1.4 4.1.4 操作数寻址方式操作数寻址方式有效地址EA存放在基址寄存器(BX或BP)或变址寄存器(DI或SI)中 EA=(BX/BP)或(SI/DI)取一个基地址或变地址因子MOV AX,BX 操作如图所示 数据段数据段3000H:0000H3000H:0000H3000H:2000H3000H:2000H34H12HAHAL20H00HBX+注:BX、SI和DI访问默认为数据段BP访问默认为堆栈段4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统104.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器寻址之寄存器

11、相对寻址(存储器寻址之寄存器相对寻址(Register Relative AddressingRegister Relative Addressing) 操作数有效地址EA 是8/16位的位移量(DISP8/16)与基址(变址)寄存器BX、BP、DI、SI之和生成。 EA=(BX或BP或SI或DI)+DISP8/16 MOV AX,BX+10H 操作如图所示数据段数据段3000H:0000H3000H:0000H3000H:2010H3000H:2010H34H12HAHAL20H00HBX+0100H0100H注:BX、SI和DI访问默认为数据段BP访问默认为堆栈段有效地址由两个因子构成4.

12、14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统114.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器寻址之基址加变址寻址(存储器寻址之基址加变址寻址(Base-plus-Index AddressingBase-plus-Index Addressing) 有效地址EA是一个基址量与一个变址量之和构成。EA=(BX/BP)+(SI/DI)MOV AX,BX+SI 操作如图所示 数据段数据段3000H:0000H3000H:0000H3000H:3000H3000H:3000H34H12HAHAL20H00HBX+10H00HSI+注:基址因子B

13、P访问默认为堆栈段不能同时取两个基址因子;也不能同时去两个变址因子4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统124.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器寻址之相对基址加变址寻址(存储器寻址之相对基址加变址寻址(Base Relative -plus-Index AddressingBase Relative -plus-Index Addressing) 有效地址是一个8/16位移量和一个基址与变址之和构成 EA=(BX/BP)+(SI/DI)+ DISP8/16 MOV AX,BX+SI+10H 操作如图所示 数据段数据段3

14、000H:0000H3000H:0000H3000H:3000H3000H:3000H34H12HAHAL20H00HBX+10H00HSI+3000H:3000H3000H:3000H+0010H0010H注:基址因子BP访问默认为堆栈段不能同时取两个基址因子;也不能同时去两个变址因子4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统134.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器操作数和寄存器操作数寻址方式,怎样在指令格式中体现呢?前节介绍的指令格式中的MOD段,MOD=11时表示两个操作数都为寄存器操作数;MOD11时表示R/M段所

15、表示的操作数为存储器操作数,具体如下表所示。MODMODR/MR/M存储器寻址存储器寻址REGREG寻址寻址逻辑地址的计算公式逻辑地址的计算公式W=0W=0W=1W=1mod=00mod=00mod=01mod=01mod=10mod=10mod=11mod=11000000001001010010011011100100101101110110111111DS:BX+SIDS:BX+SIDS:BX+DIDS:BX+DISS:BP+SISS:BP+SISS:BP+DISS:BP+DIDS:SIDS:SIDS:DIDS:DIDS:direct16DS:direct16DS:BXDS:BXDS:B

16、X+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+disp8SS:BP+disp8SS:BP+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+disp1

17、6SS:BP+DI+disp16DS:SI+disp16DS:SI+disp16DS:DI+disp16DS:DI+disp16SS:BP+disp16SS:BP+disp16DS:BX+disp16DS:BX+disp16ALALCLCLDLDLBLBLAHAHCHCHDHDHBHBHAXAXCXCXDXDXBXBXSPSPBPBPSISIDIDIR/M字段为寄存器操作数R/M字段为存储器操作数直接寻址寄存器间接寻址基址+变址寻址相对寻址相对的基址+变址寻址没有位移量8位位移量16位位移量4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统144.1.

18、4 4.1.4 操作数寻址方式操作数寻址方式4 4端口寻址(端口寻址(Port AddressingPort Addressing) 80X86系列CPU在访问外设时使用10根地址线A9-A0,其实际访问空间为210=1K。根据通常书写习惯当高2为A9A8=00时,直接书写低8位,可直接出现在指令格式中即端口的直接寻址;当A9A800时,要按照16为的数据书写,不能直接出现在指令格式中,要预先送到DX寄存器中,即端口的间接寻址。A9A8A7A6A5A4A3A2A1A0 0 0 X X X X X X X X 0 1 X X X X X X X X 1 0 X X X X X X X X 1 1

19、 X X X X X X X XIN AL,20HOUT 20H,AL20H为端口地址MOV DX,200HIN AL,DXOUT DX,AL200H为端口地址4.14.1操作数寻址方式操作数寻址方式第第4 4章章 80X8680X86指令系统指令系统154.2 4.2 指令系统指令系统80X86指令系统,按照其功能可以分为以下六个功能组: 数据传送(Data Transfer) 算术运算(Arithmetic) 逻辑运算(Logic) 串操作(String Manipulation) 程序控制(Program Control) 处理器控制(Processor Control) 不同指令其操作

20、数的数量不同,主要有3种格式:(1)无操作数指令;(2)单操作数指令;(3)双操作数指令。 在学习指令过程中要注意3个方面事项:(1)指令隐含功能;(2)指令特殊用途;(3)指令对标志位影响。 第第4 4章章 80X8680X86指令系统指令系统164.2.1 4.2.1 数据传送指令数据传送指令4.2 4.2 指令系统指令系统传送指令是将数据送寄存器或者存储单元中;在寄存器之间、寄存器与存储器之间进行数据传送。其传递遵循如图所示规则:立即数立即数DS、ES、SSCS通用寄存器通用寄存器存储器存储器立即数送寄存器立即数送寄存器立即数送存储器立即数送存储器立即数只能立即数只能做源操作数做源操作数

21、寄存器间可以互寄存器间可以互为目的操作数为目的操作数寄存器与存储其可以寄存器与存储其可以互为目的操作数互为目的操作数DS、ES、SS不能互为目的操作数CSCS只能做源操作数只能做源操作数注:图中没有直接连接箭头指向的,可以用过转跳点过度,如图中没有直接连接箭头指向的,可以用过转跳点过度,如MOV DSMOV DS,1234H1234H可以改为:可以改为: MOV AXMOV AX,1234H1234H和和MOV DSMOV DS,AXAX来实现。来实现。第第4 4章章 80X8680X86指令系统指令系统174.2.1 4.2.1 数据传送指令数据传送指令1. 1. 通用数据传送指令通用数据传

22、送指令 (1)传送指令MOV:MOV DEST,SRC 功能:将源操作数送入指定目的操作数该类指令不影响状态标志位 MOV AX,BX+SI+10H 操作如图所示 数据段数据段3000H:0000H3000H:0000H3000H:3000H3000H:3000H34H12HAHAL20H00HBX+10H00HSI+3000H:3000H3000H:3000H+0010H0010H注注4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统184.2.1 4.2.1 数据传送指令数据传送指令1. 1. 通用数据传送指令通用数据传送指令 (2)交换指令XCHG:XC

23、HG DEST,SRC 功能:将源操作数、目的操作数内容互换两个操作数不能同为存储器操作数。MOV AX,BX操作如图所示 BHBLBX注注AHALAX(3)查表指令XLAT:XLAT 功能:ALDS:BX+AL。把BX的内容作为数据段中数据表的首地址,AL内容为查表的项数,将其对应的字节单元的值再送给AL 3000H:0000H3000H:0000H3000H:2000H3000H:2000H3000H:2005H3000H:2005H数据段数据段+2000BX表首址表首址查表项查表项+AL 05HAL 05H34H34H4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指

24、令系统指令系统194.2.1 4.2.1 数据传送指令数据传送指令1. 1. 通用数据传送指令通用数据传送指令 (4)压栈指令PUSH:PUSH SRC 功能:SPSP-2,SPSRC,将栈顶指针上移两个字节后将源操作数压入堆栈 PUSH AX执行如图所示 SS:0000H12H34HAXSS:0102HSS:0100H01H02HSP01H00HSPSPSP堆栈堆栈12H34H(5)弹栈指令POP:POP DEST 功能: DESTSP、SPSP+2,将栈顶内容弹到目的操作数中,然后堆栈的栈顶指针下移两个字节 POP AX执行如图所示 SS:0000HXXHXXHAXSS:0102HSS:0

25、100H01H00HSP01H02HSPSPSP堆栈堆栈12H34H12H34HAX4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统202. 2. 地址传送指令地址传送指令 4.2.1 4.2.1 数据传送指令数据传送指令(1)(1)取取EAEA指令指令LEALEA:LEA REGLEA REG,MEMMEM 功能:将源操作数的有效地址送功能:将源操作数的有效地址送指定寄存器指定寄存器 LEA BX,DI指令执行如图所示 :数据段数据段4000H:0000H0100HDIXXXXHBX0100HBX4000H:0100HEA=0100H55H66H(2)(2

26、)取地址指令取地址指令LDSLDS:LDS REGLDS REG,MEMMEM 功能:将MEM所对应的双字存储单元数据的高字送入DS,低字送入指令指定的寄存器 。MEM为双字数据为双字数据。LDS BX,DI指令执行如图所示 :数据段数据段4000H:0000H0100HDIXXXXHBXXXXXHDS4000H:0100H55H66H33H44H双字双字6655HBX4433HDS(3)LES(3)LES的原理与的原理与LDSLDS相似相似4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统214.2.1 4.2.1 数据传送指令数据传送指令3. 3. 标志传

27、送指令标志传送指令 (1)LAHF(1)LAHF指令:标志寄存器低指令:标志寄存器低8 8位送位送AH AH ,其操作如下:,其操作如下:OF DF IF TF SF ZFAFPFCFFRAHOF DF IF TF SF ZFAFPFCFFRAH(2)SAHF(2)SAHF指令:指令: AHAH送标志寄存器低送标志寄存器低8 8位位 ,其操作如下:,其操作如下:(3)(3)标志寄存器内容压栈指令标志寄存器内容压栈指令PUSHFPUSHF:将标志寄存器内容压入栈顶:将标志寄存器内容压入栈顶 (4)(4)栈顶内容送标志寄存器指令栈顶内容送标志寄存器指令POPFPOPF:将栈顶内容送标志寄存器:将栈

28、顶内容送标志寄存器 4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统224.2.2 4.2.2 算术运算类指令算术运算类指令4.2 4.2 指令系统指令系统 算术运算参加运算的数据既可以是二进制数据也可以是十进制(BCD码)。二进制数据可以进行加、减、乘、除运算。十进制数据分为压缩BCD码和非压缩BCD码,非压缩BCD码可以进行加、减、乘、除运算,压缩BCD码只能进行加、减运算。要求运算数据与结果相同码制表示;BCD码没有专门指令,先用二进制指令进行运算,将结果进行调整。1. 1. 二进制数据加二进制数据加( (减减) )法指令法指令(1)ADD DEST,

29、SRC实现目的操作数加源操作数,结果存放于目的操作数中 注:结果影响所有标志位 ADD AXADD AX,BXBX执行如图所示:执行如图所示: 12H34HAX56H78HBX+68HACHAXCF=0 PF=0AF=0 ZF=0SF=0 OF=0(A)SUB指令与ADD相似,只是进行减法操作第第4 4章章 80X8680X86指令系统指令系统231. 1. 二进制数据加二进制数据加( (减减) )法指令法指令(2)ADC DEST,SRC实现目的操作数加源操作数,再加上CF的内容,结果存放于目的操作数中 注:该指令主要实现多字节数据加法;结果影响所有标志位 ADD AXADD AX,BXBX

30、执行如图所示:假设执行如图所示:假设CF=0CF=0 12H34HAX56H78HBX+68HACHAXCF=0 PF=0AF=0 ZF=0SF=0 OF=04.2.2 4.2.2 算术运算类指令算术运算类指令CF(B)SBB指令与ADC相似,只是进行减法操作(3)INC DEST 该指令实现了操作数在自身基础上加1 INC BX INC BX 执行如图所示执行如图所示BX+ 1BX注:指令不影响注:指令不影响CFCF (C)DEC指令与INC相似,只是进行减法操作4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统244.2.2 4.2.2 算术运算类指令算术

31、运算类指令1. 1. 二进制数据加二进制数据加( (减减) )法指令法指令(4)(4)求补指令求补指令 NEGNEG:NEG DESTNEG DEST NEG指令是针对有符号数据中的负数求补码,求得一个负数原码。目的是将数据的绝对值和符号位分离,以便于结果的输出 ,注:结果影响所有标志位 (5)(5)比较指令比较指令CMP CMP :CMP DESTCMP DEST,SRCSRC该指令执行的两个数相减操作,与SUB相同,不送回结果, 只影响标志位 4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统254.2.2 4.2.2 算术运算类指令算术运算类指令2. 2

32、. 二进制数据乘法指令二进制数据乘法指令 乘法运算中的目的操作数是隐含的,字节乘法运算隐含在乘法运算中的目的操作数是隐含的,字节乘法运算隐含在ALAL中,运算结果是中,运算结果是1616位的,存放在位的,存放在AXAX中;字乘法运算隐含在中;字乘法运算隐含在AXAX中,中,运算结果是运算结果是3232位的,存放在位的,存放在DXDX(高(高1616位)和位)和AXAX(低(低1616位)中位)中 。(1)无符号数乘法指令:无符号数乘法指令: MUL SRC操作数为字节数据,则实现AL内容与SRC相乘,结果存放于AX中;如果操作数为字数据,则实现AX内容与SRC相乘,结果存放于DX和AX中。 M

33、UL BL执行如图所示 20HAL40HBL00HAX 08H(2)有符号数乘法指令:有符号数乘法指令: IMUL SRC与MUL指令不同的是参入运算的数据为有符号数据乘法运算对标志位的影响只考虑乘法运算对标志位的影响只考虑OFOF、CFCF位,既不代表进位也不代位,既不代表进位也不代表溢出;运算结果的高半部分有表溢出;运算结果的高半部分有有效数据,则有效数据,则OF=CF=1OF=CF=1,否则为,否则为0 04.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统264.2.2 4.2.2 算术运算类指令算术运算类指令3. 3. 二进制数据除法指令二进制数据除法

34、指令除法运算的目的操作数是隐含的,字节(被除数16位、除数8位)除法运算隐含在AX中,运算结果是两个8位数,商存放在AL中,余数存放在AH中;字(被除数32位、除数16位)除法运算隐含在DX和AX中,运算结果是两个16位数,商存放在AX中,余数存放于DX中。 (1)(1)无符号除法指令无符号除法指令 DIV SRCDIV SRC除法运算的操作数可以是通用寄存器操作数、存储器操作数,不能是立即数 DIV BLDIV BL执行如图所示执行如图所示01H 00HAX25HBL06H00HAL01HAH06HAL22H商:余数:22HAH(2)(2)有符号数除法指令:有符号数除法指令: IDIV SR

35、CIDIV SRC与DIV指令不同的是参入运算的数据为有符号数据除法运算对标志位的影响不考虑除法运算对标志位的影响不考虑4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统274. 4. 符号位扩展指令符号位扩展指令 4.2.2 4.2.2 算术运算类指令算术运算类指令 符号扩展指令主要用于除法运算之前,当两个字节数据相除时,需将被除数由字节 数据转换为字数据,如果是无符号数据则AH直接赋值0,否则要将被除数的符号位扩展到AH中,这时就要用到符号扩展指令。CBWCBW指令是将指令是将ALAL中数据的符号位扩展到中数据的符号位扩展到AHAH中中CWDCWD指令是将

36、指令是将AXAX中数据的符号位扩展到中数据的符号位扩展到DXDX中中 5. 5. 十进制调整指令十进制调整指令 十进制(BCD码)数据在进行运算时,先用二进制运算指令进行运算,然后用调整指令对结果进行调整。共有6条指令如表所示。指令格式指令格式指令说明指令说明DAADAA压缩的压缩的BCDBCD码加法调整码加法调整DASDAS压缩的压缩的BCDBCD码减法调整码减法调整AAAAAA非压缩的非压缩的BCDBCD码加法调整码加法调整AASAAS非压缩的非压缩的BCDBCD码减法调整码减法调整AAMAAM乘法后的乘法后的BCDBCD码调整码调整AADAAD除法前的除法前的BCDBCD码调整码调整第一

37、个字母表示码制,压缩BCD码用Decimal的第一个字母“D”表示;非压缩BCD码用ASCII的第一个字母“A”表示 第二个字母是Adjust(调整)的第一个字母“A” 最后一个字母表示运算 4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统284.2.2 4.2.2 算术运算类指令算术运算类指令5. 5. 十进制调整指令十进制调整指令 例1:48H+39H48H:0100 1000B39H:0011 1001B+81H:1000 0001B87H:1000 0111B0000 0110B+AF=1例2:47H+35H47H:0100 0111B35H:001

38、1 0101B+7CH:0111 1100B82H:1000 0010B0000 0110B+非法码制非法码制调整调整调整调整总结:总结:BCDBCD码的加减运算有两种情况需要调整,出现非法码制和辅助进位,如码的加减运算有两种情况需要调整,出现非法码制和辅助进位,如果在调整过程中出现辅助进位则不用再调整,但出现非法码制就需要继续调果在调整过程中出现辅助进位则不用再调整,但出现非法码制就需要继续调整。其余的调整指令调整原理在这里就不一一介绍。除法是先用整。其余的调整指令调整原理在这里就不一一介绍。除法是先用AADAAD调整被除调整被除数,然后用数,然后用AAMAAM调整结果调整结果。第第4 4章

39、章 80X8680X86指令系统指令系统294.2.3 4.2.3 逻辑运算和移位指令逻辑运算和移位指令 所有逻辑运算指令操作数都按位进行,操作数可以是字节或字数据。目的操作数不能是立即数;当有两个操作数时,不能都是存储器操作数。无论是目的操作数还是源操作数都不能是段寄存器操作数。 (1)(1)非指令:非指令:NOT OPRDNOT OPRD 功能:对操作数求反回送原处1 1逻辑运算指令逻辑运算指令注:此指令对标志无影响(2)(2)与指令:与指令:AND DESTAND DEST,SCRSCR 功能:两个操作数进行按位“与”运算,回送目的操作数 注:影响CF、PF、ZF、SF、OF标志位 (3

40、)(3)或指令:或指令:OR DESTOR DEST,SCRSCR 功能:两个操作数进行按位“或”运算,回送目的操作数 注:影响CF、PF、ZF、SF、OF标志位 (4)(4)异或指令:异或指令:XOR DESTXOR DEST,SCRSCR 功能:两个操作数进行按位“异或”运算,回送目的操作数 (5)(5)测试指令:测试指令:TEST DESTTEST DEST,SCRSCR 注:影响CF、PF、ZF、SF、OF标志位 功能:两个操作数进行按位“与”运算,结果不回送目的操作数 注:影响CF、PF、ZF、SF、OF标志位 4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令

41、系统指令系统304.2.3 4.2.3 逻辑运算和移位指令逻辑运算和移位指令2 2移位指令移位指令移位与循环移位指令有8条,目的操作数可以是8/16位的寄存器或存储器操作数;移位的位数CNT可以是1或CL。 (1)算术移位指令 SAL/SAR DEST,CNT 适合于有符号数据,左移一位数据乘适合于有符号数据,左移一位数据乘2 2,右移一位除以,右移一位除以2 2 影响CF、PF、ZF、SF、OF标志位移位过程中要保持符号为不变 SAL AL,1SAL AL,1执行如图所示:执行如图所示:0 0 1 0 0 1 1 0 BCF00 1 0 0 1 1 0 0 B0(2)逻辑移位指令 SHL/S

42、HR DEST,CNT 适合于无符号数据,左移一位数据乘适合于无符号数据,左移一位数据乘2 2,右移一位除以,右移一位除以2 2 SHL AL,1SHL AL,1执行如图所示:执行如图所示:0 0 1 0 0 1 1 0 BCF00 1 0 0 1 1 0 0 B0影响CF、PF、ZF、SF、OF标志位移位过程中空出的位补“0” 4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统314.2.3 4.2.3 逻辑运算和移位指令逻辑运算和移位指令2 2移位指令移位指令(3)循环移位指令 ROL/ROR DEST,CNT 适合于控制过程中控制字数据的循环移动,左移(

43、右移)一位数据递适合于控制过程中控制字数据的循环移动,左移(右移)一位数据递补到数据的另一端,以保证控制字数据的完整性。补到数据的另一端,以保证控制字数据的完整性。影响CF、PF、ZF、SF、OF标志位移位过程中数据递补到另一端 ROL AL,1ROL AL,1执行如图所示:执行如图所示:0 0 1 0 0 1 1 0 BCF00 1 0 0 1 1 0 0 B(4)带进位循环移位指令 RCL/RCR DEST,CNT 适合于数据的按位传递操作,在汇编语言中数据需要一位一位的从一适合于数据的按位传递操作,在汇编语言中数据需要一位一位的从一个容器传递到另外一个容器,只能通过个容器传递到另外一个容

44、器,只能通过CFCF来传递。来传递。影响CF、PF、ZF、SF、OF标志位移位过程中CF作为数据的一部分参入到移位过程中 RCL AL,1RCL AL,1执行如图所示:执行如图所示:0 0 1 0 0 1 1 0 BCF00 1 0 0 1 1 0 0 BCF4.2 4.2 指令系统指令系统第第4 4章章 80X8680X86指令系统指令系统324.2.5 4.2.5 程序控制指令程序控制指令4.2 4.2 指令系统指令系统 转移类指令间接改变CS与IP值或仅改变IP值,以改变指令执行顺序。仅通过改变IP值而改变了指令执行顺序,称为段内转移段内转移;同时改变了CS与IP值而改变了指令执行顺序,

45、称为段间转移段间转移。 1.1.转移类型转移类型(1)段内转移 段内转移只修改IP值,以达到程序转移目的,转移形式有2种:段内直接转移 段内间接转移 在转移指令中直接给出转移的位移量8位位移量:段内短程转移(SHORT)16位位移量:段内近程转移(NEAR)SHORT是NEAR的特例,无独立属性转移地址存放在寄存器或存储单元中转移距离在-3276832767范围之内 第第4 4章章 80X8680X86指令系统指令系统334.2 4.2 指令系统指令系统4.2.5 4.2.5 程序控制指令程序控制指令1.1.转移类型转移类型(2)段间转移 段间转移同时修改CS、IP值,以达到程序转移目的,转移

46、形式有2种:段间直接转移 转移地址作为指令格式的一部分,地址部分的低字内容送IP;高字内容内容送CS段间间接转移 通过存储器间接寻址,根据存储器中的双字数据,指定双字的低字内容送IP,高字内容送CS 例如例如 JMP MEM执行流程:执行流程:低字低字高字高字IPCSMEMMEM为指定的双字数据为指定的双字数据MEMMEM数据数据第第4 4章章 80X8680X86指令系统指令系统344.2 4.2 指令系统指令系统2. 2. 无条件转移指令无条件转移指令4.2.5 4.2.5 程序控制指令程序控制指令格式格式: JMP OPRD: JMP OPRD;OPRDOPRD转移目的地址转移目的地址

47、无条件转移指令既可以实现段内转移也可以实现段间转移3. 3. 调用和返回指令调用和返回指令子程序调用CALL和返回RET是成对出现的一对指令,既可以实现段内转移也可以实现段间转移。(1)段内调用: CALL NEAR PTR OPRD 操作:SP=SP-2,将程序断点(IP内容)压入堆栈,修改IP内容以实现程序转移。当执行RET指令时,从栈顶弹出一个字放入IP,以实现程序调用的返回 (2)段间调用:CALL FAR PTR OPRD 操作:SP=SP-2,将程序断点中的CS内容压入堆栈,SP=SP-2,将程序断点中的IP内容压入堆栈,修改CS和IP内容以实现程序转移。当执行RET指令而返回时,

48、从栈顶弹出低字放入IP中,从堆栈中弹出高字放入CS中,以实现程序调用的返回 第第4 4章章 80X8680X86指令系统指令系统354.2 4.2 指令系统指令系统3 3条件转移指令条件转移指令 4.2.5 4.2.5 程序控制指令程序控制指令条件转移指令是根据前一条指令的运行结果对某些标志位的状态来决定转移的。有些指令只针对一个标志位的判断来实现转移,有些需对多个标志位的组合判断来实现转移。条件转移指令全部是段内转移(SHORT)。(1)根据一个标志位的转移指令根据CF、OF、SF、ZF、PF5个标志位两种状态可以生成10条转移指令指令指令转移条件转移条件说明说明JCJCCF=1CF=1有进

49、位转移有进位转移JNCJNCCF=0CF=0无进位转移无进位转移JZ/JEJZ/JEZF=1ZF=1结果为结果为“0”0”转移转移JNZ/JNEJNZ/JNEZF=0ZF=0结果不为结果不为“0”0”转移转移JOJOOF=1OF=1有溢出转移有溢出转移JNOJNOOF=0OF=0无溢出转移无溢出转移JP/JPEJP/JPEPF=1PF=1偶校验转移偶校验转移JNP/JPOJNP/JPOPF=0PF=0奇校验转移奇校验转移JSJSSF=1SF=1结果为负数转移结果为负数转移JNSJNSSF=0SF=0结果不为负数转移结果不为负数转移第第4 4章章 80X8680X86指令系统指令系统364.2 4.2 指令系统指令系统(2)根据多个标志位的转移指令4.2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论