C的汇编语言程序设计概要学习教案_第1页
C的汇编语言程序设计概要学习教案_第2页
C的汇编语言程序设计概要学习教案_第3页
C的汇编语言程序设计概要学习教案_第4页
C的汇编语言程序设计概要学习教案_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、会计学1C的汇编语言程序设计概要的汇编语言程序设计概要2021-12-52程序编制的方法和技巧4.1源程序的编辑和汇编4.2基本程序结构4.3子程序及其调用4.4简单I/O设备的并口直接驱动示例4.5第1页/共39页2021-12-53 汇编语言 高级语言 应用程序设计方法 汇编语言,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强。 高级语言,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。 第2页/共39页2021-12-54程序编制的步骤 明确任务:功能要求、技术指标 运行环境调研 将实际问题转化为计算机处理的程序算法 算法比较与优化(内存需求与运

2、行速度) 算法设计第3页/共39页2021-12-55 流程描述 “循环”框架第4页/共39页2021-12-56使程序占用空间减少、结构清晰循环初值和结束条件,避免“死机”现象子程序的现场保护(注意栈平衡、寄存器内容)程序模块(主程序模块、各种子程序模块)模块化优点:分块设计、便于阅读、调试方便程序编制的方法和技巧 采用循环和子程序对中断子程序还有注意保护PSW的内容第5页/共39页2021-12-57汇编语言的语句格式非数字字符开头,后跟字母、数字、“-”、“?”等不能用已定义的保留字(指令助记符、伪指令等)后跟英文冒号“:”Keil(或其它)汇编器A51可以识别的语句形式为:标号: 指令

3、助记符 操作数1, 操作数2, 操作数3, ;注释 指令助记符是指令功能的英文缩写。第6页/共39页2021-12-58数据:二进制(B) 十进制(D或省略D) 十六进制(H),注意AF开头时要加“0” ASCII码,如 A,1245符号:符号名、标号或“$”(PC的当前值)表达式:由运算符和数据构成 注释英文分号“;”开头第7页/共39页2021-12-594.2 源程序的编辑和汇编目标程序的产生过程如下图:第8页/共39页2021-12-510源程序的编辑和汇编 源程序的编辑 ORG 0000H LJMP MAIN ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H

4、MOV A,#55HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ END依据汇编语言规则用好伪指令符号不用中文SJMP $ 用于调试以 .ASM存盘第9页/共39页2021-12-511 源程序的汇编汇编源程序转为目标程序的过程叫汇编汇编通常在Windows下的集成开发环境完成用A51.EXE汇编生成.OBJ、.LIB及.LST 目标程序的连接.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址目标文件绝对地址目标文件可以用于仿真器调试调试无误的目标文件用OH51.EXE转换为.HEX文件.HEX文件经编程器写入单片机存储器第10页/共39页2021-

5、12-512伪指令伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无对应的单片机可执行代码 起始地址设定伪指令ORGORG 表达式表达式通常为十六进制地址,例: ORG 8000HSTART:MOV A,#30H ORG可多次使用,但地址值的顺序要由小到大 结束汇编伪指令ENDEND该伪指令位于源程序的最后一行。第11页/共39页2021-12-513 定义字节数据表伪指令DB定义字数据表伪指令DW1000H标号: DB 字节数据表如:ORG 1000HDB -2,-4,-6,8,10,18FEH FCHFAH08H0AH12H1001H标号: DW 字数据表 ORG 1400HDATA1:D

6、W 324AH,3CH 1400H32H 4AH00H3CH1401H1402H1403H第12页/共39页2021-12-514 定义常值为符号名伪指令EQU符号名 EQU 常值表达式 LEN EQU 10 SUM EQU 21HBLOCK EQU 22H CLR A MOV R7,LEN MOV R0,BLOCK LOOP:ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A 符号名为:地址常数字符串寄存器名比较:标号只能是地址第13页/共39页2021-12-515 定义位地址为符号名伪指令BIT符号名 BIT 位地址表达式如:ST BIT P1.0 ;将P1.0

7、的位地址赋给符号名STCF BIT 0D7H ;将位地址为D7H的位定义为符号名用BIT定义的“符号名”一经定义便不能重新定义和改变其它一些伪指令参见教材 第14页/共39页2021-12-516 传送类指令有两大类 一般传送( MOV ) 特殊传送,如: MOVC MOVX PUSH、POP XCH、XCHD SWAP 第15页/共39页2021-12-517顺序程序【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。第16页/共39页2021-12-518 ORG 0040HST

8、ART:MOV A,21H ;取十位ASCII码 ANL A,#0FH ;保留低半字节 SWAP A ;移至高半字节 MOV 20H,A ;存于20H单元 MOV A,22H ;取个位ASCII码 ANL A,#0FH ;保留低半字节 ORL 20H,A ;合并到结果单元 SJMP $ END第17页/共39页2021-12-519分支程序【例4-2】设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y并送回原单元。第18页/共39页2021-12-520 ORG 0040HST

9、ART:MOV A,30H ;取x至累加器 JZ NEXT ;x = 0,转NEXT ANL A,#80H ;否,保留符号位 JZ DONE ;x 0,转结束 MOV A,#05H ;x 0处理 ADD A,30H MOV 30H,A ;X+05H送Y SJMP DONE NEXT:MOV 30H,#20H ;x = 0,20H送Y DONE:SJMP DONE END 第19页/共39页2021-12-521循环程序【例4-4】将内部RAM的30H至3FH单元初始化为00H。MAIN:MOV R0,#30H ;置初值 MOV A,#00H ; MOV R7,#16 ; LOOP:MOV R0

