微机原理 第3章8086指令系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章8086寻址方式和指令系统本章要点寻址方式常用指令的功能、格式、操作、对标志的影响计算机是如何实现转移、调用、中断的地址指令地址:指令通常存放在内存中操作数地址:操作数可以存放在多个地方:MOVBX,123ADDAX,BXMOVAX,[2000H]INAX,12H:JMPL1:CALLSUB1:INT21HCSIP3.1概述操作数可能的存放方式:–直接包含在指令中立即数立即寻址–包含在某个寄存器中寄存器操作数寄存器寻址–在内存中存储器操作数(内存操作数)存储器寻址还可以在外设(接口)I/O寻址MOVBX,123MOVAX,[2000H]MOVAX,BXINAX,12H3.28086寻址方式寻址(addressing):把物理地址分配给程序的各条指令的过程。逻辑地址→物理地址寻址方式(addressingmode):根据指令的地址码生成操作数的物理地址的方法。操作码操作数指令3.2.1地址段基址有效地址(EA)/偏移地址/偏置(OFFSET)位移量(DISP)段寄存器位移量=02H1000段基址10000H11000H物理地址11002H有效地址EA=1000HEA=1002HMOVAX,[1000H]MOVAX,2[BX](BX)=1000H3.2.2寻址方式1立即寻址2寄存器寻址3直接寻址4寄存器间接寻址5基址/变址寻址6基址加变址寻址7串寻址8I/O端口寻址一、立即寻址方式操作数直接存放在指令中,紧跟在操作码之后。这种操作数被称为立即数imm它可以是8位数值i8(00H~FFH)也可以是16位数值i16(0000H~FFFFH)立即寻址方式常用来给寄存器、存储器赋值操作数指令立即寻址指令MOVAX,34EAH;AX←34EAHMOVbyteptr[1000H],20;[1000H]←20MOVX,20;X←20MOVAL,256MOV12,ALMOV[1000H],20MOVbyteptrX,256错误:二、寄存器寻址方式操作数存放在CPU的内部寄存器reg中,可以是:–8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL–16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP–段寄存器seg:DS、SS、ES寄存器号指令操作数寄存器寄存器寻址指令MOVAX,1234H;AX←1234HMOVBX,AX;BX←(AX)MOVAL,BXMOVAX,BL错误用法存储器寻址方式•操作数在存储器中。指令中给出操作数在主存中的地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中。•物理地址=段地址+EA(有效地址)段地址=(段寄存器)×16EA=偏移地址/[基址]+[变址]+[位移量]8086设计了多种存储器寻址方式1、直接寻址方式2、寄存器间接寻址方式3、基址/变址寻址方式4、基址+变址寻址方式表3.1存储器存取时约定段和可修改段的基数(P50)存储器存取方式约定段可超越使用的段偏移量取指令CS无IP堆栈操作SS无SP源字符串DSCS,ES,SSSI目的字符串ES无DI用BP作基址SSCS,ES,DS有效地址通用数据读写(除BP)DSCS,ES,SS有效地址三、直接寻址方式有效地址在指令中直接给出默认的段地址在DS段寄存器,可使用段超越前缀改变。EA指令操作数存储器段基址段寄存器⊕MOVAX,[2000H];AX←(DS:[2000H]);指令代码:A10020MOVAX,ES:[2000H];AX←(ES:[2000H]);指令代码:26A10020直接寻址指令错误用法DATA1DB1,2DATA2DW1,2:MOVAL,DATA2MOVAX,DATA1MOV[1002H],[1000H]:10000H::DATA10000000111000H0000001011001HDATA20000000111002H0000000011003H0000001011004H0000000011005H:11006HDS四、寄存器间接寻址方式有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中。默认的段地址在DS段寄存器,可使用段超越前缀改变(如果使用BP,则默认的段地址在SS段寄存器)。EA寄存器操作数存储器段基址段寄存器⊕寄存器号指令寄存器间接寻址指令MOVSI,61A8H;SI←61A8HMOVAX,[SI];AX←(DS:[SI])MOVAX,[BX];AX←(DS:[BX])MOVAX,[BP];AX←(SS:[BP])错误用法:MOVAX,[CX]MOVBX,[AX]MOVAX,[BL]MOV[BX],1五、基址/变址(相对)寻址方式•有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI。有效地址=BX/BP/SI/DI+8/16位位移量•段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变。地址寄存器操作数存储器段基址段寄存器⊕指令寄存器号位移量⊕EA基址/变址寻址指令MOVCX,36H[BX];CX←(DS:[BX]+36H)MOVCX,[BX+36H]MOVAX,-8[BX];AX←(DS:[BX]-8)MOV-20[BP],AL;SS:[BP]-20←(AL)功能执行六、基址+变址(相对)寻址方式有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:有效地址=BX/BP+SI/DI+8/16位位移量段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变变址值变址寄存器操作数存储器段基址段寄存器⊕指令基址寄存器号变址寄存器号⊕EA位移量基地址基址寄存器相对基址变址寻址指令MOVAX,[BX+SI+06H];AX←(DS:[BX+SI+06H])MOVAX,06H[BX][SI];物理地址(实地址、绝对地址)0地址逻辑地址(虚地址、相对地址、EA)0地址物理地址逻辑地址00000H0000:0000H00001H0000:0001H10000H用户区11000:0000H10001H1000:0001H20000H用户区22000:0000H20001H2000:0001H地址总结Aa10000H1000:0000HBb[0]10002H01000:0002H0b[1]10004H01000:0004H0b[2]10006H01000:0006H0b[3]10008H01000:0008H0CC[0][0]1000AH1000:000AHC[0][1]1000CH1000:000CHC[1][0]1000EH1000:000EHC[1][1]10010H1000:0010HIi10012H1000:0012HJj10014H1000:0014Hinta,b[4]={0},c[2][2],i,jADW?BDW4DUP(0)CDW4DUP(?)IDW?JDW?a=1;→MOVA,1MOVwordptr[0],1b[0]=1;MOVB,1MOVwordptr[2],1i=0;→MOVBX,0b[i]=1;MOVB[BX],1c[0][0]=1MOVC,1MOVwordptr[10],1i=0;→MOVBX,0j=0;MOVSI,0c[i][j]=1;MOVC[BX][SI],1MOVC+2,1?;寻址类型指令源地址生成目标寄存器寻址MOVAX,BX寄存器BX寄存器AX数据3AH寄存器CH寄存器CL存储器地址10300H寄存器间接寻址MOV[BX],CL立即寻址MOVCH,3AHDS×10H+BX10000H+0300H设:BX=0300H,SI=0200H,ARRAY=1000H,DS=1000H寄存器CL存储器地址11234H直接寻址MOV[1234H],CLDS×10H+DISP10000H+1234H寻址类型指令源地址生成目标基址加变址寻址MOV[BX+SI],BP寄存器BP存储器地址10500H寄存器DX存储器地址11500H(相对)基址加变址寻址MOVARRAY[BX+SI],DXDS×10H+BX+SI10000H+0300H+0200HDS×10H+ARRAY+BX+SI10000H+1000H+0300H+0200H设:BX=0300H,SI=0200H,ARRAY=1000H,DS=1000H存储器地址10304H寄存器CL基址/变址寻址MOVCL,[BX+4](寄存器相对寻址)DS×10H+BX+410000H+0300H+4串操作指令的操作数是主存中连续存放的数据串(String)——即在连续的主存区域中,字节或字的序列串操作指令的操作对象是以字(W)为单位的字串,或是以字节(B)为单位的字节串七、串寻址串寻址方式•源操作数用寄存器SI寻址,默认在数据段DS中,但允许段超越:DS:[SI]•目的操作数用寄存器DI寻址,默认在附加段ES中,不允许段超越:ES:[DI]•每执行一次串操作指令,SI和DI将自动修改:–±1(对于字节串)或±2(对于字串)–执行指令CLD指令后,DF=0,地址指针增1或2–执行指令STD指令后,DF=1,地址指针减1或2串操作的准备•源操作数用寄存器SI寻址,默认在数据段DS中,但允许段超越:DS:[SI]•目的操作数用寄存器DI寻址,默认在附加段ES中,不允许段超越:ES:[DI]•置方向标志,DF=0,增地址方向;DF=1,减地址方向–执行STD指令后,DF=1–执行CLD指令,DF=0•字符串长度(数据个数)置CX•8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址•8086用于寻址外设端口的地址线为16条,端口最多为216=65536(64K)个,端口号为0000H~FFFFH•每个端口用于传送一个字节的外设数据端口八、I/O端口寻址输入输出寻址方式•8086的端口有64K个,不分段,有两种寻址方式直接寻址:只用于寻址00H~FFH前256个端口,操作数i8表示端口号(长指令格式)间接寻址:可用于寻址全部64K个端口,DX寄存器的内容是端口号(短指令格式)•对大于FFH的端口只能采用间接寻址方式长指令格式:IN累加器,端口号(直接寻址)短指令格式:IN累加器,DX(间接寻址)输入指令(INPUT)长指令格式:OUT端口号,累加器(直接寻址)短指令格式:OUTDX,累加器(间接寻址)输出指令(OUTPUT)3.38086的指令格式及数据类型指令的机器码表示方法•机器语言:计算机唯一能识别的语言101111110011101011110000汇编语言面向机器的程序设计语言。是一种用符号表示的低级程序语言,通常为特定计算机或计算机系列设计的,与机器语言很接近。MOVDI,0F03AH助记符目源操作码操作数1000101111100011操作码DWMODREGR/M送至SP寄存器字寄存器SPBXMOVSP,BX表3.28086的编码方式(52页)指令中的操作数无操作数单操作数双操作数指令中的数据类型无符号数带符号数ASCII码BCD数(压缩、非压缩)3.48086指令系统1、数据传送指令2、算术运算指令3、逻辑运算和移位指令4、字符串指令5、程序控制指令6、处理器控制指令一、数据传送指令•数据传送是计算机中最基本、最重要的一种操作•传送指令也是最常使用的一类指令•传送指令把数据从一个位置传送到另一个位置•除标志寄存器传送指令外,均不影响标志位1、通用数据传送指令(1)MOV传送指令指令格式:MOV目标,源指令功能:目标(源)立即数段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存储器注意1)源操作数可以是8/16位的立即数、寄存器操作数、内存操作数。目标操作数不允许为立即数,其余同源操作数。源、目不能同时为内存操作数。2)源、目操作数类型必须匹配3)不能向段寄存器写立即数4)以CS、IP为目标的一切传送指令都是非法的立即数传送mova

1 / 268
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功