版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 微型计算机的程序设计主要内容程序设计步骤简单程序(顺序结构)分支程序(分支结构)循环程序(循环结构)子程序6.1 程序设计步骤汇编语言程序设计步骤: (1)分析问题:已知条件、要解决的问题、功能/性能要求等。 (2)建立数学模型:把问题数学化、公式化,便于计算机处理。 (3)确定算法:简单、速度快、精度高、代码量小、编程容易。 (4)绘制程序流程图:用箭头、框图、菱形图等表示程序结构。 (5)内存空间分配:为程序或数据分配内存空间。 (6)编制程序与静态检查:程序结构层次简单、清楚、易懂。 (7)程序调试:利用调试软件DEBUG进行调试。汇编语言程序设计的特点: (1)算法要分解至指令
2、级;高级语言为语句级。 (2)要详细考虑内存空间分配问题:任何一个变量、一条指令都要明确其存储位置。6.2 简单程序(顺序结构)特点:顺序执行每条指令,执行过程中不发生跳转。【例6.1】用数据运算指令,对两个16位数做加法运算。这两个数从地址10050H开始连续存放,低位在小地址一端,结果放在这两个数之后。内存地址内容10050H被加数低8位10051H被加数高8位10052H加数低8位10053H加数高8位10054H和数低8位10055H和数高8位例6.1的程序:MOVAX,1000HMOVDS,AX ; DS1000HMOVSI,50H ; 被加数指针SI50HMOVDI,52H ; 加
3、数指针DI52HMOVBX,54H ; 和的指针BX54HCLC ; 清CFXORAX,AX ; 清AXMOVAX,SI ; 取一个字到AXADCAX,DI ; AXAX+DI+CFMOVBX,AX ; 存一个字到BXHLT ; 暂停问题:该程序能否简化?如何简化?简化的程序:MOVAX,1000HMOVDS,AX ; DS1000HMOVAX,50H ; 取被加数到AXADDAX,52H ; AX被加数+加数MOV54H,AX ; 存和数到54HHLT ; 暂停例题6.2:P139自学6.3 分支程序分支程序是利用条件转移指令实现程序执行次序改变的一种程序结构形式,即当程序执行到某一指令后,
4、根据某个条件是否满足,分别执行不同的指令序列。一般来说,分支程序经常是先用比较指令或数据操作及位检测指令等来改变标志寄存器各个标志位。然后用条件转移指令进行分支。分支程序执行完后可以立即结束,也可以转到公共点结束,如下图所示。分支程序可以再分支。程序框图:在绘制程序流程图时,需用菱形判断框,表示判定条件。在绘制好流程图编写助记符程序时,建议先按上下流程线写,写完上下流程线上的各框环节后,再写分支部分里的框框。分支程序结构流程图(注意:判断出口处应注明Y/N) 【例6.3】求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存(2800H)单元中。 问题:右边程序流程图是否有错误?如何
5、改正?例6.3的程序: MOV CX,AX ; CXAX SUBAX,BX ;AXAX-BX JC AA ;CF转AA去执行(即AXBX时转移) MOV2800H,AX ;结果送到2800H和2801H单元 HLT ;暂停AA: SUB BX,CX ;BXBX-CX MOV2800H,BX ;结果送到2800H和2801H单元 HLT ;暂停问题:是否还有其它方法实现上述功能?6.4 循环程序循环程序是强制CPU重复执行某一指令序列(程序段)的一种程序结构形式。循环结构程序缩短了程序的长度、减少了占用的内存空间。循环程序并不简化程序执行过程,相反,由于增加了一些循环控制等环节,总的程序执行语句
6、和时间会有所增加。循环程序一般由4部分组成:初始化、循环体、循环控制和循环结束处理。循环程序分为单循环和多重循环,两重以上循环称为多重循环。内外循环不能交叉。循环程序各部分的内容:(1)初始化建立循环次数计数器,设定变量和存放数据的内存地址指针(常用间址方式)的初值等。(2)循环体实现程序的功能、被重复执行的指令序列。(3)循环控制修改变量和地址指针,为下一次循环做准备;修改循环计数器或者判断循环条件是否满足,满足则继续循环,否则结束循环。(4)结束处理它主要用来分析和存放程序的结果。循环控制方式有多种,如计数控制、条件控制等。计数控制事先已知循环次数,每次循环加或减计数,通过对循环次数的判定
7、来达到控制循环的目的;条件控制事先不知循环次数,通过判定某种条件的真假来达到控制循环的目的。不管哪一种控制循环方式,最终都是要达到控制循环的目的。若考虑不周,会造成死循环,对这一点要注意。循环可以用跳转语句实现,如JMP,JZ等;也可以用专用循环控制语句实现,如LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ【例6.5】求两个多字节数之和。这两个数在10050H地址开始的内存单元中,连续存放,低位在小地址一端,结果放在这两个数之后。设这两个多字节数均为8个字节长。S=A+BBAa0a1a2a3a4a5a6a7b0b1b2b3b4b5b6b7s0s1s2s3s4s5s6s7cf1cf
8、2cf3+编制的程序START:MOVAX,1000H MOVDS,AX ; DS1000H MOVSI,50H ; 第一个数指针SI50H MOVDI,58H ; 第二个数指针DI58H MOVBX,60H ; 结果指针BX60H MOVCX,4 ; 循环次数CX4 CLC ; 清进位CF0AA: MOVAX,SI ; 取一个字到AX ADCAX,DI ; AXAX+DI+CF MOVBX,AX ; 存一个字到BXPUSHF ; 保护进位CFADDSI,2 ; 修改第一个数的地址指针SISI+2ADDDI,2 ; 修改第二个数的地址指针DIDI+2ADDBX,2 ; 修改结果指针BXBX+2
9、POPF ; 恢复标志寄存器LOOPAA ; CXCX-1,若CX0转AAHLT ; CX0,暂停6.5 子程序从功能上来讲,子程序是主程序的一个组成部分。为了实现程序的结构化、模块化,提高程序的可重用性,通常将主程序中具有公用性、重复性、功能相对独立和完整的一个程序段,单独设计成一个程序模块,供主程序调用,该程序模块就称为子程序。子程序可以嵌套。子程序调用与返回子程序调用与返回由CALL和RET指令实现。子程序调用方式有近程(段内)调用、远程(段间)调用、直接调用(指令中直接给出调用地址)和间接调用(用寄存器或内存单元给出调用地址)。子程序调用实际是程序的转移,但与转移指令有所不同:子程序调
10、用指令CALL执行时要保存返回地址、将其压入堆栈,每个子程序都有RET指令负责把压入栈区的返回地址弹出送IP或CSIP(段间返回),实现子程序返回。转移指令不考虑返回问题。CALL F1;将下条指令的地址压入堆栈 RET;将堆栈中的地址弹出到CS:IP中子程序设计与应用应注意的问题(1) 现场保护与恢复: 转子程序前,CPU有关寄存器和内存有关单元是父程序的工作现场,在调用子程序前要设法保护这个现场。保护现场的方式很多,多数情况是在调用子程序后由子程序前部操作完成现场保护,再由子程序后部操作完成现场恢复。现场信息可以压入栈区或传送到不被占用的存储单元,也可以避开这些有用的寄存器或存储单元,达到
11、保护现场的目的。恢复现场是保护现场的逆操作。当用栈区保护现场时,还应注意恢复现场的顺序不能搞错,否则不能正确地恢复父程序的现场。(2) 参数传递: 指主程序与子程序之间相关信息或数据的传递。参数传递方式有寄存器传递、用内存单元传递或用栈区传递。传递参数需要父程序与子程序默契配合,否则会产生错误结果。(3) 子程序说明: 由于子程序有共享性,可被其它程序调用,因此,每个子程序应有必要的使用注释,它包括: 子程序名; 功能、技术指标(如执行时间等); 占用寄存器和存储单元; 入口、出口参数; 嵌套哪些子程序【例6.8】找出一个数据块中的最大数。其中,数据块的长度1,并且放在内存(2001H)单元中
12、,而数据块本身是从(2002H)单元开始存放的,最后,把找出的最大值放到(2000H)单元中。假设这个数据块中的数都是无符号的8位数。(1) 分析题目:已知数据块及其长度的存储地址、结果的存放地址、数据的类型,求数据块中的最大数。(2) 确定算法:采用循环比较法。首先,我们用00值放在AL累加器中作为最大值;然后,用数据块的第1个数和AL中的数做比较,如果比00大,则用这个数取代00,放入AL中;接着取出第2个数与AL中的数做比较,如果比它大,取而代之,否则不取代,如此往复,直至最后一个数。这样,最后AL累加器中必定存放着最大的数。这就是寻找最大值的方法,而数据块的总长度(数的个数)就是循环次
13、数。(3) 绘制程序流程图:(4) 编制的程序如下(未作为子程序时):MOVSI,2001H ; 指针指向放数据块长度的单元MOVCL,SI ; 取出来作为循环次数INCSI ; 指针指向第一个数MOVAL,00 ; 设置最大值00MOVCH,00 ; 初始化,为什么?LP:CLC ; 清除进位位,有必要吗?CMPAL,SI ; 取出数与最大值比较JCBB ; AL中数小,转到取代处JMPAA ; AL中数大,跳过去BB:MOVAL,SI ; 把大数放到AL中保存AA:INCSI ; 指针下移LOOPLP ; 次数减1,判循环结束否 MOV2000H,AL; 把最大值放到指定单元保存 HLT(
14、5) 把这段程序改为子程序形式,程序清单如下:MAX PROC PUSHFPUSHAXPUSHCXPUSHSI上面程序段POPSIPOPCXPOPAXPOPFRET MAX ENDP在编写实际子程序时要注意下列问题:(1)入口信息。例如在例6.8中,要比较的一系列数,必须先存放在以2002H开始的内存单元中,而数据的个数要放在2001H单元中。(2)出口信息。例如在例6.8中,寻得的最大值放在2000H单元中。(3)现场的保护和恢复。先仔细观察子程序中到底用了哪些寄存器,然后在子程序的开始处保护这些寄存器,在子程序结束以前恢复这些寄存器。(4)子程序的最后一条指令一定是RET指令。课后思考题1、在2000H单元处有连续两个字节,将(2000H)的高4位与(2001H)的低4位组成一个字节放在(2002H),将(2000H)的低4位与(2001H)的高
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑涂鸦改造合同文件
- 画廊展览活动劳动合同聘用画家
- 照明设备展租赁合同
- 旅游景区造价员招聘合同范本
- 造纸行业支持:汽车租赁合同协议
- 矿山工程建造师聘用协议样本
- 污水处理院墙施工合同
- 足细胞内陷性肾小球病
- 2024年工地临时设施供应与安装合同
- 小学音乐工作计划范文
- 有限空间作业应急管理制度
- 2024全国普法知识考试题库及答案
- 化工企业中试阶段及试生产期间的产品能否对外销售
- 篮球智慧树知到期末考试答案章节答案2024年浙江大学
- 国开作业《公共关系学》实训项目1:公关三要素分析(六选一)参考552
- 碳排放核算与报告要求 第XX部分:铅冶炼企业
- 物业及物业管理:提升旅游景区品质
- 财政收支业务管理制度
- DZ∕T 0215-2020 矿产地质勘查规范 煤(正式版)
- 肺功能进修总结汇报
- 精神科病例分享演讲比赛
评论
0/150
提交评论