1、单击此处添加副标题内容微型计算机原理及应用61631第第3 3章章:寻址方式与指令系统寻址方式与指令系统3.1 3.1 数据类型及其存储规则数据类型及其存储规则 3.2 3.2 计算机指令格式计算机指令格式3.3 8086CPU3.3 8086CPU的的寻址方式寻址方式3.4 80863.4 8086指令系统指令系统3.5 80X863.5 80X86的寻址方式及新增的指令的寻址方式及新增的指令第三章第三章:寻址方式与指令系统寻址方式与指令系统3.13.1数据类型及其存储规则数据类型及其存储规则 3.1.13.1.1基本数据类型及存储基本数据类型及存储 一个存储单元一个存储单元一个字节占用内存
2、的一个地址。一个字节占用内存的一个地址。基本数据类型:基本数据类型:字、双字、四字、双四字字、双字、四字、双四字字字两个相邻字节组成的两个相邻字节组成的1616位二进制;位二进制;双字双字44个相邻字节组成的个相邻字节组成的3232位二进制数;位二进制数;四字四字88个相邻字节组成的个相邻字节组成的6464位二进制数;位二进制数;双四字双四字1616个相邻字节组成的个相邻字节组成的128128位二进制数。位二进制数。9CH48H2BH6AH7AH1AHC3H23H72H92H8BH3AHABHA2H12H45HNN1N2N3N4N5N6N7N8N9N10N11N12N13N14N+15N+15
3、单元地址单元地址图3.2基本数据类型存储规律 地址为地址为N N的的字节数据:字节数据:9C9CH H字数据字数据:489C 489CH H双字数据双字数据:6A2B489C 6A2B489CH H四字数据四字数据:双四字数据双四字数据:3.1.2 3.1.2 数字数据类型数字数据类型数据类型包含:数据类型包含:无符号整数、带符号整数和浮点数。无符号整数、带符号整数和浮点数。无符号整数(范围:无符号整数(范围:0 02 2n n-1-1)带符号整数(范围:带符号整数(范围:2 2n-1n-1 +2+2n-1n-1-1-1)带符号整数是用带符号整数是用2 2的补码表示的二进制值。规定操作数的最高
4、位为符号位。的补码表示的二进制值。规定操作数的最高位为符号位。浮点数浮点数浮点数据类型可分为三种:浮点数据类型可分为三种:单精度浮点单精度浮点、双精度浮点双精度浮点和和双扩展的精度浮点双扩展的精度浮点。3.1.33.1.3指针数据类型指针数据类型在实方式下有两种类型的指针:近指针(在实方式下有两种类型的指针:近指针(1616位)和远指针(位)和远指针(3232位)位)3.1.43.1.4字符串、位及位串数据类型字符串、位及位串数据类型字符串包括字节串、字串和双字串字符串包括字节串、字串和双字串,它们分别是字节、字和双字的相邻序列。它们分别是字节、字和双字的相邻序列。3.23.2计算机指令格式计
5、算机指令格式指令包括两部分:指令包括两部分:指令操作码部分和地址码部分。指令操作码部分和地址码部分。指令操作码部分是给出该指令应完成何种操作。指令操作码部分是给出该指令应完成何种操作。地址码部分是用来描述该指令的操作对象。地址码部分是用来描述该指令的操作对象。指令格式可分为:指令格式可分为:零地址指令、一地址指令、二地址指令和三地址指令。零地址指令、一地址指令、二地址指令和三地址指令。零地址指令:零地址指令:只有操作码只有操作码部分,而部分,而没有操作数没有操作数的指令;的指令;一地址指令:一地址指令:只有目的操作数只有目的操作数的单操作数指令;的单操作数指令;二地址指令:有两个地址指出二地址
6、指令:有两个地址指出两个操作数两个操作数的地址;的地址;三地址指令三地址指令 MOV MOV AXAX,BXBX操作码的助记符目的操作数源操作数操作码的助记符目的操作数源操作数3.2.13.2.1指令的助记符格式指令的助记符格式助记符格式可用以下通式表示:助记符格式可用以下通式表示:名字名字 操作码项操作码项 操作数项操作数项 ;注释;注释 其中:其中:名字名字是一个符号,表示本条语句的符号地址。是一个符号,表示本条语句的符号地址。操作码项操作码项指指出该语句的基本操作功能出该语句的基本操作功能。操作数项操作数项是操作码的操作对象,有两个或两个以上的操作数,各操作数之是操作码的操作对象,有两个
7、或两个以上的操作数,各操作数之间用逗号隔开。间用逗号隔开。注释字段注释字段是以是以“;”开头的说明部分,注释字段是语句的非执行部分开头的说明部分,注释字段是语句的非执行部分 。例如:例如:3.2.2 80 x863.2.2 80 x86指令编码格式指令编码格式指令编码格式包含操作码和操作数两部分。指令编码格式包含操作码和操作数两部分。操作码表示计算机执行什么操作。操作码表示计算机执行什么操作。操作数指明参与操作的数的本身,或规定了操作数的地址。操作数指明参与操作的数的本身,或规定了操作数的地址。图图3.5 8086 CPU3.5 8086 CPU指令编码的一般形式指令编码的一般形式1)1)操作
8、码字节操作码字节 它是指令的第一字节,规定指令的操作类型,是它是指令的第一字节,规定指令的操作类型,是指令的必选字节,字节内容如下:指令的必选字节,字节内容如下:D D7 7 D D6 6 D D5 5 D D4 4 D D3 3 D D2 2 D D1 1 D D0 0 操作码字节操作码字节寻址方式字节寻址方式字节偏移量字节(偏移量字节(1/21/2)立即数字节(立即数字节(1/21/2)OP D WOP D WOPOP:表示指令操作码,:表示指令操作码,D D:表示指令中数据传送的方向。:表示指令中数据传送的方向。W W:表示操作数类型。:表示操作数类型。2)2)寻址方式字节。寻址方式字节
9、。它是指令的第二字节,规定操作数的寻址方式。是指令的它是指令的第二字节,规定操作数的寻址方式。是指令的可选字节,字节内容如下:可选字节,字节内容如下:D D7 7 D D6 6 D D5 5 D D4 4 D D3 3 D D2 2 D D1 1 D D0 0 MODMOD:表示方式域,:表示方式域,D D7 7、D D6 6位能表示位能表示4 4种不同的方式。种不同的方式。REGREG:表示寄存器域,:表示寄存器域,D D5 5、D D4 4、D D3 3位能表示位能表示8 8种不同的寄存器。种不同的寄存器。R/MR/M:表示寄存器存储器域,:表示寄存器存储器域,D D2 2、D D1 1、
10、D D0 0位能表示位能表示8 8种不同的寄存器存储器。种不同的寄存器存储器。3 3)偏移量字节)偏移量字节 是指令的第三、四字节,是指令的可选字节,给出了存储器操作数的偏移量。是指令的第三、四字节,是指令的可选字节,给出了存储器操作数的偏移量。4 4)立即数字节)立即数字节 是指令的可选字节,给出了指令的立即数。是指令的可选字节,给出了指令的立即数。MODMODREGREGR/MR/M表3-1 mod与rm域所组合的寻址方式 MOD MODR/MR/M存储器寻址存储器寻址寄存器寻址寄存器寻址逻辑地址的计算公式逻辑地址的计算公式W W0 0W W1 1MODMOD00B00BMODMOD01B
11、01BMODMOD10B10BMODMOD11B11B000000001001010010011011100100101101110110111111DS:BX+SIDS:BX+SIDS:BX+DIDS:BX+DISS:BP+SISS:BP+SISS:BP+DISS:BP+DIDS:SIDS:SIDS:DIDS:DIDS:disp16DS:disp16Ds:BXDs:BXDS:BX+SI+disp8DS:BX+SI+disp8DS:BX+DI+disp8DS:BX+DI+disp8SS:BP+SI+disp8SS:BP+SI+disp8SS:BP+DI+disp8SS:BP+DI+disp8D
12、S:SI+disp8DS:SI+disp8DS:DI+disp8DS:DI+disp8DS:disp16 DS:disp16+disp8+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+disp16SS:BP+DI+disp16DS:SI+disp16DS:SI+disp16DS:DI+disp16DS:DI+disp16DS:disp16+disp16DS:disp16+disp16Ds:B
13、X+disp16Ds:BX+disp16ALALCLCLDLDLBLBLAHAHCHCHDHDHBHBHAXAXCXCXDXDXBXBXSPSPBPBPSISIDIDI3.3 8086CPU3.3 8086CPU的寻址方式的寻址方式寻址方式寻址方式寻找指令或操作数存放地址的方法。寻找指令或操作数存放地址的方法。两种寻址方式:两种寻址方式:一种是用来对一种是用来对操作数操作数进行寻址;进行寻址;另一种是用来对转移地址或调用地址进行寻址,即对另一种是用来对转移地址或调用地址进行寻址,即对指令地址指令地址进行寻址。进行寻址。内容回顾内容回顾l 通用寄存器通用寄存器u AXAX 累加器累加器 (Acc
14、umulator)-(Accumulator)-AXAX常用作累加器常用作累加器u BX BX 基址寄存器基址寄存器 (Base Register)-(Base Register)-BXBX用作基址寄存器用作基址寄存器u CX CX 计数寄存器计数寄存器 (Counter Register)-(Counter Register)-CXCX用作计数寄存器用作计数寄存器u DXDX 数据寄存器数据寄存器 (Data Register)-(Data Register)-DXDX用作数据寄存器用作数据寄存器l 8 8个个8 8位寄存器:位寄存器:AHAH、ALAL、BHBH、BLBL、CHCH、CLC
15、L、DHDH、DLDL 1616位寄存器主要用于存放数据,也可用来存放地址。位寄存器主要用于存放数据,也可用来存放地址。8 8位寄存器只能用于存放数据。位寄存器只能用于存放数据。l 专用地址寄存器专用地址寄存器 1616位,用于存放地址的偏移量。位,用于存放地址的偏移量。u SP SP 堆栈指针寄存器堆栈指针寄存器 (Stack Pointer Register)(Stack Pointer Register)u BP BP 基址指针寄存器基址指针寄存器 (Base Pointer Register)(Base Pointer Register)u SISI 源变址寄存器源变址寄存器 (Sou
16、rce Index Register)(Source Index Register)u DI DI 目的变址寄存器目的变址寄存器 (Destination Index Register)(Destination Index Register)l SPSP:出入堆栈(:出入堆栈(PUSHPUSH和和POPPOP)用)用SPSP给出栈顶的偏移地址。给出栈顶的偏移地址。l BPBP:存放位于堆栈段中的一个数据区的基地址的偏移地址。:存放位于堆栈段中的一个数据区的基地址的偏移地址。l SISI:在字符串操作指令中,源操作数的偏移地址存放于:在字符串操作指令中,源操作数的偏移地址存放于SISI中。中。l
17、 DIDI:在字符串操作指令中,目的操作数的偏移地址存放于:在字符串操作指令中,目的操作数的偏移地址存放于DIDI中。中。l 段寄存器段寄存器u CSCS(Code Segment)Code Segment)代码段寄存器代码段寄存器 存放当前程序代码段的段地址(段基址),控制程序区。存放当前程序代码段的段地址(段基址),控制程序区。u DSDS(Data Segment)Data Segment)数据段寄存器数据段寄存器 存放当前数据段的段地址,控制数据区。存放当前数据段的段地址,控制数据区。u SSSS(Stack Segment)Stack Segment)堆栈段寄存器堆栈段寄存器 存放当
18、前堆栈段的段地址,控制堆栈区。存放当前堆栈段的段地址,控制堆栈区。u ESES(Extra Segment)Extra Segment)附加段寄存器附加段寄存器 存放当前附加段的段地址,控制数据区。存放当前附加段的段地址,控制数据区。l 标志寄存器和指令指针标志寄存器和指令指针u IPIP 指令指针指令指针 1616位寄存器,用来存放程序将要执行的下一条指令的地址偏移值,位寄存器,用来存放程序将要执行的下一条指令的地址偏移值,和和CSCS一起形成了下一条指令的物理地址(一起形成了下一条指令的物理地址(CS:IPCS:IP),类似于),类似于8 8位位CPUCPU中中的中中的PCPC。u FLA
19、GSFLAGS 标志寄存器(程序状态字寄存器标志寄存器(程序状态字寄存器PSWPSW)1616位寄存器,用来存放位寄存器,用来存放8086CPU8086CPU在工作过程中的运算结果中的状态标在工作过程中的运算结果中的状态标志位和微处理器操作的控制标志。志位和微处理器操作的控制标志。图3-6立即数寻址过程代码段代码段12123434MOV AX,3412HMOV AX,3412H的指令代码的指令代码3434AXAXAHAHALAL操作码操作码12123.3.13.3.1操作数的寻址方式操作数的寻址方式1 1、立即寻址、立即寻址特点:特点:指令中含有立即数,执行速度快,立即数只能是整数,且只能作为
20、指令中含有立即数,执行速度快,立即数只能是整数,且只能作为源操作数源操作数。举例:举例:MOV AX,3412HMOV AX,3412H2 2、寄存器寻址方式、寄存器寻址方式特点:特点:指令中含有寄存器操作数,不但可以减少指令码的长度,而且由于操指令中含有寄存器操作数,不但可以减少指令码的长度,而且由于操作数已存于寄存器中,执行速度较快,用于作数已存于寄存器中,执行速度较快,用于CPUCPU内部传送数据。内部传送数据。说明:说明:寄存器既能作为源操作数,又能作为目的操作数。寄存器既能作为源操作数,又能作为目的操作数。8 8位寄存器:位寄存器:AH AL BH BL CH CL DH DL;AH
21、 AL BH BL CH CL DH DL;16 16位寄存器:位寄存器:AX BX CX DX SI DI SP BPAX BX CX DX SI DI SP BP。例如:例如:MOV AXMOV AX,CXCX该指令将该指令将CXCX(源操作数)的内容传送到(源操作数)的内容传送到AXAX寄存器(目的操作数)中,寄存器(目的操作数)中,其中源操作数其中源操作数CXCX,目的操作数,目的操作数AXAX都是寄存器寻址方式。都是寄存器寻址方式。3 3、存储器寻址、存储器寻址指令给出了操作数在数据区中的地址信息,据此确定存放操作数的有效地址指令给出了操作数在数据区中的地址信息,据此确定存放操作数的
22、有效地址EAEA。有效地址有效地址EAEA:可由可由指令指令直接给出;直接给出;可由可由指令指定的寄存器指令指定的寄存器间接给出;间接给出;可由可由指令指定的寄存器和一个偏移量指令指定的寄存器和一个偏移量间接给出;间接给出;可由可由指令指定的两个寄存器之和指令指定的两个寄存器之和间接给出;间接给出;可由可由指令指定的两个寄存器和一个偏移量之和指令指定的两个寄存器和一个偏移量之和间接给出;间接给出;五种不同的存储器寻址方式:五种不同的存储器寻址方式:1 1)直接寻址方式)直接寻址方式2 2)寄存器间接寻址)寄存器间接寻址3 3)寄存器相对寻址)寄存器相对寻址4 4)基址加变址寻址方式)基址加变址
23、寻址方式5 5)相对的基址和变址寻址方式)相对的基址和变址寻址方式代码段代码段操作码操作码3434数据段数据段2 0 0 02 0 0 0DSDS2000020000+7834+783427834278343434 1212AXAXMOV AX,7834HMOV AX,7834H指指令代码令代码787812123434图3-7直接寻址方式寻址过程(1 1)直接寻址方式)直接寻址方式指令直接给出操作数的有效地址存放位置。指令直接给出操作数的有效地址存放位置。例如:例如:MOV AXMOV AX,7834H7834H该指令将有效地址该指令将有效地址EA=7834HEA=7834H单元中的内容传送到
24、单元中的内容传送到AXAX寄存器中。若(寄存器中。若(DSDS)=2000H=2000H,则该指令源操作数的存储单元的物理地址为,则该指令源操作数的存储单元的物理地址为20000H20000H7834H=27834H7834H=27834H。(2 2)寄存器间接寻址)寄存器间接寻址指令中的寄存器给出操作数存放位置的有效地址。指令中的寄存器给出操作数存放位置的有效地址。注意两点:注意两点:一是寄存器中的内容是操作数的有效地址,而不是操作数本身;一是寄存器中的内容是操作数的有效地址,而不是操作数本身;二是只能用二是只能用CPUCPU中的基址寄存器中的基址寄存器BXBX、BPBP或变址寄存器或变址寄
25、存器DIDI、SISI来间接寻址。来间接寻址。如果如果指令前面没有用前缀指令指明操作数在哪一段指令前面没有用前缀指令指明操作数在哪一段,则通常默认段寄,则通常默认段寄存器为存器为BP:BP:SSSS,BX,DI,SI:,BX,DI,SI:DSDS。即:。即:物理地址物理地址=DS=DS10H+EA=DS10H+EA=DS10H+10H+或或 物理地址物理地址=SS=SS10H+BP10H+BP例如:例如:MOV AXMOV AX,BXBX该指令将该指令将BXBX中的内容作为有效地址,对该有效地址进行字的读操作,送入中的内容作为有效地址,对该有效地址进行字的读操作,送入AXAX中。中。注意与寄存
26、器寻址的区别,注意与寄存器寻址的区别,表示寄存器间接寻址。表示寄存器间接寻址。代码段代码段操作码操作码数据段数据段121234341 12 23 34 4DSDS2 24 46 68 8BXBX1234012340+2468+2468147A8147A834 1234 12AXAXMOV AX,BXMOV AX,BX指指令代码令代码图3-8 寄存器间接寻址示意图(3(3)寄存器相对寻址)寄存器相对寻址指令中的寄存器和偏移量给出操作数存指令中的寄存器和偏移量给出操作数存放位置的有效地址。放位置的有效地址。物理地址物理地址=DS=DS10H+EA=DS10H+EA=DS10H+10H+或或 物理地
27、址物理地址=SS=SS10H+BP10H+BP例如:例如:MOV BXMOV BX,DI+10HDI+10H该指令将该指令将DIDI中的内容加上偏移量中的内容加上偏移量10H10H后作为有后作为有效地址,对该有效地址进行字的读操作,效地址,对该有效地址进行字的读操作,送入送入BXBX中。中。代码段代码段操作码操作码2424数据段数据段2626787868681 12 23 34 4DSDS2 27 73 32 2BXBX1234012340273227321B2961B29678 2678 26AXAXMOVMOVAX,BXAX,BX6824H6824H指令代码指令代码+6824+6824图3
28、-9 寄存器相对寻址操作过程基址寻址基址寻址用用BXBX、BPBP为基址寄存器进行寻址为基址寄存器进行寻址变址寻址变址寻址用用SISI、DIDI为变址寄存器进行寻址为变址寄存器进行寻址 (4(4)基址加变址寻址方式)基址加变址寻址方式指令中的两个寄存器给出操作数存放位置的有效地址。指令中的两个寄存器给出操作数存放位置的有效地址。物理地址物理地址=DS=DS10H+EA=DS10H+EA=DS10H+10H+或或 物理地址物理地址=SS=SS10H+10H+例如:例如:ADD AXADD AX,BX+SIBX+SI 该指令将该指令将BXBX中的内容加上中的内容加上SISI中的内容作为有效地址,对
29、该有效地址进中的内容作为有效地址,对该有效地址进行字的读操作,读取结果与行字的读操作,读取结果与AXAX中内容相加,结果送到中内容相加,结果送到AXAX中。中。+1026+1026003400341234012340代码段代码段操作码操作码数据段数据段787856561 12 23 34 4DSDS1 10 02 26 6SISI1339A1339A56 7856 78AXAXMOV AX,BXMOV AX,BXSISI指令代码指令代码0 00 03 34 4BXBX图3-10 基址加变址寻址方式操作过程(5(5)相对的基址和变址寻址方式)相对的基址和变址寻址方式指令中的两个寄存器和一个偏移量
30、给出操作数存放位置的有效地址。指令中的两个寄存器和一个偏移量给出操作数存放位置的有效地址。物理地址物理地址=DS=DS10H+EA=DS10H+EA=DS10H+10H+或或 物理地址物理地址=SS=SS10H+10H+例如:例如:MOV AHMOV AH,BXBXSISI2468H2468H该指令将该指令将BXBX中的内容加上中的内容加上SISI中的内容加上偏移量中的内容加上偏移量2468H2468H后作为有效地后作为有效地址,对该有效地址进行字节的读操作,读取结果送到址,对该有效地址进行字节的读操作,读取结果送到AHAH中。中。MOV AH,BXMOV AH,BXSISI2468H2468
31、H指令代码指令代码01100110010001002000020000代码段代码段操作码操作码6868数据段数据段262623232 20 00 00 0DSDS0 01 11 10 0SISI22678226782626AHAH0 01 10 00 0BXBX+2468+24682424图3-11 相对的基址和变址寻址方式操作过程过程题目题目1 1:已知当前:已知当前BX=1200HBX=1200H,CS=1800HCS=1800H,IP=0500HIP=0500H,DS=3000HDS=3000H,则执行指令,则执行指令MOV BX+2000HMOV BX+2000H,12ABH 12AB
32、H 后,后,12ABH12ABH放在哪两个存储单元放在哪两个存储单元(物理地址物理地址)?答案:答案:12ABH12ABH放在放在33200H33200H和和33201H33201H存储单元中。其中存储单元中。其中12H12H放在放在33201H33201H单元中,而单元中,而0ABH0ABH放在放在3320033200单元中。单元中。4 4、I IO O端口寻址端口寻址操作数在操作数在I IO O端口中端口中,指令给出操作数在指令给出操作数在I IO O端口中的端口地址信息端口中的端口地址信息:两种编址方式:两种编址方式:与存储器统一编址方式、独立的与存储器统一编址方式、独立的I IO O空
33、间编址方式空间编址方式l 与存储器统一编址方式,上述五种存储器寻址方式均可采用。与存储器统一编址方式,上述五种存储器寻址方式均可采用。l 独立的独立的I IO O空间编址方式则对空间编址方式则对I IO O端口有两种寻址方式:端口有两种寻址方式:直接端口寻址方式直接端口寻址方式间接端口寻址方式间接端口寻址方式(l(l)直接端口寻址方式)直接端口寻址方式端口地址的寻址范围是端口地址的寻址范围是 0-0FFH0-0FFH,端口地址直接由指令给出。,端口地址直接由指令给出。举例:举例:IN AL,27H IN AL,27H 表示从表示从I/OI/O地址号为地址号为27H27H的端口读取数据送到的端口
34、读取数据送到ALAL中。中。注意:注意:端口地址的寻址范围。端口地址的寻址范围。27H27H不是立即数也不是直接地址,是不是立即数也不是直接地址,是端口地址端口地址,不需要加方括号。,不需要加方括号。(2(2)间接端口寻址方式)间接端口寻址方式端口地址的寻址范围是端口地址的寻址范围是0-0FFFFH0-0FFFFH,端口地址由,端口地址由DXDX寄存器寄存器给出。给出。举例:举例:OUT DX,AL OUT DX,AL 表示将表示将ALAL中的内容输出到地址由中的内容输出到地址由DXDX寄存器内容所指定的端口中。寄存器内容所指定的端口中。注意:注意:使用专用寄存器使用专用寄存器DXDX,不能使
35、用其他寄存器。,不能使用其他寄存器。操作数在指令中的表示形式,操作数在指令中的表示形式,DXDX不是寄存器直接寻址,是不是寄存器直接寻址,是寄存器间寄存器间接寻址接寻址,但不需要加方括号。,但不需要加方括号。+2101+2101012101211234012340代码段代码段操作码操作码操作码操作码010121211 12 23 34 4CSCS1456214562段内直接转移段内直接转移指令代码指令代码0 01 12 21 1IPIP目标指令代码目标指令代码图3-12段内直接寻址方式过程3.3.2 3.3.2 指令地址的寻址方式指令地址的寻址方式指令地址的寻址方式以下指令地址的寻址方式以下4
36、 4种:种:(1)(1)段内直接寻址方式段内直接寻址方式转移的指令地址是由转移的指令地址是由当前的当前的IPIP内容和指令中规定的内容和指令中规定的8 8位或位或1616位偏移量之和位偏移量之和给出。给出。代码段代码段操作码操作码操作码操作码数据寻数据寻址方式址方式CSCS段内间接转段内间接转移指令代码移指令代码根据数据寻址根据数据寻址方式计算方式计算EAEAIPIP目标指目标指令代码令代码图3-13段内间接寻址方式过程(2)(2)段内间接寻址方式段内间接寻址方式转移的指令地址是由用转移的指令地址是由用寄存器或一个字存储单元的内容寄存器或一个字存储单元的内容给出。给出。指令执行时用寄存器或存储
37、单元的内容更新指令执行时用寄存器或存储单元的内容更新IPIP。34123412+78560+78560代码段代码段操作码操作码操作码操作码121234347 8 5 67 8 5 6CSCS7B9727B972段间直接段间直接转移代码转移代码3 4 1 23 4 1 2IPIP目标指目标指令代码令代码56567878图3-14段间直接寻址过程(3)(3)段间直接寻址方式段间直接寻址方式转移的指令地址是由转移的指令地址是由指令码字节指令码字节直接给出。直接给出。指令码中的指令码中的1616位段地址和位段地址和1616位地址分别更新位地址分别更新CSCS和和IPIP。图3-15段间间接寻址方式过程
38、代码段代码段操作码操作码操作码操作码数据寻数据寻址方式址方式段间间接转段间间接转移指令代码移指令代码目标指目标指令代码令代码DSDSCSCSIPIP数据段数据段1212343456567878根据数据寻址根据数据寻址方式计算方式计算EAEA(4)(4)段间间接寻址方式段间间接寻址方式转移的指令地址由一个转移的指令地址由一个双字存储单元的内容双字存储单元的内容给出。给出。指令地址存放在存储单元中,低位字地址单元中存放的是指令地址存放在存储单元中,低位字地址单元中存放的是偏移地址偏移地址,高,高位字地址单元中存放的是位字地址单元中存放的是转移段地址转移段地址,分别用于更新分别用于更新IPIP和和C
39、SCS。3.4 80863.4 8086指令系统指令系统指令系统按功能可分为指令系统按功能可分为6 6类:类:数据传送类指令;数据传送类指令;算术运算类指令;算术运算类指令;逻辑运算与移位类指令;逻辑运算与移位类指令;字符串指令;字符串指令;控制转移类指令;控制转移类指令;处理器控制类指令。处理器控制类指令。3.4.13.4.1数据传送类指令数据传送类指令分为分为4 4种:种:通用数据传送指令通用数据传送指令 累加器专用传送指令累加器专用传送指令 地址传送指令地址传送指令 标志传送指令。标志传送指令。通用数据传送指令有以下五条通用数据传送指令有以下五条MOVMOV 把源操作数传送到目的操作数把
40、源操作数传送到目的操作数PUSHPUSH指针上移,源操作数进栈指针上移,源操作数进栈POPPOP 出栈到目的操作数,指针下移出栈到目的操作数,指针下移XCHGXCHG交换源,目的操作数交换源,目的操作数XLATXLAT代码转换代码转换 1 1通用数据传送指令通用数据传送指令(1(1)最基本的传送指令)最基本的传送指令格式:格式:MOV MOV 目的操作数,源操作数目的操作数,源操作数功能:功能:把一个字节或字的源操作数送到目标操作数所在的单元。把一个字节或字的源操作数送到目标操作数所在的单元。举例:举例:MOV BLMOV BL,AL AL MOV DSMOV DS,AXAX MOV DLMO
41、V DL,DIDI MOV MOV BXBX,AX AX MOV DXMOV DX,1000 1000 MOV BHMOV BH,120120 MOV DXMOV DX,1234H1234H注意:注意:数据传送实质上是数据传送实质上是复制复制,对源操作数无影响。,对源操作数无影响。源操作数和目的操作数之间的源操作数和目的操作数之间的位数必须一致位数必须一致 ,即同时为字或字节。,即同时为字或字节。1616位数据的传送遵循地址位数据的传送遵循地址“高对高,低对低高对高,低对低”的原则。的原则。立即数、立即数、CSCS、IPIP不能为目的操作数,立即数和不能为目的操作数,立即数和CSCS只能出现在
42、源操作只能出现在源操作数位置。数位置。源操作数和目的操作数源操作数和目的操作数不能同时为存储器操作数不能同时为存储器操作数;两个存储单元之;两个存储单元之间不能用一条间不能用一条MOVMOV指令直接完成数据传送。存储器操作数可用任何指令直接完成数据传送。存储器操作数可用任何一种存储器寻址方式。一种存储器寻址方式。立即数不能直接传给段寄存器;段寄存器之间也不能进行直接传送。立即数不能直接传给段寄存器;段寄存器之间也不能进行直接传送。(这这2 2种情况通常要通过通用寄存器间接进行种情况通常要通过通用寄存器间接进行)。用用BPBP进行间接寻址时默认段寄存器为进行间接寻址时默认段寄存器为SSSS,其他
43、为,其他为DSDS。通用传送指令通用传送指令不改变标志。不改变标志。修改修改SSSS和和BPBP的两条指令中间必须连续,不插入其他任何指令。的两条指令中间必须连续,不插入其他任何指令。立即数立即数存存储储器器通用寄存器通用寄存器AXBX CX DXBP SP SI DI段寄存器段寄存器CSCS DS ES SSMOV MOV 指令数据传送通道指令数据传送通道IPIP指令辩误:指令辩误:MOV AL,CX MOV AL,CX MOV 3000H,BX MOV 3000H,BX MOV AL,1200H MOV AL,1200H MOV CS,BX MOV CS,BX MOV DS,1200H M
44、OV DS,1200H MOV ES,DS MOV ES,DS 练习练习题目1:已知当前BX=1200H,CS=1800H,IP=0500H,DS=3000H,则执行指令MOV BX+2000H,12ABH 后,12ABH放在哪两个存储单元(物理地址)?答案:答案:12ABH12ABH放在放在33200H33200H和和33201H33201H存储单元中。其中存储单元中。其中12H12H放在放在33201H33201H单元单元中,而中,而0ABH0ABH放在放在3320033200单元中。单元中。题目2:将DS段中2000H单元与3000H单元的内容互换,请写出指令序列。MOV ALMOV A
45、L,2000H2000HMOV BL,3000HMOV BL,3000HMOV 2000H,BLMOV 2000H,BLMOV 3000H,ALMOV 3000H,AL(2(2)堆栈操作指令)堆栈操作指令堆栈:堆栈:是一种数据结构,是在内存中开辟了一个比较特殊的存储区,这个是一种数据结构,是在内存中开辟了一个比较特殊的存储区,这个区域中数据的存取采用区域中数据的存取采用“后进先出后进先出”的原则。的原则。堆栈段:堆栈段:8086CPU8086CPU在存储器分段管理时,划分了一个专门的堆栈在存储器分段管理时,划分了一个专门的堆栈区。区。10001000SSSS00180018SPSP606050
46、50404030302020101010018100181001A1001A栈顶栈顶栈底栈底10001000SSSS00160016SPSP606050504040303020201010ABABCDCD10018100181001A1001A栈顶栈顶栈底栈底10001000SSSS001A001ASPSP40403030202010101001A1001A栈顶栈顶栈底栈底1001610016图3.16 8086系统椎栈及其操作(a)a)堆栈原始状态堆栈原始状态 (b)b)执行执行push AX (c)push AX (c)执行执行POP AXPOP AX (AX)=CDABH AX)=CDA
47、BH POP BX POP BX后的状态后的状态(a)(b)(c)(a)(b)(c)格式格式:PUSH PUSH 源操作数源操作数 (SP)(SP)-2,(SP)+1,(SP)(SRC)(SP)(SP)-2,(SP)+1,(SP)(SRC)POP POP 目的操作数目的操作数 (DST)(SP)+1,(SP),(SP)(SP)+2(DST)(SP)+1,(SP),(SP)(SP)+2功能:功能:堆栈指针SP减2后,把一个字的源操作数传送到目的操作数所在的单元。把SP指出的栈顶中的一个字传送到目标操作数所在的单元,然后加2。举例:举例:PUSH BX PUSH BX PUSH ES PUSH E
48、S PUSH DS PUSH DS PUSH SI PUSH SI POP AX POP AX POP BX POP BX PUSH DI PUSH DI 注意:注意:操作数一律为操作数一律为1616位操作数,位操作数,字操作字操作。与各标志位无关,与各标志位无关,不影不影响标志位响标志位。PUSHPUSH时:时:SP-2SP-2,入栈,入栈;POPPOP时:时:出栈,出栈,SP+2SP+2。可以使用除可以使用除立即数立即数以外的任何数据寻址方式,源操作数和目的操作数以外的任何数据寻址方式,源操作数和目的操作数可以是可以是寄存器寄存器和和存储器。存储器。允许使用段寄存器,允许使用段寄存器,CS
49、CS只能做源操作数只能做源操作数,即,即PUSH CSPUSH CS,但不能做目的,但不能做目的操作数,即操作数,即POPPOP操作数不允许为操作数不允许为CSCS。先进后出的顺序,即:先进后出的顺序,即:PUSH AXPUSH AX PUSH BX PUSH BX POP BXPOP BX POP AX POP AX(3 3)交换指令)交换指令格式:格式:XCHG XCHG 目的操作数,源操作数目的操作数,源操作数功能:功能:实现源操作数与目的操作数之间进行直接交换进行直接交换。注意:注意:交换指令XCHG可以实现字节交换,也可以实现字交换。目的操作数和源操作数都是双重角色,需要遵守MOV指
50、令的所有规定。段寄存器不能作为XCHG的操作数。举例:举例:XCHG AHXCHG AH,BL BL XCHG 12H,34 XCHG 12H,34 XCHG DXXCHG DX,BX BX XCHG AX,CS XCHG AX,CS XCHG XCHG 505H505H,AX AX XCHG BX,1234H XCHG BX,1234H 通用寄存器AX BX CX DXBP SP SI DI 存储器 XCHGXCHG指令的数据交换通路指令的数据交换通路2 2累加器专用传送指令累加器专用传送指令累加器是累加器是8086CPU8086CPU进行数据传输的核心。进行数据传输的核心。有两类指令:有两
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。