您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章 汇编语言程序设计第2讲
皖西学院汇编语言程序设计第四章汇编语言程序设计基本步骤顺序程序的基本结构和设计方法循环程序的结构形式和程序设计分支程序的结构形式和程序设计2本章要点子程序的基本过程和设计方法34561汇编语言概述一、汇编语言程序设计的基本方法和基本步骤汇编语言程序设计的基本内容结构化程序设计:是指程序的设计、编写和测试都采用一种规定的组织形式进行。结构化程序设计可使编制的程序具有:结构清晰、易于读懂、易于调试和修改的优点。顺序程序子程序循环程序分支程序包括汇编语言程序设计的基本步骤:分析问题寻找解决问题的思路、方法、算法绘制流程图编写程序实现算法设计测试数据和预期计算结果上机调试程序流程图画法规定1.流程图的概念流程图是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。(1)执行框2.流程图符号表示(2)选择框(4)指向线(3)起止框:开始结束条件?YNYN条件?条件成立?成立程序段不成立条件成立?成立程序段不成立(a)当型循环(b)直到型循环图4.3循环结构条件成立?程序段1程序段2成立不成立图4.1两路分支结构图4.2多路分支结构判定条件?程序段n程序段1程序段2……二、汇编语言程序的三种基本结构顺序结构:按语句的书写顺序依次执行。1循环结构:由条件是否成立,确定是否重复执行某段程序。3分支结构:根据不同的条件判断结果,执行不同的程序段,实现程序分支。2汇编语言程序设计基本步骤顺序程序的基本结构和设计方法循环程序的结构形式和程序设计分支程序的结构形式和程序设计2本章要点子程序的基本过程和设计方法34561汇编语言概述1、顺序程序设计【例4-1】已知X和Y是数据段中的两个无符号字节单元数据,用程序完成表达式Z=(X2+Y2)/2的计算.编程思路:开始初始化X→ALX*X→BX(X2+Y2)/2→AX结果→ZY→ALY*Y→AXX2+Y2→AX结束①①MOVAL,XMULXMOVBX,AXMOVAL,YMULYADDAX,BXSHRAX,1MOVZ,AXDATASEGMENTXDB15YDB34ZDW?DATAENDS源程序如下:ENDSTARTCODESEGMENTCODEENDSMOVAH,4CHINT21HASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX汇编语言程序设计基本步骤顺序程序的基本结构和设计方法循环程序的结构形式和程序设计分支程序的结构形式和程序设计2本章要点子程序的基本过程和设计方法34561汇编语言概述控制转移类指令1)无条件转移指令(JMP)2)条件转移指令(简单条件转移、无符号数、有符号数条件转移)(1)段内转移(近转移)①“SHORT”指明在同一段内更短距离的转移(-128~+127)②“NEAR”指明在同一段的转移,IP的值被改变。(-32768~+32767)(2)段间转移(远转移)“FAR”指明要转到另一个逻辑段执行程序,CS和IP都被修改1、无条件转移指令1无条件转移指令1)段内直接短转移格式:JMPSHORTOPR例如操作:IP(IP)+8位偏移量2)段内直接近转移格式:JMPNEARPTROPR操作:IP(IP)+16位偏移量JMPNEARPTREXITEXIT:POPAX例:段内直接近转移举例两种转移指令都可以写成简化形式(省略SHORT和NEAR)JMP标号段内直接转移段内短转移MOV指令D=30H(IP)B004………存储器代码段EB300152H0120H0121H0153H0122HJMP指令下一条要执行的指令段内短转移范围:以JMP指令为中心的-128~+127字节内根据JMP指令的操作转移目的地址为:(IP)+D=0122H+30H=0152H(IP)例:JMPSHORTNEXTNEXT:MOVAL,4返回3)段内间接转移格式:JMPWORDPTROPR例如操作:IP(OPR)4)段间直接转移格式:JMPFARPTROPR例如操作:IPOPR的偏移地址CSOPR所在段的段地址5)段间间接转移格式:JMPDWORDPTROPR例如操作:IP(EA)CS(EA+2)JMPBX;(IP)←(BX)=转移地址JMP[BX];(IP)←((BX))=转移地址例:段内间接转移注:可以使用除立即数寻址方式以外的任意一种寻址方式除了CS、IP、DS、SS、ES以外的所有16位的寄存器均可以使用间接寻址转移指令的特点是指令中没有直接给出标号返回CODElSEGMENTJMPFARPTRNEW_SEGCODElENDSCODE2SEGMENTNEW_SEG:MOVAX,BXCODE2ENDS【例】段间直接转移34100H32000HXXXX………CODE2CODE1操作码210032NEW_SEG00…EAJMP指令IPCS设NEW_SEG标号的地址为执行JMP指令后,程序流程控制将从CODE1代码段到CODE2代码段,实现段间转移操作。段间直接转移3200H:2100HCODElSEGMENTJMPFARPTRNEW_SEGCODElENDSCODE2SEGMENTNEW_SEG:MOVAX,BXCODE2ENDS返回【例】若(CS)=3000H,(IP)=0012H,(BX)=0100H,(DS)=2000H,(20120H)=A0H,(20121H)=00H,(20122H)=00H,(20123H)=50H执行:JMPDWORDPTR[BX+20H]执行指令后(IP)=?(CS)=?解:EA=(BX)+20H=0120HPA=DS*10H+EA=20120H(IP)=00A0H,(CS)=5000H5)段间间接转移返回控制转移类指令1)无条件转移指令(JMP)2)条件转移指令(简单条件转移、无符号数、有符号数条件转移)2条件转移指令(1)简单条件转移指令(测试单个状态标志位)(2)无符号数条件转移指令(3)有符号数条件转移指令它们都有通用的语句格式和功能。语句格式:[标号:]操作符短标号功能:如果条件满足,则(IP)+位移量→IP。(1)简单条件转移指令1)JZ(或JE)(Jumpifzero)结果为0(或相等)则转移若ZF=1,则符合转移条件。2)JNZ(或JNE)(Jumpifnotzero)结果不为0(或不相等)则转移若ZF=0,则符合转移条件。3)JS(Jumpifsign)结果为负则转移若SF=1,则符合转移条件。4)JNS(Jumpifnotsign)结果不为负则转移若SF=0,则符合转移条件。5)JO(Jumpifoverflow)结果溢出则转移若OF=1,则符合转移条件。(1)简单条件转移指令6)JNO(Jumpifnotoverflow)结果不溢出则转移若OF=0,则符合转移条件。7)JP(Jumpifparity)结果为偶则转移若PF=1,则符合转移条件。8)JNP(Jumpifnotparity)结果为奇则转移若PF=0,则符合转移条件。9)JC(Jumpifcarry)结果有进位或借位则转移若CF=1,则符合转移条件。10)JNC(Jumpifnotcarry)结果没有进位或借位则转移若CF=0,则符合转移条件。(1)简单条件转移指令【例】分析下列程序段,程序分别转向哪里?ADDAX,BXJNOL1JNCL2①AX=B568H,BX=54B7H②AX=42C8H,BX=608DH例题(续上页)解:第一步:ADDAX,BXAX=B568H1011010101101000BX=54B7H0101010010110111AX=0A1FH0000101000011111所以,CF=1,OF=0第二步:JNOL1;OF=0,满足条件,转去L1执行例题(续上页)解:第一步:ADDAX,BXAX=42C8H0100001011001000BX=608DH0110000010001101AX=A355H1010001101010101所以,CF=0,OF=1第二步:JNOL1;OF=1,不满足条件,顺序执行第三步:JNCL2;CF=0,满足条件,转去L2执行(2)无符号数条件转移指令1)JB(Jumpifbelow)低于则转移指令。若CF=1,则符合转移条件。和JB指令等价的指令还有JNAE(不高于或等于转移),JC(借位为1转移)。2)JBE(Jumpifbeloworequal)低于或等于则转移指令。若CF=1或ZF=1,则符合转移条件。和JBE指令等价的指令还有JNA(不高于转移)。3)JA(Jumpifabove)高于则转移指令。若CF=0且ZF=0,则符合转移条件。和JA指令等价的指令还有JNBE(不低于或不等于转移)。4)JAE(Jumpifaboveorequal)高于或等于则转移指令。若CF=0或ZF=1,则符合转移条件。和JAB指令等价的指令还有JNB(不低于转移)。(2)无符号数条件转移指令【例】比较无符号数大小,将较大的数存放AX寄存器。CMPAX,BX;(AX)-(BX)JNBNEXT;若AX=BX,转移到NEXTXCHGAX,BX;若AXBX,交换NEXT:…比较指令对标志位的影响(CMPA,B):1)A、B均为无符号数:若CF=0,则AB;若CF=1,则AB2)A、B均为带符号数:A0,B0OF=0,若SF=0,则AB;SF=1,则ABA0,B0OF=0,若SF=0,则AB;SF=1,则ABA0,B0A0,B0OFSF=0时,ABOFSF=1时,AB⊕⊕③A=+50,B=-34(+50)补00110010—(-34)补1101111001010100SF=0、OF=0结果为正数,没有发生溢出若:A=+84,B=-63A-B=+147127(+84)补01010100—(-63)补1100000110010011SF=1,OF=1结果出错③A0,B0④A=-45,B=+56(-45)补11010011—(+56)补0011100010010011SF=1、OF=0没有发生溢出,结果为负数正确.若:A=-65,B=+76A-B=-141-128(-65)补10111111—(+76)补0100110101110010SF=0,OF=1发生溢出,结果为正数出错.④A0,B0•(3)有符号数条件转移指令1)JL(Jumpifless,ornotgreaterorequal)小于则转移若SF+OF=1且ZF=0,则符合转移条件和JL指令等价的指令还有JNGE(不小于或等于转移)2)JLE(Jumpiflessorequal)小于或等于则转移若SF+OF=1或ZF=1,则符合转移条件和JLE指令等价的指令还有JNG(不大于转移)3)JG(Jumpifgreater)大于则转移若SF+OF=0且ZF=0,则符合转移条件和JG指令等价的指令还有JNLE(不小于或不等于转移)4)JGE(Jumpifgreaterorequal)大于或等于则转移若SF+OF=0或ZF=1,则符合转移条件。和JGE指令等价的指令还有JNL(不小于转移)•(3)有符号数条件转移指令【例】比较有符号数大小,将较大的数存放在AX寄存器。CMPAX,BX;(AX)-(BX)JNLNEXT;若AX=BX,转移到NEXTXCHGAX,BX;若AXBX,交换NEXT:…1多分支结构(条件选择法、转移表法)双分支结构1、分支程序设计方法条件判断?程序段1Y条件判断?程序段1程序段2YN条件判断?程序段1程序段2......程序段N条件1条件2条件N2【例4-2】已知在内存中有一个字节单元X,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。思路1:流程图如下:1)简单的双分支程序设计例:求补指令举例N
本文标题:第4章 汇编语言程序设计第2讲
链接地址:https://www.777doc.com/doc-3515807 .html