第06章(简化)方案课件.ppt

上传人:牧羊曲112 文档编号:3958269 上传时间:2023-03-28 格式:PPT 页数:43 大小:1.96MB
返回 下载 相关 举报
第06章(简化)方案课件.ppt_第1页
第1页 / 共43页
第06章(简化)方案课件.ppt_第2页
第2页 / 共43页
第06章(简化)方案课件.ppt_第3页
第3页 / 共43页
第06章(简化)方案课件.ppt_第4页
第4页 / 共43页
第06章(简化)方案课件.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《第06章(简化)方案课件.ppt》由会员分享,可在线阅读,更多相关《第06章(简化)方案课件.ppt(43页珍藏版)》请在三一办公上搜索。

1、2023/3/28,1/41,第6章微型计算机的程序设计,6.1程序设计步骤6.2简单程序6.3分支程序6.4循环程序6.5子程序6.6查表程序习题,2023/3/28,2/41,6.1 程序设计步骤,汇编语言程序设计步骤:(1)分析问题:已知条件、要解决的问题、功能/性能要求等。(2)建立数学模型:把问题数学化、公式化,便于计算机处理。(3)确定算法:简单、速度快、精度高、代码量小、编程容易。(4)绘制程序流程图:用箭头、框图、菱形图等表示程序结构。(5)内存空间分配:为程序或数据分配内存空间。(6)编制程序与静态检查:程序结构层次简单、清楚、易懂。(7)程序调试:利用调试软件DEBUG进行

2、调试。,2023/3/28,3/41,汇编语言程序设计的特点:(1)算法要分解至指令级;高级语言为语句级。(2)要详细考虑内存空间分配问题:任何一个变量、一条指令都要明确其存储位置。,2023/3/28,4/41,6.2 简单程序,这种程序的形式最简单,计算机执行程序的方式是“从头到尾”,逐条执行指令语句,直到程序结束。这类简单程序不用按上述7个步骤,可直接对给出的题目写出助记符程序清单。【例6.1】用数据运算指令,对两个16位数做加法运算。这两个数从地址10050H开始连续存放,低位在小地址一端,结果放在这两个数之后。(1)分析题目:它是一个16位数相加的问题。在用加法指令时,必须要考虑低8

3、位和低8位相加后产生的进位问题。,2023/3/28,5/41,(2)根据86系列指令系统,可以直接对累加器AX做字操作,但在低位相加后,会影响标志寄存器的进位位CF,所以,要用带进位的加法指令。(3)绘制程序流程图,如右图所示。,图6.2 简单程序框图(双字节相加),2023/3/28,6/41,(4)内存空间分配:被加数、加数及和在内存的空间分配见下表,表6-1 双字节相加时的内存分配,2023/3/28,7/41,内存地址,存储内容,MOV AX,1000HMOV DS,AX MOV SI,50H MOV DI,52H MOV BX,54H,低位在前,高位在后,CLC XOR AX,AX

4、 MOV AX,SI ADC AX,DI MOV BX,AX HLT,设SI=3412H DI=BDA1H,内存分配示意,程序详细注释见下页,2023/3/28,8/41,(5)编制的程序如下:MOVAX,1000HMOVDS,AX;DS1000HMOVSI,50H;被加数指针SI50HMOVDI,52H;加数指针DI52HMOVBX,54H;和的指针BX54HCLC;清CFXORAX,AX;清AXMOVAX,SI;取一个字到AXADCAX,DI;AXAX+DI+CFMOVBX,AX;存一个字到BXHLT;暂停,问题:该程序能否简化?如何简化?,2023/3/28,9/41,简化的程序:MOV

5、AX,1000HMOVDS,AX;DS1000HMOVAX,50H;取被加数到AXADDAX,52H;AX被加数+加数MOV54H,AX;存和数到54HHLT;暂停,2023/3/28,10/41,【例6.2】将内存(10050)单元的内容拆成两段,每段4位,并将它们分别存入内存(10051)和(10052)单元。即(10050)单元中的低4位放入(10051)的低4位,(10050)单元中的高4位放入(10052)的低4位,而(10051)和(10052)的高4位均为零。(1)分析题目:这个题目提出的任务在十六进制显示及二、十进制计算中常遇到的.现在假设内存(10050)中放着7AH,则题目

