190 likes | 368 Views
第五章 程序设计 4 . 1 概述. 一、 机器语言、汇编语言和高级语言 二、 汇编语言源程序的格式 标号: 操作符 操作数 ; 注释 LOOP: MOV A,#04H ; 立即数送累加器 三、伪指令 1 、 ORG 〈 序号 〉 ORG XXXXH 指明下面源程序或数据块的起始地址。 2 、 END 〈 序号 〉 END ;指明源程序结束 。. 3 、 DB 标号: DB XXH 字节定义,表示标号单元中的内容为 XXH 。 4 、 EQU 标识符 EQU 参数
E N D
第五章 程序设计 4.1 概述 一、机器语言、汇编语言和高级语言 二、汇编语言源程序的格式 标号: 操作符 操作数 ; 注释 LOOP: MOV A,#04H ; 立即数送累加器 三、伪指令 1、ORG 〈序号〉 ORG XXXXH 指明下面源程序或数据块的起始地址。 2、END 〈序号〉 END ;指明源程序结束。
3、DB 标号: DB XXH 字节定义,表示标号单元中的内容为XXH。 4、EQU 标识符EQU 参数 将参数的值赋给标识符,参数可以是数据、标号、标识符等。语句前的标识符不能省。
4.2 各类程序设计 结构有:顺序、分支、循环、子程和查表 一、顺序结构 1、字节分解 FJ: MOV A, 30H ANL A, #0FH MOV 50H, A MOV A, 30H ANL A, #0F0H MOV 51H, A RET 2、三字节无符号数相加 (P84例4.1)
3、二进制数→BCD码 BINBCD: MOV B, #64H DIV AB MOV 51H, A MOV A, #0AH XCH A, B DIV AB SWAP A ADD A, B MOV 50H, A RET 二、分支结构 1、两个无符号数比较大小。 P85例4.2 2、使用CJNE实现多分支 P86例4.3 3、使用查表实现多分支 P87例4.4
三、循环结构 1、测试数据长度(P89例4.6) 2、数据传送(P89例4.7) 3、延时程序(P98定时程序) DELAY: MOV R4, #0AH DEL1: MOV R5, #00H DEL2: DJNZ R5, DEL2 DJNZ R4, DEL1 RET 4、算术运算(P90 )
例4.8 双字节原码加减法程序(P91) R2R3 ± R4R5 → R6R7 ;R2, R4最高位为符号位
例4.10 :无符号数除法(P94) 书中: R7R6 ∻ R5R4 →R7R6 余数在R3R2中 应改写成: R3R2 R7R6 ∻ R5R4 →R7R6 余数在R3R2中 R3R2 <R5R4 100110 ∻101=111 余11 算法: (1)R7R6 左移一位; (2)R3R2 -R5R4 (除数); (3)够减R6(商)加1,不够减不加; (4)循环16次。 反回
四、子程序的设计 步骤: 1、确定子程序名称,即入口标号。 1、2、确定子程序的输入/输出参数。 3、1、确定所用的寄存器和存储单元,以便现场保护。断点保护由指令自动完成。 4、1、确定子程序的算法,编写源程序。 举例:多字节BCD数加法。
子程序: ADDB: PUSH PSW PUSH ACC CLR C LOOP: MOV A, @R0 ADDC A, @R1 DA A MOV @R0, A INC R0 INC R1 DJNZ R2, LOOP POP ACC POP PSW RET
4字节BCD数相加主程序: MOV R0, #20H MOV R1, #30H MOV R2, #04H LCALL ADDB
五、查表程序 1、查表用指令 MOVC A, @A+DPTR MOVC A, @A+PC ADD A, #1 MOVC A, @A+PC RET TAB: DB 00, 01, 04, 09, 16 DB 25, 36, 49, 64, 81 例:用查表发求(0~9)的平方 MOV DPTR, #TAB MOVC A, @A+DPTR RET TAB: DB 00, 01, 04, 09, 16 DB 25, 36, 49, 64, 81 2、查表程序举例(P100) 除法
hex 2 A asc 4 1 asc+1 3 2 六、各种应用小程序 1、十六进制转换为ASCII码(P96例4.11) 2、 ASCII码转换为十六进制数(P97)
七、排序程序 要求:设有一数组S,含有N个元素:S1,S2, S3,•••,SN。 求按小到大次序排序。 算法: ①从S1,S2, S3,•••,SN比较相邻两元素,即Si与Si+1 ; ② Si > Si+1 ,交换Si与Si+1 ,且置1交换标志; ③ Si < Si+1 ,符合排序要求,不交换; ④按相同方法比较下两个元素Si +1与Si+2,直到SN(称一次扫描); ⑤检查交换标志,为0,已排序完毕; ⑥为1,重复①~⑤,最多N次,最少一次。
例:N=4 S1,S2, S3,S4若为: 1,2,3,4称顺序,则只需一次扫描 S1,S2, S3,S4若为: 4,3,2,1称逆序, 排序过程: 第一次扫描后为: 3,2,1,4 有交换; 第二次扫描后为: 2,1,3,4 有交换; 第三次扫描后为: 1,2,3,4 有交换; 最后一次扫描后无交换,则结束。
编写教材上p112题1程序 INBUF EQU 30H OUTBUF EQU 50H ORG 1000H 1000 7830 MOV R0,#INBUF 1002 7950 MOV R1,#OUTBUF 1004 7A10 MOV R2,#10H 1006 E6 LOOP: MOV A,@R0 1007 C3 CLR C 1008 94D0 SUBB A,#0D0H 100A 6006 JZ LOOP1 100C E6 MOV A,@R0
100D F7 MOV @R1,A 100E 09 INC R1 100F 08 INC R0 1010 DAF4 DJNZ R2,LOOP 1012 22 LOOP1:RET END 编写教材上p112题3程序 ORG 1000H 1000 901020 MOV DPTR,#TABLE 1003 7908 MOV R1,#08H 1005 89F0 MOV B,R1 1007 7800 MOV R0,#00H 1009 E4 LOOP:CLR A
100A 93 MOVC A,@A+DPTR 100B 28 ADD A,R0 100C F8 MOV R0,A 100D A3 INC DPTR 100E D9F9 DJNZ R1,LOOP 1010 84 DIV AB 1011 22 RET ORG 1020H 1020 0203041012222530 TABLE:DB 02H,03H,04H,10H,12H,22H,25H,30H END