版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020/7/8,1/41,第6章微机编程,6.1编程步骤6.2简单程序6.3分支程序6.4循环程序6.5子程序6.6查表程序练习,2020/7/8,2/41,6.1编程步骤,汇编语言编程步骤:(1)分析问题:已知条件(2)建立数学模型:用数学方法表述问题,便于计算机处理。(3)确定算法:简单、快速、精度高、代码量小、易于编程。(4)绘制程序流程图:使用箭头、框图、菱形图等。来表达程序结构。(5)内存空间分配:为程序或数据分配内存空间。(6)编程和静态检查:程序结构简单、清晰、易于理解。(7)程序调试:使用调试软件进行调试。2020/7/8,3/41,汇编语言编程的特点:(1)算法应分解到指令
2、级;高级语言是语句级的。(2)应详细考虑内存空间的分配:应指定任何变量和指令的存储位置。2020/7/8,4/41,6.2简单程序。这个程序是最简单的形式。计算机从头到尾执行程序,一个接一个地执行指令语句,直到程序结束。这种简单的程序不需要遵循上述七个步骤,但可以直接为给定的主题编写一个助记程序列表。示例6.1在数据操作说明中添加两个16位数字。这两个数字从地址10050H开始连续存储,低位在小地址的末尾,结果放在这两个数字之后。(1)分析主题:这是一个添加16位数字的问题。当使用加法指令时,我们必须考虑由低8位和低8位的加法引起的进位问题。2020/7/8,5/41,(2)根据86系列指令系
3、统,累加器AX可以直接操作,但标志寄存器的进位位CF在加低位后会受到影响,所以应使用带进位的加法指令。(3)绘制程序流程图,如右图所示。图6.2简单程序框图(双字节加法),2020/7/8,6/41,(4)内存空间分配:内存中加数、加数和和的空间分配见下表,表6-1双字节加法时的内存分配,2020/7/8,7/41,内存地址,存储内容。52H MOV BX,54H、低位在前,高位在后,CLC异或运算器运算器运算器运算器运算器运算器MOV运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算
4、器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算器运算附录指针SI50H MOVDI,52h附录指针DI52H MOVBX,54h和指针BX54H CLC清除CF XORAX,ax;清除AX MOVAX,si;取一个字给AX ADCAX,di;最大输出功率;将一个单词保存到bxhlt。暂停,问题:程序可以简化吗?如何简化?2020/7/8,9/41,简化程序:MOVAX,1000H MOVDS,ax;DS1000H MOVAX,50H在52小时内,将加数加到AX加数上;AX加数加数MOV54H,AX;保存并计数到54hhlt。暂停,2020/7/8,10/41,示例6.2将内
5、存(10050)单元的内容分成两个部分,每个部分有4位,并分别存储在内存(10051)和(10052)单元中。也就是说,(10050)单元的低4位被放入(10051)的低4位,(10050)单元的高4位被放入(10052)的低4位,并且(10051)和(10052)的高4位都是零。(1)分析主题:本主题提出的任务在十六进制显示、二进制和十进制计算中经常遇到。现在,假设7AH存储在内存(10050)中,主题要求是将7AH分成07H和0AH,并将0AH放在单元(10051)中,将07H放在单元(10052)中。2020/7/8,11/41,当你想得到一个数的前4位和后4位时,你也可以使用移位指令的
6、方法,你也可以使用逻辑的方法和一个0F0H(二进制1110000)和一个0FH(二进制0001111)。(2)根据指令系统中包含的指令,首先取出该数字和前一个0FH的逻辑指令,得到较低的4位并存储在存储器中。然后取出数字,用移位指令逻辑将SHR向右移位4次(见图5.10 (c),取高4位并存储在存储器中。图5.10(c),2020/7/8,12/41,(3)绘制如图6.3所示的程序流程图。(4)内存空间分配:7AH分为07H和0AH,其内存空间分配见下页表6.2。图6.3 2020/7/8,13/41,字拆分过程框图,存储器分配示意图,表6-2字拆分程序的存储器分配,2020/7/8,14/4
7、1,(5)编程程序如下:mov ax,1000h mov ds,ax;DS=1000 MOV西,50H指针si=50hmoval,si待解包;取一个字节到A1和A1,0fh将A1的前四位数字清零至0movsi1,A1;最后4位放入(10051)个单位moval,si;然后取出要拆卸的字节,放入铝:钼、铝、氯;逻辑向右移动四次,前四位补充0movsi2,al;放入(10052)单位,2020/7/8,15/41,并通过示例3中的编程计算1,2,3,4。MOV AX,0 ADD AX,1 ADD AX,2 ADD AX,3 ADD AX,4,分析:需要临时存储空间来存储累加和,初始值设置为0,然后
8、依次累加。2020/7/8,16/41,6.3。分支程序是一种使用条件分支指令来改变程序执行顺序的程序结构,也就是说,当一个程序执行某个指令时,它根据是否满足某个条件来执行不同的指令序列。一般来说,分支程序经常使用比较指令或数据操作和位检测指令来改变标志寄存器的每个标志位。然后用条件转移指令转移。执行分支程序后,它可以立即结束,也可以在一个公共点结束,如下图所示。分支程序可以再次分支。程序框图:在绘制程序流程图时,需要一个菱形判断框来指示判断条件。在绘制流程图和编写助记程序时,建议先按照上、下流程线进行书写,然后在上下流程线上书写每个框架链接后,在分支部分书写框架。2020/7/8,17/41
9、,例6.3在AX累加器和BX寄存器中找出两个无符号数之间差值的绝对值,并将结果存入存储器(2800)单元。(1)分析主题:在本主题中,AX累加器和BX寄存器中的数字未知。要减去两个未知数并求出绝对值,很明显,我们应该先求出哪一个更大,然后用大数减法求出绝对值。2020/7/8,18/41,(2)根据指令系统中的比较指令,这个问题可以通过编译判断大小的链接来解决,图6.5是这个例子的程序流程图。图6.5显示了2020/7/8、19/41的绝对值顺序流程图。(3)根据流程图,程序如下:清除CF SUBAX、bx;AXAX-BXJCAA;将CF转移至AA以执行(即在AXBX时转移)MOVDI,280
10、0小时;结果指针DI2800H MOVDI,ax;结果被发送到HLT的2800小时和2801小时单位。暂停BX,ax;BXBX-AX MOVDI,2800H MOVDI,BX HLT,2020/7/8,20/41,例6.4编译一个程序,从外围设备71H取一个数m,判断其值是否在10到20之间,即10M20。如果是M20H,发送0FFH到外围设备73H;如果是M10,发送00H到外围设备73H;如果是10M20,发送88H到外围设备73H。(1)分析题目:根据题目的含义,这是一个需要两次判断m大小的问题。首先判断m是否大于10,然后判断m是否大于20。2020/7/8,21/41,(2)根据解决
11、问题的思路,先画出程序流程图,如图6.6所示。从图6.6中的程序流程图来看,两个分支都应该“返回”到原始程序。图6.6,判断m,2020/7/8,22/41的流程图,(3)程序如下:启动:INAL,71H;将端口71H的字节读入ALLCC;清除比照CMPAL,10;将铝的含量与10 jclp1进行比较;LP1 CMPAL小于10转/分,20;将铝含量与20厘泊进行比较;10AL20至LP2 MOVBL,0FFH;将0FFH发送到BL寄存器LP3:OUT73H,BL;输出0FFH至73H端口hlt。暂停LP1:MOVL,00 JM PLP 3lp 2:MOVL,88jmplp3,2020/7/8
12、,23/41,编译一个程序段,并完成符号函数:1X0 (-128X127) Y=0X=0 -1X0,假设x的值存储在DATA1中,Y的值存储在DATA2中。演习,2020年7月8日,24/41,演习计划如下:开始:MOV铝,数据1和铝,铝JGE比格MOV铝,0FFH MOV数据2,铝;X0,-1发送数据2hlt bigr: je equallov al,1 MOV DATA2,al;X0,1发送数据2hltequal: mov数据2,al。X=0,0发送数据2 HLT,2020/7/8,25/41,阅读程序,并询问:该程序的执行结果是什么?开始:INAL,5FH测试,80H JZBRCH1 M
13、OVAH,0 JMPSTOP BRCH1:MOVAH,0FFH停止:HLT,将5FH端口的字节读入A1;如果A1的最高位是1,ZF=0,否则ZF=1;当结果为零(即ZF=1)时,跳转到BRCH1将立即计数并发送给AH;无条件转移至停止;将0FFH发送至AH;暂停,当AL的最高位为1时,ah=0;当A1的最高位为0时,AH=0FFH。2020/7/8,26/41,实现双分支程序设计应完成以下任务:1 .生成条件:主要使用“比较”、“测试”等指令来生成条件;2测试条件和定向转移:完成条件转移指令;3.设置执行标志(标签):定义执行部分的地址标签。2020/7/8,27/41,6.4循环程序,这是一
14、种迫使中央处理器重复执行某一指令序列(程序段)的程序结构。循环结构程序缩短了程序的长度,减少了占用的内存空间。循环程序并没有简化程序的执行过程,相反,由于增加了一些循环控制环节,程序的总执行语句和时间会增加。循环程序通常由四部分组成:初始化、循环体、循环控制和循环结束处理。循环程序分为单循环和多循环,两个以上的循环称为多循环。内外循环不能交叉。2020/7/8,28/41,6.4循环程序,循环程序各部分的内容(1)初始化和建立循环计数器,设置变量初始值和存储数据的存储器地址指针(常用的地址间模式)等。(2)由循环体重复执行以实现程序功能的一系列指令。(3)循环控制修改变量和地址指针,为下一个循
15、环做准备;修改循环计数器或判断循环条件是否满足,如果满足,继续循环,否则,结束循环。(4)结束处理主要用于分析和存储程序的结果。2020/7/8,29/41,有多种循环控制方法,如计数控制、条件控制等。计数控制预先知道周期数,在每个周期内加减计数,通过判断周期数达到控制周期的目的;条件控制不预先知道循环的次数,所以它可以通过判断某个条件是真还是假来达到控制循环的目的。无论哪种控制回路模式,最终目标都是实现控制回路。如果你不仔细思考,就会造成一个无限循环,所以我们应该注意这一点。循环可以用跳转语句实现,如JMP、JZ等。它也可以用特殊的loop控制语句来实现,例如LOOP、loop/loopz、
16、loop/loopz。2020/7/8,30/41,示例6.5计算两个多字节数的总和。这两个数字从地址10050H开始连续存储在存储单元中,低位在小地址的末尾,结果放在这两个数字之后。让两个多字节数为8字节长。(2)程序流程图如图6.10所示。2020/7/8,31/41,(1)分析主题:这是一个重复累积存储单元数量的问题,因此可以用循环程序的形式解决。因为86系列指令系统可以处理16位,周期数为4次。5,5,9,8,点击,2020/7/8,32/41,(3)编程程序如下:启动:MOVAX,1000H MOVDS,ax;DS1000H MOVSI,50H第一个数字指针SI50H MOVDI,5
17、8H;第二个数字指针DI58H MOVBX,60h结果指针BX60H MOVCX,4;周期时间cx4 CLC清除进位cf0aa: movax,si。拿一个字给AX,下一页继续,2020/7/8,33/41,ADCAX,di;最大输出功率;向bxpushf保存一个单词;警卫携带CF ADDSI,2;修改地址指针SISI 2地址,第一个数字的2;修改地址指针DIDI 2 ADDBX,第二个数字的2;修改结果指针bxbx2popf。恢复标志寄存器LOOPAA;CXCXX-1,如果CX0转换为aahlt。CX0,暂停,结束,2020/7/8,34/41,示例6.6要求设计延迟时间约为1毫秒的软件延迟程序。(1)分析问题:这个问题是让计算机做一些无用的操作来拖延时间。根据指令手册,可以找到每条指令所需的时间节拍,但一般来说,一条指令的执行时间只有几个时钟周期,即只有几微秒
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 股票试题及答案
- 7.2+全面推进依法治国的总目标与原则课件高中政治统编版必修三政治与法治
- 户外拓展露营免责协议书
- 贵州省黔南州2026年下学期期中考试七年级数学试卷附答案
- 2026年中国移动招聘考试通信专业基础知识
- 2026年应急管理局危险化学品储存数量超限处罚测试
- 2026年高潜人才测评中心模拟试题
- 2026年高层民用建筑消防安全管理规定实施知识题
- 2026年环保科技公司环卫项目工人招聘考试试题
- 2026届四川省成都市高三三诊语文试题(含答案)
- 风电场项目升压站施工测量施工方案与技术措施
- 中国的侍酒师
- 北师大新版八年级下册数学前三章复习培优题
- 主港潮汐的查取与计算
- 2023北京市大兴区初一(下)期中语文试题及答案
- 国开农业生态学形考任务阶段作业1-4答案
- 某中学图书馆电气设计毕业设计论文
- 刺客列传荆轲原文翻译
- GB/T 34042-2017在线分析仪器系统通用规范
- A类业余无线电操作题库及答案
- 肾小球肾炎病人的护理课件
评论
0/150
提交评论