微机原理之结构化程序设计.ppt_第1页
微机原理之结构化程序设计.ppt_第2页
微机原理之结构化程序设计.ppt_第3页
微机原理之结构化程序设计.ppt_第4页
微机原理之结构化程序设计.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

结构化程序设计,Principles: 按照软件工程的观点,一个程序如果只包括顺序结构、分支结构和循环结构,那么其逻辑错误只限于某一结构内,不至于影响整个程序。这样,错误便于检查和改正。 此外,我们还要看看子程序的实现及查表的处理方法。它们通常用在较为复杂的场合。,汇编语言程序的基本结构,一、顺序结构 顺序结构是指程序按指令顺序逐条执行的一种结构。也是程序结构中最简单的一种结构。,二、分支结构 指程序中具有转移指令,可根据转移条件(一般为0、Cy、OV)决定是转移还是继续执行下一条指令。请看P55例3-8,几种分支结构程序的框图,P55例3-8找出A和R1中的大数送R1流程图,正减负溢出,ACC.7=1,OV=1,OV=1,A-R1-A,yes,no,R2(原A)-R1,R1不变,R1不变,yes,yes,no,no,R2(原A)-R1,负减正未溢出,负减正溢出,正减负未溢出,比较条件 差的符号 两数相减后标志状态 X为正数,Y为正数 XY X-Y为正 OV=0 XY X-Y为正 OV=0 XY X-Y为正 OV=0 XY X-Y为负 OV=1 XY X为负数且Y为正数,X不可能大于Y XY X-Y为正 OV=1 XY X-Y为负 OV=0,带符号数相减的所有可能情况比较,带符号数求最大值 例3-8 组单字节带符号数据存放在以2042H为首地址的连续单元中,数据长度存放在2041H单元,找出的最大值存于2040H单元。,带符号数求最大值与最小值的程序 0100 ORG 0100H 0100 90204l MOV DPTR,#2041H 0103 EO MOVX A,DPTR 0104 FF MOV R7,A 0105 7900 MOV R1,#80H ;开始R1存最小值 -128 0107 A3 LOOP: INC DPTR 0108 E0 MOVX A,DPIR 0109 FA MOV R2,A 010A C3 CLR C 010B 99 SUBB A,R1 010C 20E705 JB ACC.7,MINUS 010F 20D209 PLUS:JB OV,SMA 0112 8005 SJMP BIG,带符号数求最大值与最小值的程序(续) 0114 20D202 MINUS:JB OV,BIG 0117 8002 SJMP SMA 0119 EA BIG:MOV A,R2 011A F9 MOV R1,A 011B DFEA SMA:DJNZ R7,LOOP 011D 902040 MOV DPTR,#2040H 0120 E9 MOV A,R1 0121 F0 MOVX DPTR,A 0122 80FE SJMP $ END,三、循环结构 循环结构由四个环节组成。 1.初始化部分:对循环体中参加操作的有关参数、地址等赋以初始值,并指定循环结束条件。 2.循环体部分:指每次循环都需要重复执行的程序段。 3.修改初始值:每次循环结束都要对初始值进行修改,特别是判断结束条件的参数,每经一次循环后都要作相应的修改,以便决定是否结束循环。 4.结束判断部分:检查结束条件是否满足,若条件满足停止循环,否则返回继续执行循环体。,循环结构框图 图中每执行一次循环体后,都要检查结束条件是否满足,若条件满足停止循环,否则返回继续执行循环体。 右边两图区别是先检查循环是否结束后修改初值,还是先修改初值后检查循环是否结束。,循环结构程序举例 例3-4 编制一延时子程序,使执行这一段程序延时2s。 0100 7D64 MOV R5,#64H 0102 7E64 LOOP1: MOV R6,#64H 0104,7F62 LOOP2: MOV R7,#62H 0106 DFFE LOOP3: DJNZ R7,LOOP3 0108 DEFA DJNZ R6,LOOP2 010A DDF6 DJNZ R5,LOOPl 010C 22 RET 晶振频率为12MHz时,1机器周期=12*1/12微秒= 1微秒,以上程序执行的时间近似为100*100*98*2微秒2秒,如要准确计算还需考虑执行对R5、R6、R7的赋值指令所需的时间、RET返回指令的时间等等,但误差不易控制。,返回本章首页,四、子程序 例3-6 将30H中的数转换为BCD码,并存于40H、41H(百位存于40H,十位和个位合并存于41H)。 主程序:入口条件为待转换的十六进制数存R1 0100 ORG 0100H 0100 A930 MOV R1,30H 0102 122000 LCALL SUB 0105 8A40 MOV 40H,R2 0107 8B41 MOV 41H,R3 0109 80FE SJMP $ END,假定主程序调用子程序前,SP=07H,当主程序执行完LCALL SUB指令时,堆栈(位于内部RAM)中的内容如下 08H SP 09H,子程序SUB:入口为R1,出口为转换所得BCD码存R2、R3 ORG 2000H 2000 E9 SUB: MOV A,R1 ;取十六进制数 2001 75F064 MOV B,#64H 2004 84 DIV AB ;除以100 2005 FA MOV R2,A ;商为百位数存R2 2006 740A MOV A,#0AH 2008 C5F0 XCH A,B ;除100余数作为下一次的被除数 200A 84 DIV AB ;余数再除以10 200B C4 SWAP A 200C 45F0 ORL A,B ;十位个位合并 200E FB MOV R3,A ;十位个位合并存R3 200F 22 RET,当子程序执行完RET指令时,堆栈(位于内部RAM)中的内容如下 SP 07H 08H 09H PC=0105H,五、查表 当某一变量x与函数y的关系无规律可循时,可以将变量x作为序号,函数y值作为元素,列出一份序号与元素的关系表。然后利用查表法从序号求得元素。 1.序号小于256的查表程序 例3-11 设在寄存器R1存了两个BCD码,将它们转换为共阴数码管的七段码,存入21H和22H。该程序在实验二中用到。,序号小于256查表程序 TRAN: MOV DPTR,#TABLE ;取表头地址 MOV A, R1 ANL A, #0FH ;取BCD码低4位 MOVC A,A+DPTR ;换成七段码 MOV 21H, A MOV A, R1 SWAP A ;转换高4位位置 ANL A, #0FH ;取BCD码高4位 MOVC A,A+DPTR ;换成七段码 MOV 22H,A RET TABLE: DB 06H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH,一般的查表程序:求R1中的数的平方,存入R1 TRAN: MOV DPTR,#TABLE ;取表头地址 MOV A, R1 MOVC A,A+DPTR ;换成平方 MOV R1, A RET TABLE: DB 0,1,4,9,16,25,36,49,64,81 可见主要问题在于设计表格。当序号或表格内容较大,超出256时要另行处理。,2.序号大于256的查表程序 当元素总数大于256,要用DPTR直接加16位序号,才能得到元素地址值。 例3-13 设有1000个元素的函数表,元素序号高8位存于20H,低8位存于21H,要求将求出的元素值存于30H。 TRAN: MOV DPTR,#TABLE ;取表头地址 MOV A, 21H ;求元素位置低8位 ADD A,DPL MOV DPL,A MOV A,20H ;求元素位置高8位 ADDC A,DPH MOV DPH,A CLR A MOVC A,A+DPTR ;取出元素 MOV 30H, A RET TABLE: DB.,3.元素值占两个字节以上的查表程序 当元素占两个以上字节,应考虑每个序号的偏移量。 例3-14 设序号存20H,且小于128,元素占2个字节,表头为2001H,即元素0地址为2001H、2002H,元素1地址为2003H、2004H,余类推。试根据序号求出元素值,并存于30H、31H。 TRAN: MOV DPTR,#TABLE MOV A, 20H RL A ;序号乘2得序号与表头距离 MOV R2,A ;暂存于R2 MOVC A,A+DPTR MOV 30H, A MOV A,R2 INC A MOVC A,A+DPTR MOV 31H,A RET TABLE: DB ,4.变量x的数值不是等差序列的查表程序 解决这类问题可以采用搜索的办法,即制作一张序号与元素即x-y依序排列表,表中在每个序号x的后面紧接着元素y。表的结构如下: TAB: x1 y1 x2 y2 . . xn yn 给出序号x的数值后,用搜索法查出它所在的地址,将查出的地址加1,就是元素所在的地址,然后从中取出y值。,六、散转程序 散转程序实际是一种并行分支程序,可根据某个输入值或运算结果,转到不同的分支处理。 例3-15 设程序中有四个功能子程序入口,分别为1000H、1200H、1400H、1600H。要求根据运行后21H的数值0、1、2、3转相应子程序。 ANYCHEN: MOV DPTR,#TABLE ;取入口地址表头 MOV A, 21H ;取输入值 RL A ADD A, 21H ;输入值乘3 JMP A+DPTR TABLE: LJMP 1000H ;TABLE+0 LJMP 1200H ;TABLE+3 LJMP 1400H ;TABLE+6 LJMP 1600H ;TABLE+9,返回本章首页,

温馨提示

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

最新文档

评论

0/150

提交评论