第4章 汇编语言程序设计第2讲_第1页
第4章 汇编语言程序设计第2讲_第2页
第4章 汇编语言程序设计第2讲_第3页
第4章 汇编语言程序设计第2讲_第4页
第4章 汇编语言程序设计第2讲_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、汇编语言程序设计,第四章,汇编语言程序设计基本步骤,顺序程序的基本结构和设计方法,循环程序的结构形式和程序设计,分支程序的结构形式和程序设计,本章要点,子程序的基本过程和设计方法,汇编语言概述,一、汇编语言程序设计的基本方法和基本步骤,汇编语言程序设计的基本内容,结构化程序设计:是指程序的设计、编写和测试都采用一种规定的组织形式进行。,结构化程序设计可使编制的程序具有:结构清晰、易于读懂、易于调试和修改的优点。,顺序程序,子程序,循环程序,分支程序,包括,汇编语言程序设计的基本步骤:,分析问题,寻找解决问题的思路、方法、算法,编写程序实现算法,上机调试程序,流程图画法规定,1流程图的概念流程图

2、是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。,(1)执行框,2流程图符号表示,(2)选择框,(4)指向线,(3)起止框:,二、汇编语言程序的三种基本结构,汇编语言程序设计基本步骤,顺序程序的基本结构和设计方法,循环程序的结构形式和程序设计,分支程序的结构形式和程序设计,本章要点,子程序的基本过程和设计方法,汇编语言概述,1、顺序程序设计,【例4-1】已知X和Y是数据段中的两个无符号字节单元数据,用程序完成表达式Z=(X2+Y2)/2的计算.,编程思路:,MOVAL,XMULXMOVBX,AX,MOVAL,

3、YMULYADDAX,BXSHRAX,1MOVZ,AX,DATASEGMENTXDB15YDB34ZDW?DATAENDS,源程序如下:,ENDSTART,CODESEGMENT,CODEENDS,MOVAH,4CHINT21H,ASSUMECS:CODE,DS:DATA,START:MOVAX,DATAMOVDS,AX,汇编语言程序设计基本步骤,顺序程序的基本结构和设计方法,循环程序的结构形式和程序设计,分支程序的结构形式和程序设计,本章要点,子程序的基本过程和设计方法,汇编语言概述,控制转移类指令,1)无条件转移指令(JMP)2)条件转移指令(简单条件转移、无符号数、有符号数条件转移),(

4、1)段内转移(近转移)“SHORT”指明在同一段内更短距离的转移(128127)“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标号,段内直接转移

5、,段内短转移,MOV指令,D=30H,(IP),JMP指令,下一条要执行的指令,段内短转移范围:以JMP指令为中心的-128+127字节内,例:JMPSHORTNEXTNEXT:MOVAL,4,返回,3)段内间接转移格式:JMPWORDPTROPR例如操作:IP(OPR)4)段间直接转移格式:JMPFARPTROPR例如操作:IPOPR的偏移地址CSOPR所在段的段地址5)段间间接转移格式:JMPDWORDPTROPR例如操作:IP(EA)CS(EA+2),JMPBX;(IP)(BX)=转移地址,JMPBX;(IP)((BX))=转移地址,例:段内间接转移,注:可以使用除立即数寻址方式以外的任

6、意一种寻址方式除了CS、IP、DS、SS、ES以外的所有16位的寄存器均可以使用间接寻址转移指令的特点是指令中没有直接给出标号,返回,CODElSEGMENTJMPFARPTRNEW_SEGCODElENDS,CODE2SEGMENTNEW_SEG:MOVAX,BXCODE2ENDS,【例】段间直接转移,IP,CS,设NEW_SEG标号的地址为,执行JMP指令后,程序流程控制将从CODE1代码段到CODE2代码段,实现段间转移操作。,段间直接转移,3200H:2100H,CODElSEGMENTJMPFARPTRNEW_SEGCODElENDS,CODE2SEGMENTNEW_SEG:MOVA

