资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
微机原理及应用,MCS-51单片机,第四章 汇编语言程序设计,程序设计语言简介 程序设计的步骤和方法 汇编语言程序设计 分支程序 用cjne实现三分支 用 jmp A+DPTR 实现多分支 循环程序 子程序及其调用 程序设计举例,机器语言 计算机唯一能够识别和执行的语言 汇编语言 “符号语言”,用指令助记符代表机器语言指令 高级语言 面向算法、过程、对象,类似自然语言,可移植性好,须经解释或翻译后才能被执行,程序设计语言简介,汇编,机器语言目标程序,汇编语言源程序,程序设计的步骤,分析课题,确定算法和思路 根据算法和思路画出流程图 根据流程图编写程序 上机调试,排除错误,流程图图例,起止框 处理框 判断框 连线,程序设计的方法,结构化设计 模块化设计 开发方法 自底向上开发 先底层开发 自顶向下开发 先顶层开发 混合方法,常用伪指令,定义:仅向汇编程序发出的,并仅由汇编程序在汇编程序中识别和执行的一种汇编控制命令,它本身在目标程序中不产生机器码。 汇编起始伪指令:ORG 汇编结束伪指令:END 定义字节伪指令:DB 定义字伪指令: DW 定义位伪指令: BIT 赋值伪指令: EQU,汇编起始伪指令,格式: ORG 功能:指定汇编源程序编译成机器语言程序 的起始地址 例如: ORG 0000H ljmp 0100H ORG 0100H Start: mov A,#5Ah sjmp $ END,汇编结束伪指令,格式: END 起始地址 功能:停止汇编 示例:ORG 0000H ljmp 0100H ORG 0100H Start: mov A,#5Ah sjmp $ END mov A,#0A5h,定义字节伪指令,格式: DB 功能:把项或项表的数值存入从标号开始的连续单元,其中项或项表可以是一个字节、数或以引号括起来的字符串。 ORG 1000H Dat: DB 11h,22h,A,”BCD” END,定义字伪指令,格式: DW 功能:把项或项表的数值存入从标号开始的连续单元,其中项或项表是一个字(两字节)。 ORG 1000H Dat: DW 1122h,3344h END,定义位伪指令,格式: BIT 功能:定义位变量地址 U BIT 20H.0 V BIT 20H.1 W BIT 20H.2 X BIT 20H.3 Y BIT 20H.4 Z BIT 20H.5 Q BIT 20H.6,赋值伪指令,格式: EQU 功能:定义符号变量值 X EQU 05H Y EQU 06H,汇编语言格式,指令格式: 标号:助记符 参数,参数;注释 伪指令格式: 名字 定义符 参数,参数;注释,参数类型,常数: 01010101B;12D,12;0F1H,59H 67Q;A,a 操作数: A,B,DPTR 表达式 mov A,#(12H-03H),用cjne实现三分支,cjne R0,#0,MP1 mov R1,#0 sjmp MP3 MP1:mov A,R0 jnb ACC.7,MP2 mov R1,#0FFh sjmp MP3 MP2:mov R1,#01h MP3:sjmp $,y=,R0 x,R1y,用 jmp A+DPTR 实现多分支,KeyB5: mov DPTR,#JMPTBL clr C subb A,#0Ah rl A JMP A+DPTR JMPTBL:ajmp AAA ajmp BBB ajmp CCC ajmp DDD,循环程序,循环程序结构 单循环程序 例1:多字节求和 例2:内部数据区清零 多重循环程序 例3:50ms延时程序,循环程序结构,循环初始化:循环控制变量的初始化、 数据变量的初始化 循环工作部分:循环主体,重复执行的计算 循环控制部分:循环变量的修改、终止控制,例1:多字节求和,ORG 0000H SUM:mov R3,#0 mov R4,#0 mov R0,#50H mov R2,#5 Loop:mov A,R4 add A,R0 mov R4,A inc R0 clr A addc A,R3,mov R3,A djnz R2,Loop sjmp $ END,例2:内部数据区清零,ORG 0000H Zero:mov R0,#30H mov R7,#10 mov A,#00H Loop:mov R0,A inc R0 djnz R7,Loop sjmp $ END,例3:50ms延时程序,Delay:mov R7,#200 Del1: mov R6,#123 nop Del2: djnz R6,Del2 djnz R7,Del1 sjmp $,;1us ;1us ;1us ;2us ;2us,子程序及其调用,子程序调用与返回指令 子程序设计方法 子程序的调用过程与子程序嵌套 调用过程中的参数传递 通过寄存器传递 通过堆栈传递 通过数据指针(DPTR)传递,子程序调用与返回指令,绝对调用指令 acall addr11;(PC) (PC)+2 ,(SP) (SP)+1 (SP) (PC07) ,(SP) (SP)+1,(SP) (PC815) ,(PC010) addr11 ,(PC1115) 不变 lcall addr16 返回指令 ret; (PC815)(SP),(SP) (SP)-1 (PC07)(SP),(SP) (SP)-1 举例:,子程序调用与返回指令举例,ORG 0000H Start: mov A,#0 acall Sub1 mov A,#0 lcall Sub2 sjmp,Sub1:inc A ret Sub2:dec A ret END,子程序设计方法,格式: ;子程序名 ;子程序功能: ;入口参数: ;出口参数: ;占用资源: 子程序名:. . .,子程序的调用过程与子程序嵌套,主程序要使用子程序时通过call 指令 子程序执行完后通过ret 指令返回 防止自然进入子程序和自然退出子程序 子程序嵌套,通过寄存器传递,方法简单、参数有限 例: ORG 0000H Main:mov R0,#40h mov R7,#10H lcall Zero sjmp $,;子程序名:Zero ;功能:对内部数据区清零 ;入口参数:R0内部数据区 ; R7内部数据区长度 ;出口参数:无 ;占用资源:A,R0,R7 Zero:clr A Loop:mov R0,A inc R0 djnz,R7,Loop ret,通过堆栈传递,ORG 0000H Main:mov 70H,#40h mov 71H,#10H push 70h push 71h lcall Zero sjmp $,;子程序名:Zero ;功能:对内部数据区清零 ;入口参数:70内部数据区地址 ; 71h内部数据区长度 ;出口参数:无 ;占用资源:A,R0,R7,70h,71h Zero:pop DPH pop DPL pop 07h;R7 pop 00h;R0 clr A Loop:mov R0,A inc R0 djnz,R7,Loop push DPL push DPH ret,通过数据指针(DPTR)传递,将待传递参数紧跟在调用指令之后 ORG 0000H Main:nop acall Print DB: ”THIS IS AN EXAMPLE” DB:0AH,0DH,00H Next: nop sjmp $ END,Print:pop DPH pop DPL PPP1:mov A,#00h movc A,A+DPTR inc DPTR jz PPPEnd PPP2:mov P1,A sjmp PPP1 PPPEnd:jmp A+DPTR,程序设计举例,算术运算程序 多字节加法 多字节BCD码减法 逻辑运算程序 ASCII码二进制 排序程序 冒泡法排序 查表程序 以PC为指针 以DPTR为指针 散转程序 转移指令表 地址偏移量表 转向地址表,多字节加法,2F 5B A7 C3 H (43 42 41 40) H + 14 DF 35 B8 H (53 52 51 50) H ORG 0000H Jia: mov R0,#40h mov R1,#50h mov R2,#4 clr C Jia1:mov A,R1 addc A,R0 mov R0,A inc R0,inc R1 djnz R2,Jia1 mov F0,C sjmp $ END,多字节BCD码减法,99 88 77 66 H (43 42 41 40) H - 44 55 66 77 H (53 52 51 50) H ORG 0000H Jia: mov R0,#40h mov R1,#50h mov R2,#4 clr C Jia1:mov A,#9Ah subb A,R1 add A,R0 da A mov R0,A,cpl C inc R0 inc R1 djnz R2,Jia1 mov F0,C sjmp $ END,数据的拼装,x7x6x5x4x3x2x1x0 (20H) y7y6y5y4y3y2y1y0 (21H) y2y0y0 x4x3x2x1x0 (30H) ORG 0000H Start: mov 30h,20h anl 30h,#00011111b mov A,21h swap A rl A anl A,#11100000b orl 30h,A sjmp $ END,ASCII码二进制,ORG 0000H AtoH: mov A,#A clr C subb A,#30h cjne A,#0Ah,NEQ sjmp BIG NEQ: jc AEND BIG: subb A,#07h AEND:sjmp $ END,ORG 0000H HtoA: mov A,#0Bh add A,#90h da A addc A,#40h da A sjmp $ END,冒泡法排序,ORG 0000h mov PSW,#00h mov P2,#36h mov R2,#100-1 Loop0:mov R0,#00h mov R1,#01h mov 03h,R2 clr 7Fh Loop1:movx A,R0 mov 30h,A movx A,R1,cjne A,30h,Loop2 sjmp L1 Loop2:jc L1 movx R0,A xch A,30h movx R1,A setb 7Fh L1:inc R0 inc R1 djnz R3,Loop1 jnb 7Fh,Loop3 djnz R2,Loop0 Loop3:sjmp $ END,以PC为指针查表程序,TB1: mov A,R2 add A,R2 mov R3,A add A,#06H movc A,A+PC xch A,R3 add A,#03H movc A,A+PC mov R4,A sjmp $,TAB1:DW 1520,3721,4264 DW7850,3483,32657 DW 883,9943,1000 DW 4051,6785
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号