6、要求就是把7AH拆成07H和0AH两部分,并把0AH放在(10051)单元,07H放在(10052)单元。,2023/3/28,11/41,在拆字时,想取得一个数的前4位和后4位可以用移位指令的方法,也可以用逻辑与一个0F0H(二进制为11110000)和逻辑与一个0FH(二进制为00001111)的办法。(2)根据指令系统中含有的指令,先取出该数用逻辑指令与上一个 0FH,得到低4位,存入内存。再取出该数用移位指令逻辑右移SHR(见图5.10(c)4次,取得高4位,存入内存即可.,图5.10(c),2023/3/28,12/41,(3)绘制程序流程图,如图6.3所示。(4)内存空间分配:把7

7、AH拆成07H和0AH两部分,它们在内存空间的分配情况见下页表6.2。,图6.3拆字程序框图,2023/3/28,13/41,内存分配示意图,表6-2 拆字程序的内存分配,2023/3/28,14/41,(5)编制的程序如下:MOV AX,1000HMOV DS,AX;DS=1000HMOV SI,50H;需拆字节的指针SI=50HMOV AL,SI;取一个字节到AL中AND AL,0FH;把AL的前4位清0MOV SI+1,AL;把得到的后4位放到(10051)单元MOV AL,SI;再取出需拆字节放到AL中MOV CL,4 SHR AL,CL;逻辑右移四次,前4位补0MOV SI+2,AL

8、;放入(10052)单元,2023/3/28,15/41,例3 编程计算 1+2+3+4。,MOV AX,0 ADD AX,1 ADD AX,2 ADD AX,3 ADD AX,4,分析:需要有一个暂存空间存放累加和,初值设置为0,之后依次累加。,2023/3/28,16/41,6.3 分支程序,分支程序是利用条件转移指令实现程序执行次序改变的一种程序结构形式,即当程序执行到某一指令后,根据某个条件是否满足,分别执行不同的指令序列。一般来说,分支程序经常是先用比较指令或数据操作及位检测指令等来改变标志寄存器各个标志位。然后用条件转移指令进行分支。分支程序执行完后可以立即结束,也可以转到公共点结

9、束,如下图所示。分支程序可以再分支。程序框图:在绘制程序流程图时,需用菱形判断框,表示判定条件。在绘制好流程图编写助记符程序时,建议先按上下流程线写,写完上下流程线上的各框环节后,再写分支部分里的框框。,2023/3/28,17/41,【例6.3】求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存(2800)单元中。(1)分析题目:此题目中,AX累加器和BX寄存器中的数是不知道的。对两个不知大小的数相减并求绝对值,显然应该先解决哪一个值稍大些,然后再用大数减小数的方法,才可求得绝对值。,2023/3/28,18/41,(2)根据指令系统中的比较指令,编出判断大小的环节,即可解决问

10、题,图6.5即为该例题的程序流程图。,图6.5求绝对值程序流程图,2023/3/28,19/41,(3)根据流程图编制程序如下:CLC;清除CFSUBAX,BX;AXAX-BXJCAA;CF转AA去执行(即AXBX时转移)MOVDI,2800H;结果指针DI2800HMOVDI,AX;结果送到2800H和2801H单元HLT;暂停AA:SUB BX,AX;BXBX-AXMOVDI,2800HMOVDI,BXHLT,2023/3/28,20/41,【例6.4】编一个程序,从外设71H号中取一个数M,判断其值是否在10和20之间,即10M20。如果M20H,则送0FFH给外设73H;如果M10,则

11、送00H给外设73H;如果10M20,则送88H给外设73H。(1)分析题目:根据题意,这是一个需要两次判断M大小的问题。先判M是否大于10,再判M是否大于20。,2023/3/28,21/41,(2)根据解决问题的思路,先画出程序流程图,如图6.6.从图6.6的程序流程图看,两个分支都要“回归”原程序。,图6.6判断M的两分支流程图,2023/3/28,22/41,(3)编制的程序如下:START:INAL,71H;将71H端口的字节读入AL CLC;清除CFCMPAL,10;将AL的内容和10相比较JCLP1;小于10转LP1CMPAL,20;将AL的内容和20相比较JCLP2;10AL2

12、0转LP2MOVBL,0FFH;将0FFH送入BL寄存器LP3:OUT73H,BL;将0FFH输出到73H端口HLT;暂停LP1:MOVBL,00 JMPLP3LP2:MOVBL,88H JMPLP3,2023/3/28,23/41,编一程序段,完成符号函数:1X0(-128X127)Y=0X=0-1X0 假设X的值存放在DATA1中,Y的值存放在DATA2中。,练习,2023/3/28,24/41,练习题程序如下:START:MOV AL,DATA1 AND AL,AL JGE BIGR MOV AL,0FFH MOV DATA2,AL;X0,-1送DATA2 HLTBIGR:JE EQUL

13、 MOV AL,1 MOV DATA2,AL;X0,+1送DATA2 HLTEQUL:MOV DATA2,AL;X=0,0送DATA2 HLT,2023/3/28,25/41,读程序,问:本段程序的执行结果是什么?BEGIN:INAL,5FH TESTAL,80H JZBRCH1 MOVAH,0 JMPSTOPBRCH1:MOVAH,0FFHSTOP:HLT,;将5FH端口的字节读入AL;如果AL的最高位为1,则ZF=0,否则ZF=1;当结果为零(即ZF=1)时,跳转至BRCH1;将立即数零送AH;无条件转移至STOP;将0FFH送AH;暂停,当AL的最高位为1时,AH=0;当AL的最高位为0

14、时,AH=0FFH。,2023/3/28,26/41,双分支程序设计 实现双分支程序设计要完成以下几项工作:1 产生条件:主要用“比较”、“测试”等指令产生条件;2 测试条件、定向转移:用条件转移指令完成;3 设置执行标志(标号):给执行程序段定义地址标号。,2023/3/28,27/41,6.4 循环程序,循环程序是强制CPU重复执行某一指令序列(程序段)的一种程序结构形式。循环结构程序缩短了程序的长度、减少了占用的内存空间。循环程序并不简化程序执行过程,相反,由于增加了一些循环控制等环节,总的程序执行语句和时间会有所增加。循环程序一般由4部分组成:初始化、循环体、循环控制和循环结束处理。循

15、环程序分为单循环和多重循环,两重以上循环称为多重循环。内外循环不能交叉。,2023/3/28,28/41,6.4 循环程序,循环程序各部分的内容(1)初始化建立循环次数计数器,设定变量和存放数据的内存地址指针(常用间址方式)的初值等。(2)循环体实现程序功能的、被重复执行的指令序列。(3)循环控制修改变量和地址指针,为下一次循环做准备;修改循环计数器或者判断循环条件是否满足,满足则继续循环,否则结束循环。(4)结束处理它主要用来分析和存放程序的结果。,2023/3/28,29/41,循环控制方式有多种,如计数控制、条件控制等。计数控制事先已知循环次数,每次循环加或减计数,通过对循环次数的判定来

16、达到控制循环的目的;条件控制事先不知循环次数,通过判定某种条件的真假来达到控制循环的目的。不管哪一种控制循环方式,最终都是要达到控制循环的目的。若考虑不周,会造成死循环,对这一点要注意。循环可以用跳转语句实现,如JMP,JZ等;也可以用专用循环控制语句实现,如LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ。,2023/3/28,30/41,【例6.5】求两个多字节数之和。这两个数在10050H地址开始的内存单元中,连续存放,低位在小地址一端,结果放在这两个数之后。设这两个多字节数均为8个字节长。(2)程序流程图如右图6.10所示。,2023/3/28,31/41,(1)分析题目:

17、这是一个重复累加内存单元中数的问题,因此可以用循环程序形式解决。因为86系列指令系统可以16位处理,所以,循环次数是4次。,5,5,9,8,单击,2023/3/28,32/41,(3)编制的程序如下:START:MOVAX,1000HMOVDS,AX;DS1000HMOVSI,50H;第一个数指针SI50HMOVDI,58H;第二个数指针DI58HMOVBX,60H;结果指针BX60HMOVCX,4;循环次数CX4CLC;清进位CF0AA:MOVAX,SI;取一个字到AX,下页续,2023/3/28,33/41,ADCAX,DI;AXAX+DI+CF MOVBX,AX;存一个字到BX PUSH

18、F;保护进位CFADDSI,2;修改第一个数的地址指针SISI+2ADDDI,2;修改第二个数的地址指针DIDI+2ADDBX,2;修改结果指针BXBX+2POPF;恢复标志寄存器LOOPAA;CXCX-1,若CX0转AAHLT;CX0,暂停,结束,2023/3/28,34/41,【例6.6】要求设计一个软件延时程序,延时时间约1ms左右。(1)分析题目:此题是想让计算机做一些无用的操作,来拖延时间。从指令手册中查得各条指令所需的时间节拍,但一般一条指令执行时间只有几个时钟周期,亦即只有几个微秒,为了能用较少的指令来编较长时间的延时,采用循环程序结构.,2023/3/28,35/41,(2)程

19、序流程图如图6.11所示。延时的时间主要取决于循环体及循环次数。PUSHF和POPF指令分别为10和8个时钟节拍,LOOP BX指令为3.4个时钟节拍,即此循环体需要用10+8+3.421.4拍,而每个时钟节拍是根据此系统的晶振频率而定的。假设此系统用的是8MHz的晶振,则每个时钟节拍需要0.125s,因此可以根据下列公式算出循环次数:X延时时间/一次循环时间1ms/21.40.125s374次 换算成十六进制数为176H。,2023/3/28,36/41,图6.11 延时1ms的程序流程图,图6.12 延时1ms的程序流程图,2023/3/28,37/41,(3)编制的程序如下:START:

20、MOVCX,176H;初始化,设定循环次数CX374LP1:PUSHF;循环体 POPF LOOPLP1;CXCX-1,若CX0转LP1 HLT;暂停 对于上例,如果想再延长1000倍时间(即延时1s),可以采用双循环的方法,如图6.12所示的程序流程图。对应的程序如下:,2023/3/28,38/41,MOVBX,3E8H;BX1000LP2:MOVCX,176HLP1:PUSHF POPF延时1ms程序段 LOOP LP1 DECBX;BXBX-1 JNZLP2;ZF0时,转至LP2,即BX0时转 HLT;暂停 此程序中内循环是1ms时间,而在外循环中的两条控制指令DEC和JNZ所对应的时

21、钟节拍分别为2个和4个,一共只需0.75s,与1ms比较极短,所以在外循环里忽略不计了,外循环的循环初值仍设为1000次,对应的十六进制为3E8H。,2023/3/28,39/41,例 设AX寄存器中有一个16位二进制数,编一程序,统计AX中1的个数,统计结果送CX中。,该程序可用固定次数循环和条件判断两种方法实现。条件判断法编制程序如下:START:MOV CX,0LOOP:SUBAX,0 JZSTP SALAX,1 JNCNOD INCCXNOD:JMPLOOPSTP:HLT,固定次数循环法,循环次数为16次,程序如下:其中:CX中存放循环次数,BX中存放“”的个数 MOV CX,16 M

22、OV BX,0 AA:SHL AX,1 JC YY JMP PP YY:INC BX PP:LOOP AA HLT,2023/3/28,40/41,例:计算S=1+2+3+100的和值并将其存入数据段2000H单元.,程序如下:MOV CX,64H MOV AL,0 MOV BL,1AA:ADD AL,BL INC BL LOOP AA MOV 2000H,AL HLT,2023/3/28,41/41,例:读程序,(1)本程序实现什么功能?(2)结果在哪里?,START:INAL,20HMOVBL,ALINAL,30HMOVCL,ALMOVAX,0ADLOP:ADDAL,BL ADCAH,0

23、DECCL JNZADLOP HLT,;将20H端口 的字节读入AL;AL中的8位字节送 BL;将30H端口 的字节读入AL;AL中的8位字节送 CL;立即数0送 AX;AL与BL的内容相加,结果放AL;AH的内容与立即数0以及CF相加;CL内容减1,结果放CL;当结果不为零时,执行ADLOP;暂停,20H与30H端口的内容相乘,结果放在AX中,人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号