1 / 19

第五章 程序设计 4 . 1 概述

第五章 程序设计 4 . 1 概述. 一、 机器语言、汇编语言和高级语言 二、 汇编语言源程序的格式 标号: 操作符 操作数 ; 注释 LOOP: MOV A,#04H ; 立即数送累加器 三、伪指令 1 、 ORG 〈 序号 〉 ORG XXXXH 指明下面源程序或数据块的起始地址。 2 、 END 〈 序号 〉 END ;指明源程序结束 。. 3 、 DB 标号: DB XXH 字节定义,表示标号单元中的内容为 XXH 。 4 、 EQU 标识符 EQU 参数

nickan
Download Presentation

第五章 程序设计 4 . 1 概述

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第五章 程序设计 4.1 概述 一、机器语言、汇编语言和高级语言 二、汇编语言源程序的格式 标号: 操作符 操作数 ; 注释 LOOP: MOV A,#04H ; 立即数送累加器 三、伪指令 1、ORG 〈序号〉 ORG XXXXH 指明下面源程序或数据块的起始地址。 2、END 〈序号〉 END ;指明源程序结束。

  2. 3、DB 标号: DB XXH 字节定义,表示标号单元中的内容为XXH。 4、EQU 标识符EQU 参数 将参数的值赋给标识符,参数可以是数据、标号、标识符等。语句前的标识符不能省。

  3. 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)

  4. 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

  5. 三、循环结构 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 )

  6. 例4.8 双字节原码加减法程序(P91) R2R3 ± R4R5 → R6R7 ;R2, R4最高位为符号位

  7. 例4.9无符号双字节乘法程序

  8. 例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次。 反回

  9. 四、子程序的设计 步骤: 1、确定子程序名称,即入口标号。 1、2、确定子程序的输入/输出参数。 3、1、确定所用的寄存器和存储单元,以便现场保护。断点保护由指令自动完成。 4、1、确定子程序的算法,编写源程序。 举例:多字节BCD数加法。

  10. 子程序: 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

  11. 4字节BCD数相加主程序: MOV R0, #20H MOV R1, #30H MOV R2, #04H LCALL ADDB

  12. 五、查表程序 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) 除法

  13. hex 2 A asc 4 1 asc+1 3 2 六、各种应用小程序 1、十六进制转换为ASCII码(P96例4.11) 2、 ASCII码转换为十六进制数(P97)

  14. 七、排序程序 要求:设有一数组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次,最少一次。

  15. 例: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 有交换; 最后一次扫描后无交换,则结束。

  16. ASCII码表

  17. 编写教材上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

  18. 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

  19. 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

More Related