10、,A ;循环处理 INC R0 ; DJNZ R7,LOOP ;循环修改,判结束 SJMP $ ;结束处理第20页/共39页2021-12-522【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中起始地址为1000H的存储区域,直到发现$ 字符停止传送。 MAIN:MOV R0,#60H ;置初值 MOV DPTR,#1000HLOOP0:MOV A,R0 ;取数据 CJNE A,#24H,LOOP1 ;循环结束? SJMP DONE ;是LOOP1:MOVX DPTR,A ;循环处理 INC R0 ;循环修改 INC DPTR SJMP LOOP0 ;继续循环 DONE:SJ

11、MP DONE ;结束处理第21页/共39页2021-12-523 完成通用功能、反复使用的程序设计成子程序。使应用程序结构清晰紧凑,便于阅读和调试 执行要由其它程序来调用,执行完后要返回到调用程序 结构上仍然采用一般程序的3种结构 调用时注意:一是现场的保护和恢复;二是主程序与子程序间的参数传递。第22页/共39页2021-12-524现场保护与恢复在主程序中实现(结构灵活) PUSH PSW ;保护现场( 含当前工作寄存器组号)PUSH ACC ;PUSH B ;MOV PSW,#10H ;切换当前工作寄存器组LCALL addr16 ;子程序调用, POP B ;恢复现场POP ACC

12、;POP PSW ;含当前工作寄存器组切换第23页/共39页2021-12-525在子程序中实现(程序规范、清晰)SUB1:PUSH PSW ;保护现场( 含当前工作寄存器组号) PUSH ACC ; PUSH B ; MOV PSW,#10H ;切换当前工作寄存器组 POP B ;恢复现场 POP ACC ; POP PSW ;内含当前工作寄存器组切换 RET第24页/共39页2021-12-526参数传递利用累加器或寄存器(简单、快速,但参数个数不多)【例4-6】实现两个8位的十六进制无符号数求和的子程序。SADD:MOV A,R3 ;取加数(在R3中) CLR C ADD A,R4 ;被

13、加数(在R4中)加A JC PP1 MOV R3,#00H ;结果小于255时,高字节R3内容为00H SJMP PP2 PP1:MOV R3,#01H ;结果大于255时,高字节R3内容为01H PP2:MOV R4,A ;结果的低字节在R4中 RET入口:(R3)=加数; (R4)=被加数。出口:(R3)=和的高字节; (R4)=和的低字节。第25页/共39页2021-12-527利用存储器(个数多,用R0或R1及DPTR为参数表指针)【例4-7】将内部RAM 中两个4字节无符号整数相加,和的高字节由R0指向。入口:(R0)=加数低字节地址; (R1)=被加数低字节地址。出口:(R0)=和

14、的高字节起始地址。 NADD:MOV R7,#4 ;字节数4送计数器 CLR C ;NADD1:MOV A,R0 ;利用指针,取加数低字节 ADDC A,R1 ;利用指针,被加数低字节加A MOV R0,A ; DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 ;调整指针,指向出口 RET 第26页/共39页2021-12-528常用子程序示例8位二进制数转换成BCD码。功能:0FFH范围内的二进制数转换为BCD码(0255)。入口:(A)为二进制数。出口:(R0)为十位数和个位数地址指针(压缩的BCD码)。 BINBCD1: MOV B, #100DIV AB ;(A)=

15、百位数MOV R0, A ;存入RAMINC R0MOVA, #10XCH A, BDIV AB ;(A)=十位数,(B)=个位数SWAP AADD A, B ;合成到(A)MOV R0, A ;存入RAMRET第27页/共39页2021-12-529第28页/共39页2021-12-530第29页/共39页2021-12-531COMP: MOV A,21H ;取一个比较的数 CJNE A,22H,BIG ;若不相等则转移(对CY有影响) SETB 127BIG: JC LESS ;若(21H)(22H)则转移 MOV 31H, A MOV 32H, 22H RETLESS: MOV 32H

16、, A MOV 31H, 22H RET第30页/共39页2021-12-532MSUB: MOV R0,#DATA1;置被减数 MOV R1,#DATA2;置减数MOV R7,#N;置字节数CLR C ;清进位位LOOP: MOV A,R0 SUBB A,R1;求差MOV R1,A ;存结果INC R0 ;修改指针INC R1 DJNZ R7,LOOP;循环判断RET第31页/共39页2021-12-533独立式键盘与LED显示示例【例4-17】数据端与P0口正序连接。编写程序,分别实现功能:上电后数码管显示“P”,按下任何键后,显示从“0”开始每隔1秒加1,加至“F”后,数码管显示“P”,

17、进入等待按键状态。 第32页/共39页2021-12-534 TEMP EQU 30HORG 0000HJMP START ORG 0100HSTART:MOV SP,#5FH MOV P0,#8CH ;显示PMOV P3,#0FFHNOKEY:MOV A,P3CPL AJZ NOKEY ;无键按下MOV TEMP,P3 ;有键按下CALL D10msMOV A,P3CJNE A,TEMP,NOKEY;去抖MOV R7,#16MOV R2,#0LOOP:MOV A,R2 MOV DPTR,#CODE_P0 MOVC A,A+DPTR MOV P0,A INC R2 SETB RS0 ;切换组

18、CALL D_1S CLR RS0 DJNZ R7,LOOP JMP START D_1S:(子程序)D10ms:(子程序) CODE_P0:DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H, DB 0C6H,0A1H,86H,8EH 第33页/共39页2021-12-535有时为方便走线而采用逆序连接,显示段码要进行调整:CODE_P2:DB 03H,9FH,25H,0DH,99H,49H,40H,1FH DB 01H,09H,11H,0C1H,63H,85H,61H,71HCODE_P0:DB 0C0H,0F9H,0A4

温馨提示

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

评论

0/150

提交评论