1微机原理与接口技术2第二章内容回顾3第二章重点之一8086CPU内部结构4目的变址寄存器DestinationIndexSIDIBPSPAX累加器AccumulatorBX基址寄存器BaseCX计数寄存器CountDX数据寄存器DataAHBHCHDHALBLCLDLIPPSWDSESSSCS数据段寄存器DataSegment附加段寄存器ExtraSegment堆栈段寄存器StackSegment代码段寄存器CodeSegment状态标志寄存器ProcessorStatusWord指令指针寄存器InstructionPointer变址寄存器段寄存器控制寄存器通用寄存器源变址寄存器SourceIndex基址指针寄存器BasePoint堆栈指针寄存器StackPoint指针寄存器数据寄存器第二章重点之二5第二章重点之三•逻辑地址的组成——段基址:偏移地址•物理地址的形成——段基址×16+偏移地址段基址00001503210偏移地址150地址加法器物理地址190存储器的分段管理6第二章重点之四堆栈的概念及工作过程7第三章8086的寻址方式和指令系统8086的寻址方式微机系统指令的机器码表示方法8086的指令系统内容提要8§3-18086的寻址方式概述§3-18086的寻址方式——概述计算机的指令包括:操作码+操作数↓↓操作的性质操作的对象↓存放在寄存器、存储器、I/O端口地址、立即数(由寻址方式决定)寻址方式:指令中说明操作数所在地址的方法。指令分类:单操作数、双操作数、无操作数。(双操作数指令形式:操作码目的操作数,源操作数)9§3-18086的寻址方式——概述各种寻址方式指令执行速度不同:操作数在寄存器中指令执行速度快:在CPU内部立即执行;立即数寻址指令执行速度较快:直接从指令队列中取数;操作数在存储器中指令执行速度较慢:通过总线与CPU交换数据。CPU进行读/写存储器的操作:①把一个偏移量送到BIU,计算出20位物理地址;②执行总线周期存取操作数。10§3-18086的寻址方式——概述寻址方式举例:11§3-18086的寻址方式——概述8086指令的寻址方式类型:一、立即寻址方式二、寄存器寻址方式三、直接寻址方式四、寄存器间接寻址方式五、寄存器相对寻址方式六、基址变址寻址方式七、相对基址变址寻址方式八、其它12§3-18086的寻址方式——立即寻址方式一、立即寻址方式(ImmediateAddressing)1.含义:操作数是立即数(即8位或16位的常数),直接包含在指令中。2.特点:翻译成机器码时,立即数是指令的一部分,紧跟在操作码之后存放在代码段内。在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。l6位数:高字节→代码段的高地址单元,低字节→低地址单元;3.作用:常用于给寄存器赋初值。13§3-18086的寻址方式——立即寻址方式例MOVCX,2A50H解:将立即数2A50H送到CX寄存器中。(又例:MOVCL,20H)4.注意:①立即数可以送到寄存器、一个存储单元(8位)、两个连续的存储单元(16位)中去;②立即数只能作源操作数,不能作目的操作数;③以A~F打头的数字出现在指令中时,前面必须加数字0。以免与其它符号相混淆(如:0AF22H)。MOVCX,2A50H14§3-18086的寻址方式——寄存器寻址方式二、寄存器寻址方式(RegisterAddressing)1.含义:操作数包含在寄存器中,寄存器的名称由指令指定。2.特点:16位操作数:寄存器可以是AX、BX、CX、DX、SI、DI、SP和BP等。8位操作数:寄存器AH、AL、BH、BL、CH、CL、DH和DL。3.作用:寄存器之间传递数据。例MOVDX,AX解:(AX)送到CX寄存器中。(AX内容不变)(又例:MOVBL,AL)4.注意:源操作数的长度必须与目的操作数—致。(注:以下寻址方式下,指令的操作数在存储器中,要先求物理地址才能获得操作数。)15§3-18086的寻址方式——直接寻址方式三、直接寻址方式(DirectAddressing)1.含义:存储单元的有效地址EA(即:操作数的偏移地址)直接由指令给出。2.特点:机器码中,有效地址存放在代码段中指令的操作码之后,而该地址单元中的数据总是存放在存储器中。须先求出操作数的物理地址,再从存储器中取得操作数。操作数的物理地址=16×DS+EA3.作用:实现对存储单元的读/写操作。段超越前缀?符号地址?P5916§3-18086的寻址方式——直接寻址方式例MOVAX,[2000H]解:设DS=3000H;设:(32000H)=1234H由指令得:EA=2000H(16位逻辑地址)物理地址=16×3000H+2000H=32000H(20位,20根地址线)则:AX=1234H指令执行过程如图所示。(注:如用AL替代AX,则AL=34H)17§3-18086的寻址方式——寄存器间接寻址方式四、寄存器间接寻址方式(RegisterIndirectAddressing)1.含义:操作数的有效地址放在寄存器中。2.特点:使用寄存器:基址寄存器BX、BP,变址寄存器SI、DI。操作数的物理地址=16×DS+BX/SI/DI或=16×SS+BP3.作用:有效地址可以存放在寄存器中。18§3-18086的寻址方式——寄存器间接寻址方式例MOVBX,[SI]解:设:DS=1000H,SI=2000H,(12000H)=318BH则:物理地址=16×DS+SI=10000H+2000H=12000H指令执行后,BX=318BH,指令执行过程如图所示。操作码代码段数据段8B3110002000DSSI+12000×10H12000318BBXBHBL指令执行过程示意图194.注意:▲寄存器名称外必须加方括号,以区别寄存器寻址方式;▲段超越前缀来从默认段以外的段中取得数据;例MOVBX,ES:[SI]▲关于默认段:指定寄存器BX、SI或DI,默认操作数存放在数据段DS中;(DS:BX,SI,DI)指定寄存器BP,默认操作数存放在数据段SS中;(SS:BP)§3-18086的寻址方式——寄存器间接寻址方式20§3-18086的寻址方式——寄存器相对寻址方式五、寄存器相对寻址方式(RegisterRelativeAddressing)1.含义:操作数的有效地址是基址或变址寄存器的内容与8位或16位位移量(Displacement)之和。即[BX]/[BP]EA=+8位偏移量/16位偏移量[SI]/[DI]2.特点:使用:BX、BP、SI、DI。操作数的物理地址=16×DS+BX/SI/DI+COUNT或=16×SS+BP+COUNT21§3-18086的寻址方式——寄存器相对寻址方式例MOVBX,COUNT[SI];或:MOVBX,[COUNT+SI]解:设:DS=3000H,SI=2000H,位移量COUNT=4000H,(36000H)=318BH则:物理地址=16×DS+SI+COUNT=30000H+2000H+4000H=36000H指令执行后,BX=318BH403000223.注意:▲寄存器名称外必须加方括号,位移量可以在括号内,也可以在括号外;▲段超越前缀来从默认段以外的段中取得数据;例MOVDH,ES:ARRAY[SI]▲关于默认段:指定寄存器BX、SI或DI,默认操作数存放在数据段DS中;(DS:BX,SI,DI)指定寄存器BP,默认操作数存放在数据段SS中;(SS:BP)§3-18086的寻址方式——寄存器相对寻址方式23§3-18086的寻址方式——基址变址寻址方式六、基址变址寻址方式(RegisterRelativeAddressing)1.含义:操作数的有效地址是一个基址寄存器(BX、BP)的内容与一个变址寄存器(SI、DI)的内容之和。2.特点:使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI。操作数的物理地址=16×DS+BX+SI/DI或=16×SS+BP+SI/DI3.注意:▲寄存器SI和DI、BP和BX不能同时出现在[]中。24§3-18086的寻址方式——基址变址寻址方式例MOVAX,[BX][SI];或:MOVBX,[BX+SI]解:设:DS=3000H,SI=0500H,BX=1200H,(31700H)=0ABCDH则:物理地址=16×DS+SI+BX=30000H+0500H+1200H=31700H指令执行后,AX=0ABCDH25§3-18086的寻址方式——相对基址变址寻址方式七、相对基址变址寻址方式(RelativeBasedIndexedAddressing)1.含义:操作数的有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容,再加上8位或16位位移量之和。即[BX][SI]EA=++位移量[BP][DI]2.特点:使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI。操作数的物理地址=16×DS+BX+SI/DI+8/16位位移量或=16×SS+BP+SI/DI+8/16位位移量3.注意:▲寄存器SI和DI、BP和BX不能同时出现在[]中。26§3-18086的寻址方式——相对基址变址寻址方式例MOVAX,MASK[BX][SI];或:MOVBX,[MASK+BX+SI]解:设:DS=3000H,SI=0300H,BX=1500H,MASK=0200H,(21A00H)=26BFH则:物理地址=16×DS+SI+BX+MASK=20000H+0300H+1500H+0200H=21A00H指令执行后,AX=26BFH27§3-18086的寻址方式——寻址方式总结寻址方式总结:▲带方括号的地址表达式必须遵循下列规则:1.立即数可以出现在方括号内,表示直接地址,如[2000H]。2.只有BX、BP、SI、DI这四个寄存器可以出现在[]内,它们可以单独出现,也可以相加,或与常数相加,但:BX和BP寄存器、SI和DI寄存器不允许出现在同一个[]内。3.方括号表示相加,下面几种写法等价:6[BX][SI];[BX+6][SI];[BX+SI+6]28§3-18086的寻址方式——寻址方式总结4.不同寄存器对应不同的隐含段基址:SS:BP;DS:BX,SI,DI;物理地址=16×相应段基址+EAEA=BX/BP+SI/DI+DISP(注:可以是单一寄存器、两个寄存器组合、和DISP组合;DISP也可以为0)▲可用段超越前缀修改段基址。29§3-18086的寻址方式——其它八、其它1.隐含寻址:指令中不指明操作数,但有隐含规定的寻址方式。如:指令DAA;对寄存器AL中的数据进行十进制数调整,结果仍保留在AL中。2.I/O端口寻址:8086有直接端口和间接端口两种寻址方式。▲直接端口寻址方式:指令直接提供端口地址——8位立即数。可访问端口00~FFH,即256个端口。例如,INAL,63H;表示将瑞口63H中的内容送进AL寄存器▲间接端口寻址方式:端口地址由寄存器DX提供,端口号为0000—FFFFH。例如,MOVDX,213H;DX=口地址号213HINAL,DX;AL←端口213H中的内容30§3-18086的寻址方式——其它3.一条指令有多种寻址方式:源操作数和目的操作数同样适用上述寻址方法。例MOV[BX],AL解:设:BX=3600H,DS=1000H,AL=05H则:目的操作数的物理地址=16×DS+BX=10000H十3600H=13600H指令执行结果为(13600H)=05H。31§3-2指令的机器码表示方法一、机器语言指令的编码目的和特点§3-2指令的机器码表示方法——目的和特点汇编语言源程序:用汇编语言(即主要由指令系统组成的语言)编写的程序。编译程序执行源程序机器码运算结果指令通常由操作码和操作数两部分组成。▲8086指令系统采用变长指令,指令的长度可由1~6字节组成。32§3-2指令的机器码表示方法——指令代码的编制二、机器语言指令代码的编制其中,第一个字节:▲