您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 3-1 8086寻址方式FENG
内容提要回顾:8086CPU结构一、指令系统概述二、8086/8088寻址方式西安电子科技大学冯育长28086CPU结构内部暂存器IPESSSDSCS输入/输出控制电路外部总线执行部分控制电路123456∑ALU标志寄存器AHALBHBLCHCLDHDLSPBPSIDI通用寄存器地址加法器指令队列缓冲器执行部件(EU)总线接口部件(BIU)16位20位16位8位回顾:3执行部件总线接口部件通用寄存器四个专用寄存器SP:堆栈指针,其内容与堆栈段寄存器SS的内容一起,提供堆栈操作地址。BP:基址指针:构成段内偏移地址的一部分.SI:(SourceIndex):SI含有源地址意思,产生有效地址或实际地址的偏移量。DI:(DestinationIndex):DI含有目的意思,产生有效地址或实际地址的偏移量。算术逻辑单元ALU:主要是加法器。大部分指令的执行由加法器完成。标志寄存器:16位字利用了9位。标志分两类:状态标志(6位):反映刚刚完成的操作结果情况。控制标志(3位):在某些指令操作中起控制作用。420位地址加法器四个段寄存器:CS、DS、SS、ESCS管理代码段;DS管理数据段SS管理堆栈段;ES管理附加段.16位的指令指针寄存器IP:IP中的内容是下一条指令对现行代码段基地址的偏移量,6字节的指令队列指令队列共六字节,总线接口部件BIU从内存取指令,取来的总是放在指令队列中;执行部件EU从指令队列取指令,并执行。58086CPU的寄存器8086CPU中可供编程使用的有14个16位寄存器,按其用途可分为3类:通用寄存器、段寄存器、指针和标志寄存器累加器AHALBHBLCLDHDLCHSPSIDIIPFLAGSCSDSSSESBP基址寄存器计数寄存器数据寄存器堆栈指针寄存器基址指针寄存器源变址寄存器目的变址寄存器指令指针寄存器标志寄存器代码段寄存器段寄存器附加段寄存器堆栈段寄存器数据寄存器地址指针和变址寄存器控制寄存器通用寄存器数据段寄存器6存储器的分段管理8086CPU有20条地址线最大可寻址空间为220=1MB物理地址范围从00000H~FFFFFH8086CPU将1MB空间分成段(Segment)每个段最大限制为64KB最小视需要而定分段后在用户编程时,采用逻辑地址,形式为段基地址:段内偏移地址7段地址左移4位加上偏移地址得到物理地址14600H+0100H14700H物理地址计算方法:物理地址=段地址16+偏移地址。+例某单元的逻辑地址是1460H:0100H,求其物理地址。8段寄存器和逻辑段8086有4个16位段寄存器,每个段寄存器用来确定一个逻辑段的起始地址,每种逻辑段均有各自的用途CS(代码段)指明代码段的起始地址SS(堆栈段)指明堆栈段的起始地址DS(数据段)指明数据段的起始地址ES(附加段)指明附加段的起始地址10一、指令系统概述了解基本概念:指令及指令系统指令的格式指令分类方法指令中的操作数类型指令的机器代码形式111、指令与指令系统指令:控制计算机完成某种操作的命令指令系统:处理器所能识别的所有指令的集合如:Intel8086指令系统共有117条基本指令膝上型计算机122、指令格式操作码OP操作数说明要执行哪种操作如:数据传送加法减法等操作用助记符表示如:MOVADDSUB是指令执行的参与者,即操作的对象133、指令分类方法可按功能可分类Intel8086指令系统共有117条基本指令,可分成6大类①数据传送类指令②算术运算类指令③位操作类指令④串操作类指令⑤控制转移类指令⑥处理机控制类指令143、指令分类方法操作码操作数按操作数的多少可分为3种指令:0操作数指令NOP;空操作指令单操作数指令INCCX;(CX)←(CX)+1DECCX;(CX)←(CX)-1双操作数指令MOVAX,BX;(AX)←(BX)154、指令中的操作数参与操作的数据有3种表征方式立即数数据包含在指令中寄存器操作数数据包含在寄存器中存储器操作数数据在内存中操作码[操作数][,操作数]指令中描述数据的来源或去向的方法称为寻址方式16二、8086/8088寻址方式1.立即寻址(Immediateaddressing)2.寄存器寻址方式(Registeraddressing)3.直接寻址(Directaddressing)4.寄存器间接寻址方式5.寄存器相对寻址方式6.基址变址寻址方式7.基址变址相对寻址方式171.立即寻址指令的助记符形式MOVAL,34H指令中的操作数直接包含在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)34HB0H机器代码是B034前一个字节B0是操作码(含一个操作数AL)后一个字节34H是立即数指令长度2字节指令指令的机器代码形式操作码操作数18立即寻址指令MOVAL,34H;(AL)←34H;机器代码是B034指令功能执行过程例CS:IP1000H:0100H34H1000H:0101HB0H段地址:偏移地址机器码在代码段中的存放形式21RegAHALBHBLCHCLDHDLSPBPSIDI操作数包含在机器代码中,紧跟在操作码之后如MOVAL,34H这种操作数被称为立即数Immediate立即寻址方式常用来给寄存器赋值常用格式MOVReg,imm请写出MOVAL,56H的机器码34HB0HB0H56H注意:掌握指令的助记符格式理解机器码在代码段中的存放形式立即寻址方式要点22立即数imm可以是8位数值(00H~FFH)MOVAL,34H立即数imm也可以是16位数值(0000H~FFFFH)34HB0H如:MOVAX,0102H机器代码是B80201前一个字节B8是操作码(含一个操作数AX),后两个字节0201是16位立即数(低字节在前,高字节在后)1000H:0102H02H1000H:0103H1000H:0104HB8H01H3字节指令232.寄存器寻址方式操作数存放在寄存器中,可以是:8个通用寄存器Reg8位寄存器16位寄存器4个段寄存器SegRegDS、SS、ES、CSRegAHALAXBHBLBXCHCLCXDHDLDXSPBPSIDIDSSSESCSSegReg8161616注意在任何情况下,不允许给CS送数据24寄存器寻址指令MOVBX,AX;(BX)←(AX)指令功能例26寄存器寻址指令MOVAX,3000H;(AX)←3000HMOVDS,AX;(DS)←(AX)执行过程寄存器寻址机器代码是8E08立即数寻址例28立即寻址和寄存器寻址指令在执行时,不再访问内存,称为与存储器无关的寻址方式执行指令时,如果要访问内存,这种寻址方式称为与存储器有关的寻址方式8086有多种存储器寻址方式3.直接寻址方式4.寄存器间接寻址方式5.寄存器相对寻址方式6.基址变址寻址方式7.基址变址相对寻址方式难点之一先理解再骤步掌握293.直接寻址方式在指令中直接给出有效地址默认的段地址在DS段寄存器设(DS)=3000HMOVAX,[2000H];AX←((DS)*16+2000H);指令代码:A10020EA=2000H物理地址=(DS)×16+EA=32000H指令功能执行过程指令中给出操作数的偏移地址——称之为有效地址EA(EffectiveAddress)而数据在数据段中32在指令中给出的是数据的有效地址,而不是数据一般,数据与机器码不在同一个段中如MOVAX,[2000H]的执行过程涉及两个段CPU通过计算物理地址后再访问数据直接寻址方式要点(AX)←((DS)*16+2000H)33设(DS)=3000H,编写指令,把30100H单元中的字节数据传送到AL寄存器中,把30100H单元中的字数据传送到DX寄存器中。MOVAL,[0100H];(AL)=34HMOVDX,[0100H];(DX)=5634HDS3000H:0100H56H3000H:0101H3000H:0102H3000H:00FFH12H34H78HALDX例34设(DS)=3561H,用MOV指令完成下列功能。1.(AL)←(35610H)2.(BL)←(356FFH)3.(CL)←(40002H)课堂作业35设(DS)=3561H,用MOV指令完成下列功能。1.(AL)←(35610H)2.(BL)←(356FFH)3.(CL)←(40002H)课堂作业MOVAL,[0000H]以A~F开头的数,加前导0+356140002A9F2+3561356FF00EF+3561356100000MOVBL,[00EFH]MOVCL,[0A9F2H]36注意直接寻址方式默认DS段寄存器可使用段超越前缀,用来指定段寄存器设(ES)=5000HMOVAX,ES:[2000H];(AX)←((ES)*16+2000H);EA=2000H,;物理地址=(ES)×16+EA=52000H37关于段的超越MOVReg,[2000H]默认DS段寄存器若访问的不是DS段,一定要使用段超越前缀,用来指定段寄存器MOVReg,SegReg:[2000H]DSSSESCSSegReg关于段的超越实际很简单比如王五说:“赛格的优盘很便宜,只要110元”。请问:110元人民币还是美元?383.直接寻址方式(1)默认DS,但允许段超越。MOVAL,ES:[2500H](2)直接寻址方式适用于处理单个变量。若要处理批量数据或表格数据应使用其它与存储器有关的寻址方式小结4.寄存器间接寻址方式5.寄存器相对寻址方式6.基址变址寻址方式7.基址变址相对寻址方式39参与操作数据存放在内存中由寄存器间接给出操作数的有效地址例设(DS)=3000HMOVAL,[0100H];直接寻址;(AL)←((DS)*16+0100H)等价于下列指令段:MOVBX,0100HMOVAL,[BX];(AL)←((DS)*16+(BX))BX称为间址寄存器EA=(BX)=0100H物理地址=(DS)*16+EA4.寄存器间接寻址方式简化描述为:(AL)←((BX))40使用何种寻址方式?字节传送还是字传送?1.MOVAX,0100H2.MOVAX,[0100H]3.MOVAL,[0100H]4.MOVAX,BX5.MOVAX,[BX]6.MOVAL,[BX]注意区分下列指令:41允许段超越段地址取决于间址寄存器:BX﹑SI﹑DI默认DS(数据段)BP默认SS(堆栈段)只有4个寄存器可用作间接寻址MOVAL,[SI][BX][DI][BP]物理地址(DS)*16+(SI)(BX)(DI)(SS)*16+(BP)注意MOVAL,ES:[BX];物理地址=(ES)*16+(BX)42寄存器间接寻址设(DS)=3000HMOVBX,2000HMOVAX,[BX];物理地址=(DS)*16+(BX)=32000H;(AX)←((DS)*16+(BX));指令代码:8B07指令功能执行过程例45设(DS)=3000H,编写程序,把从30100H单元开始的100个字节数据累加,累加和的低8位存入AL中。MOVAL,0MOVCX,100MOVBX,0100HL1:ADDAL,[BX];(AL)←(AL)+((BX))INCBX;(BX)←(BX)+1DECCX;(CX)←(CX)-1JNZL1;若(CX)≠0则转向L1,否则执行下一条指令HLT;暂停(AL)=X0+X1+…+X99设置地址指针DS3000H:0100H3000H:0101H3000H:0102HX0X1X23000H:0163HX99......BX0100H地址指针应用示例1——处理批量数据46设(DS)=3000H,编写程序,把从30100H单元开始的100个字节数据累加,累加和的低8位存入AL中。MOVAL,0MOVCX,100MOVBX,0100HL1:ADDAL,[BX];(AL)←(AL)+((BX))INCBX;(BX)←(BX)+1DECCX;(CX)
本文标题:3-1 8086寻址方式FENG
链接地址:https://www.777doc.com/doc-1085034 .html