欢迎来到天天文库
浏览记录
ID:39301465
大小:450.81 KB
页数:40页
时间:2019-06-29
《汇编语言程序设计的基本方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章程序设计的基本方法微机原理与接口技术2010.54.4汇编语言程序设计方法4.4.1概述4.4.2分支程序设计4.4.3循环程序设计4.4.4子程序设计2设计一个程序要点:认真分析问题的需求,选择好解决方法;针对选定的算法,编写高质量的程序。一个高质量的程序不仅要满足设计的要求,而且还应尽可能实现以下几点:(1)结构清晰、简明、易读、易调试。结构好(2)执行速度快。效率高(3)占用存储空间少。资源少4.4.1概述3(1)分析问题,选择合适的解题方法。(2)根据具体问题,确定输入输出数据的格式。(3)分配存贮区并给变量命名(包括分配寄存器)。(4
2、)绘制程序的流程图,即将解题方法和步骤用程序流程图的形式表示出来。(5)根据流程图编写程序。(6)静态检查与动态调试。汇编语言程序设计的一般步骤4几种框图符号起始、终止框判断框处理说明框子程序或过程调用框流向框连接框YN112125分支程序的特点:根据不同情况作出不同的处理,程序结构分成了若干支路。分支的结构形式:(1)(2)结构特点:程序运行方向是向前的,条件确定,只能执行分支中的一个。机器根据不同的情况作出判定,有选择的执行相应的分支。这类程序称之为分支程序。NY判定条件分支1分支2相当于C语言的if、else…判定条件分支1分支2相当于C语言的
3、switch()分支n4.4.2分支程序设计6(1)分支由条件转移指令产生,不同条件通过FLAGS的标志位状态(0或1)反映出来;(2)转移指令不影响FLAGS的标志位,可连续使用转移指令,产生多个分支。例:可以产生如下的多个分支。CMPBYTEPTRARRAY[BX],0JLEL1;小于等于0,转移到L1┇分支1;大于0L1:JLNEXT;小于0,转移到NEXT┇分支2;等于0NEXT:┇分支3;小于0问题:计算机怎样判断这些分支?7选择合适的转移指令;为每个分支安排出口;将分支中的公共部分尽量放到分支前或分支后的公共程序段中;流程图、程序对应;调
4、试时,逐分支检查。分支程序设计要点8特点:(1)改变程序的执行顺序,即改变指令指针CS:IP的值;(2)不改变标志位。4.4.2.1转移指令设计分支程序的时候,关键在于根据需要,根据各个标志位的不同状态,选用合适的转移指令。9转移指令条件转移无条件转移简单条件转移(10条)无符号数条件转移(4)有符号数条件转移(4)段内直接、段间直接段内间接、段间间接转移指令的分类101无条件转移指令格式:JMP标号作用:①使CPU无条件地转移到指令指明的目的地址处(标号指定)执行,转移的范围大,灵活性大;②不能构成分支程序,但可将各分支的出口重新汇集在一起;CMP
5、ARRAY[BX],BYTEPTR0JLEL1;小于等于0┇分支1;大于0JMPGO1L1:JLNEXT;小于0┇分支2;等于0JMPGO1NEXT:┇分支3;小于0GO1:;所有分支汇集11③某些条件转移指令转移的范围超过它规定的范围时,用JMP搭桥。例:JLL1;小于0时转L1┇L1:……可改为如下指令串:JGEL0;大于等于0时转L0JMPL1;小于0时无条件转L1L0:……┇L1:……1无条件转移指令;超过了规定的转移范围12根据所处的位置分类:段内转移:要转移的目的地址与指令本身在同一段;段间转移:要转移的目的地址与指令本身在不同段。根据寻
6、址的方式分类:直接方式转移:转移到标号。间接方式转移:从存储器或寄存器中得到转移目的地的段地址和偏移地址。1无条件转移指令13格式名称功能JMP标号段内直接(IP)+位移量IPJMPOPD段内间接(OPD)IPJMP[FARPTR]标号段间直接标号的EAIP段首址CSJMPOPD段间间接(OPD)IP(OPD+2)CS1无条件转移指令14例:JMPNEXT——直接方式的无条件转移指令JMPWORDPTR[BX]——段内间接转移指令(16位段)JMPDWORDPTR[BX]——DS:[BX]指向的双字单元中存放着EA和段首址(16位段)1无
7、条件转移指令例152条件转移指令条件转移指令语句格式:操作符标号JX标号功能:如果转移条件满足,则标号的EA(立即数)→IP否则,执行紧跟转移指令之后的那条指令。162条件转移指令例如:┋JZNEXTINCAX┋NEXT:DECCX┋E9000140……49…0100H0103H0203HJZNEXTINCAXDECAX位移量=标号EA–下一条指令EA有符号数位移量172简单条件转移特点:只能是段内直接跳转,即:(1)用立即数改变IP的值,不改变CS。(2)为有符号数,>0向前转,否则往回转。(3)16位段:汇编程序计算的位移量在IF-128~127
8、之间时,翻译成8位有符号数;ELSEIF-32768~32767间时,翻译成16位有符号数;ELSEERRO
此文档下载收益归作者所有