7、X,BXCODE2ENDS,返回,【例】若(CS)=3000H,(IP)=0012H,(BX)=0100H,(DS)=2000H,(20120H)=A0H,(20121H)=00H,(20122H)=00H,(20123H)=50H执行:JMPDWORDPTRBX+20H执行指令后(IP)=?(CS)=?,解:EA=(BX)+20H=0120HPA=DS*10H+EA=20120H(IP)=00A0H,(CS)=5000H,5)段间间接转移,返回,控制转移类指令,1)无条件转移指令(JMP)2)条件转移指令(简单条件转移、无符号数、有符号数条件转移),2条件转移指令,(1)简单条件转移指令(测

8、试单个状态标志位)(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)结果

9、溢出则转移若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,BXJNOL1JNCL

10、2AX=B568H,BX=54B7HAX=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,不满足条件,顺序执行

11、第三步: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)高于或等于则

12、转移指令。若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,则A0,B0OF=0,若SF=0,则AB;SF=1,则AB;SF=1,则A0,B0OFSF=0时,ABOFSF=1时,AB,A=+50,B=-34(+50)补00110010(-34)补1101111

13、001010100SF=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,(3)有符号数条件转移指令,1)JL(Jumpifless,or

14、notgreaterorequal)小于则转移若SFOF=1且ZF=0,则符合转移条件和JL指令等价的指令还有JNGE(不小于或等于转移)2)JLE(Jumpiflessorequal)小于或等于则转移若SFOF=1或ZF=1,则符合转移条件和JLE指令等价的指令还有JNG(不大于转移)3)JG(Jumpifgreater)大于则转移若SFOF=0且ZF=0,则符合转移条件和JG指令等价的指令还有JNLE(不小于或不等于转移)4)JGE(Jumpifgreaterorequal)大于或等于则转移若SFOF=0或ZF=1,则符合转移条件。和JGE指令等价的指令还有JNL(不小于转移),(3)有符

15、号数条件转移指令,【例】比较有符号数大小,将较大的数存放在AX寄存器。CMPAX,BX;(AX)(BX)JNLNEXT;若AX=BX,转移到NEXTXCHGAX,BX;若AXBX,交换NEXT:,多分支结构(条件选择法、转移表法),双分支结构,1、分支程序设计方法,【例4-2】已知在内存中有一个字节单元X,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。,思路1:流程图如下:,1)简单的双分支程序设计,例:求补指令举例,NEGAL,设:执行指令前:(AL)=02H,执行指令时:计算0FFH-(AL)+1,11111111B-00000010B,等效求反,求补指令NEG,(opr

16、)0FFH-(opr)+1(字节操作),或(opr)0FFFFH-(opr)+1(字操作),11111101B+00000001B,(AL)=0FEH,11111110B,加1,FFH(AL),等效求补,11111101B,思考:(0FEH)补的原码十进制值是-2,语句格式:NEGopr,DATASEGMENTXDB-25RESULTDB?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AX,MOVAL,X,TESTAL,80H,JZNEXT,NEGAL,NEXT:MOVRESULT,AL,MOVAH,4CHINT21

17、HCODEENDSENDSTART,思路2:,AL0,N,0-ALAL,Y,CMPAL,0JGENEXTNEGALNEXT:.,AL0,N,0-ALAL,Y,思考?,思路3:,2)多分支程序设计,多分支结构是有若干个条件,每一个条件对应一个基本操作。分支程序就是判断产生的条件,哪个条件成立,就从若干分支中选择一个分支执行。多分支结构实现的方法有:条件选择法、转移表法。,条件选择法一个条件选择指令可实现两路分支,多个条件选择指令就可以实现多路分支。,【例4-3】编写计算下面函数值的程序:1X0Y=0X=0-1X0设输入数据为X、输出数据Y,且皆为字节变量。,程序流程图如下:,DATASEGMEN

18、TXDB-25YDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XCMPAL,0;Al中内容和0比较JGEBIG;大于等于0,转BIGMOVBL,-1;否则为负数,1送BLJMPEXIT;转到结束位置,BIG:JEEE;Al中内容是否为0,为0转EEMOVBL,1;否则为大于0,1送BLJMPEXIT;转到结束位置EE:MOVBL,0;0送BLEXIT:MOVY,BL;BL中内容送Y单元MOVAH,4CHINT21H;程序结束CODEENDSENDSTART;汇编结束,。,转移表方法实现多分支的设计思想如下:把转移到各分支程序段的转移指令依

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论