您好,欢迎访问三七文档
1第三章寻址方式与指令系统2§3.1概述3了解:指令及指令系统;指令的格式;指令中的操作数类型;指令字长与机器字长;指令的执行时间4一、指令与指令系统指令:控制计算机完成某种操作的命令指令系统:处理器所能识别的所有指令的集合指令的兼容性:同一系列机的指令都是兼容的。5二、指令格式指令中应包含的信息:运算数据的来源运算结果的去向执行的操作6指令格式[标号:]操作码[操作数],[操作数];[注释]执行何种操作目标操作数源操作数参加操作的数据或数据存放的地址符号地址程序注释7指令格式:零操作数指令:操作码单操作数指令:操作码操作数双操作数指令:操作码操作数,操作数多操作数指令:三操作数及以上8三、指令中的操作数立即数寄存器存储器表征参加操作的数据本身表征数据存放的地址9立即数操作数立即数本身是参加操作的数据,可以是8位或16位,只能作为源操作数。例:MOVAX,1234HMOVBL,22H立即数无法作为目标操作数立即数可以是无符号或带符号数,其数值应在可取值范围内。10寄存器操作数:参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOVAX,BXMOVDL,CH11存储器操作数参加运算的数存放在存储器的某一个或某两个单元中。表现形式:[]立即数或寄存器[]中的内容是存放所寻找数据的单元的偏移地址12存储器操作数例例:MOVAX,[1200H]MOVAL,[1200H]22H11H1200H偏移地址AHAL┇13四、指令字长指令字长:由操作码的长度、操作数地址长度、操作数个数决定。操作码操作数1~2Byte1~4Byte14五、指令的执行速度指令的字长影响指令的执行速度对不同的操作数,指令执行的时间不同:存储器快!立即数寄存器15§3.2寻址方式16寻址方式寻找操作数所在地址的方法寻找转移地址的方法本节17寻址方式操作数可能的来源或存放处:由指令直接给出寄存器内存单元寻找操作数所在地址的方法可以有三种大类型指令直接给出的方式存放于寄存器中的寻址方式存放于存储器中的寻址方式18一、立即寻址指令中的源操作数是立即数,即源操作数是参加操作的数据本身例:MOVAX,1200H12H00HAHALMOV代码段┇立即寻址仅适合于源操作数19二、寄存器寻址参加操作的操作数在CPU的通用寄存器中。例:MOVAX,BXAXBX20三、直接寻址指令中直接给出操作数的偏移地址默认在数据段例:MOVAX,[1200H]22H11H1200H偏移地址┇数据段AHAL21直接寻址直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。例:MOVAX,ES:[1200H]物理地址=段地址X16+有效地址=(DS)X16+EA22直接寻址寄存器间接寻址寄存器相对寻址寄存器比例寻址基址变址寻址基址变址相对寻址存储器寻址物理地址=段地址X16+有效地址(EA)存储器寻址方式23四、寄存器间接寻址参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。24寄存器间接寻址例例:MOVAX,[BX]设BX=1200H22H11H1200H偏移地址AHAL┇1122数据段代码段MOV25寄存器间接寻址由寄存器间接给出操作数的偏移地址;存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:BX,SI,DIBP默认在数据段默认在堆栈段26寄存器间接寻址寄存器间接寻址基址寻址(间址寄存器为基址寄存器BX,BP)变址寻址(间址寄存器为变址寄存器SI,DI)物理地址=(DS)X16+(SI/DI/BX)或(SS)X16+(BP)书写时对间接寻址的寄存器加上中括号,如:[BP]27五、寄存器相对寻址操作数的偏移地址为寄存器的内容加上一个位移量例:MOVAX,[BX+DATA]设:DS=2000H,BX=0220H,DATA=05H则:AX=[20225H]操作数物理地址=(DS)X16+(SI/DI/BX)+8位或16位偏移量或=(SS)X16+(BP)+8位或16位偏移量28六、基址、变址寻址操作数的偏移地址为一个基址寄存器的内容+一个变址寄存器的内容;操作数的段地址由选择的基址寄存器决定基址寄存器为BX,默认在数据段基址寄存器为BP,默认在堆栈段基址变址寻址方式与相对寻址方式一样,主要用于一维数组操作。29操作数物理地址=(DS)X16+(BX)+(SI/DI)或=(SS)X16+(BP)+(SI/DI)30例:执行下列指令:MOVSI,1100HMOVBX,SIMOVAX,[BX+SI]22H11H2200H偏移地址AHAL┇1122数据段31七、基址、变址、相对寻址操作数的偏移地址为:基址寄存器内容+变址寄存器内容+位移量操作数的段地址由选择的基址寄存器决定。基址变址相对寻址方式主要用于二维表格操作。操作数物理地址=(DS)X16+(BX)+(SI/DI)+8位或16位偏移量或=(SS)X16+(BP)+(SI/DI)+8位或16位偏移量32例:执行以下程序段:MOVDI,1100HMOVBP,DIMOVAL,[BP][DI]522H11H2205H偏移地址AL┇22堆栈段33八、寄存器比例寻址变址寄存器的内容乘上比例因子,再加上偏移量,称为比例变址方式变址寄存器的内容乘上比例因子,再加上基址寄存器的内容,称为基址比例变址方式变址寄存器的内容乘上比例因子,再加上基址寄存器的内容和位移量,称为基址比例变址偏移方式。例:MULBL指令执行:AL×BLAX34九、隐含寻址指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中。例:MULBL指令执行:AL×BLAX35§3.28086指令系统36掌握:指令码的含义指令对操作数的要求指令的对标志位的影响指令的功能378086指令系统从功能上包括六大类:数据传送算术运算逻辑运算和移位串操作程序控制处理器控制38八位寄存器:AH,AL,BH,BH,BL,CH,CL,DH,DL十六位通用寄存器:AX,BX,CX,DX,SP,BP,SI,DI堆栈指针SP指令指针IP(或PC)标志位Flags目的和源变址寄存器DI,SI段寄存器CS,DS,ES,SS通用寄存器rAL或AX(取决于操作数长度)acc介绍指令系统使用的符号:39src,dest源,目的操作数(下列寻址方式都可以用)[BX+SI+n],[BX+DI+n],[BP+SI+n],[BP+DI+n][SI+n],[DI+n],[BP+n],[BX+n][N],r[]存储器单元的内容(正常在数据段)ES:[]附加存储器段的内容OPRD操作数Seg段寄存器(CS,DS,ES,SS)im立即数(n8位,nn16位,nnnn32位)408086/8088指令助记符表(自学)指令类别记助符数据传送通用传送输入输出目标地址传送标志传送算术运算加法减法乘法除法转换MOV,PUSH,POP,XCHG,XLATIN,OUTLEA,LDS,LESLAHF,SAHF,PUSHF,POPFADD,ADC,INC,AAA,DAASUB,SBB,DEC,NEG,CMP,AAS,DAS,MUL,IMUL,AAMDIV,IDIV,AADCBW,CWD418086/8088指令助记符表(续)逻辑指令逻辑运算移位循环移位串处理串操作重复控制控制转移转移无条件转移条件转移循环控制过程调用中断指令处理器控制AND,OR,XOR,NOT,TESTSHL,SAL,SHR,SARROL,ROR,RCL,RCRMOVS,CMPS,SCAS,LODS,STOSREP,REPE/REPZ,REPNE/REPNZJMPJA/JNBE,JAE/JNB,JB/JNAE,JBE/JNA,JC,JCXZ,JE/JZ,JNS,JO,JS,JG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG,JNC,JNE/JNZ,JNO,JNP/JPO,JP/JPELOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZCALL,RETINT,INTO,IRETCLC,STC,CMC,CLD,STD,CLI,STI,NOP,HLT,WAIT,ESC,LOCK指令类别记助符42数据传送指令通用数据传送输入输出地址传送标志位操作43一、通用数据传送一般数据传送指令堆栈操作指令交换指令查表转换指令字位扩展指令特点:该类指令的执行对标志位不产生影响441.一般数据传送指令一般数据传送指令MOV格式:MOVdest,src操作:src例:MOVAL,BLdest45一般数据传送指令注意点:两操作数字长必须相同;两操作数不允许同时为存储器操作数;两操作数不允许同时为段寄存器;在源操作数是立即数时,目标操作数不能是段寄存器;IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。46一般数据传送指令例判断下列指令的正确性:MOVAL,BXMOVAX,[SI+05H]MOV[BX][BP],BXMOVDS,1000HMOVDX,09HMOV[1200],[SI]位数不一致正确BX/BP不能配对立即数不能直接传送给段寄存器位数不一致不能同为存储器47一般数据传送指令应用例将(*)的ASCII码2AH送入内存数据段1000H开始的100个单元中。题目分析:确定首地址确定数据长度写一次数据修改单元地址修改长度值判断写完否?未完继续写入,否则结束1063H100B1000H┇┇2AH数据段2AH2AH2AH48一般数据传送指令应用例程序段:MOVDI,1000HMOVCX,64HMOVAL,2AHAGAIN:MOV[DI],ALINCDI;DI+1DECCX;CX-1JNZAGAIN;CX≠0则继续HLT492.堆栈操作指令掌握:有关堆栈的概念栈顶、栈首、栈底堆栈指令的操作原理执行过程,执行结果50堆栈操作的原则先进后出以字为单位51堆栈操作指令压栈指令PUSH格式:PUSHOPRD出栈指令POP格式:POPOPRD16位寄存器或存储器两单元16位寄存器或存储器两单元52压栈指令PUSH指令执行过程:SP-2→SP操作数高字节→SP+1操作数低字节→SP┇SP堆栈段SP高8位低8位53压栈指令的操作设AX=1234H,SP=1200H执行PUSHAX指令后堆栈区的状态:1200H┇堆栈段SP-2=11FEH12H34H1200H┇堆栈段12H34HAX入栈后入栈前54出栈指令POP指令执行过程:SPSP+1SP←SP+2操作数低字节操作数高字节┇SP堆栈段SP高8位低8位55出栈指令的操作执行POPAX12H34H11FEH┇堆栈段代码段PUSH1234AXSP+21200H┇出栈后出栈前56堆栈操作指令说明指令的操作数必须是16位的;操作数可以是寄存器或存储器两单元,但不能是立即数;不能从栈顶弹出一个字给CS;PUSH和POP指令在程序中一般成对出现;PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。57堆栈操作指令例MOVAX,1234HMOVSP,AXMOVBX,5678HMOV[BX],AHMOV[BX+1],BLPUSHAXPUSHBXPUSHWORDPTR[BX]POPWORDPTR[BX]POPAXPOPBX┇如此,会使AX和BX的内容互换583.交换指令格式:XCHGREG,MEM/REG注:两操作数必须有一个是寄存器操作数不允许使用段寄存器。例:XCHGAX,BXXCHG[2000],CL594.换码指令(查表指令)格式:XLAT说明:用BX的内容代表表格首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址操作:将BX+AL所指单元的内容送AL60查表指令例数据段中存放有一张
本文标题:寻址与指令系统
链接地址:https://www.777doc.com/doc-2467465 .html