片机教案汇编语言程序设计.ppt
《片机教案汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《片机教案汇编语言程序设计.ppt(82页珍藏版)》请在三一办公上搜索。
1、,计算机硬件技术基础,专题五 汇编语言程序设计,第四章,主讲教师赵晓安,计算机科学与软件学院计算机基础教学部,本章重点,教学目标:本章内容是软件编程的关键,地位重要。程序结构(顺序、分支、循环、子程序);应用实例;熟练掌握程序设计的思路方法和技巧;要求掌握典型算法;找到分析问题和解决问题的着眼点;学会抓住不同问题的规律性;举一反三,独立思考,有创意,有新意,独到。,一、分清可执行指令和非执行指令及其功能二、将高级语言程序设计方法迁移到汇编语言程序设计中来三、特别注意汇编语言是面向机器的,要记住 CPU的资源;存储器结构与寻址方式;I/O口、定时/计数器、中断系统等关键的参数;寄存器间接寻址中指
2、针的选择和使用技巧。四、从宏观上看,MCS-51汇编语言程序的整体结构 从微观上看,微机中各组成部分是如何通过程序联系起来。,汇编语言程序设计的要点:,41 汇编语言程序设计基础42 MCS-51 单片机汇编语言程序设计,第四章 汇编语言程序设计,411 汇编语言与机器语言412 汇编语言的格式413 伪指令414 汇编语言源程序的汇编415 汇编语言程序设计的一般步骤,41 汇编语言程序设计基础,421 简单程序设计422 分支程序设计 423 循环程序设计424 查表程序设计425 散转程序设426 子程序设计427 运算程序设计,42 MCS-51 单片机汇编语言程序设计,机器语言计算机
3、唯一能够识别和执行的语言,面向机器,二进制。汇编语言“符号语言”,用指令助记符代表机器语言指令,面向机器。要经过汇编。低级语言适合开发实时控制程序高级语言面向算法、过程、对象,类似自然语言,可移植性好,须经解释或翻译后才能被执行。,411 汇编语言与机器语言,412 汇编语言的格式,指令格式:,伪指令格式:名字 定义符 参数,参数;注释或标号:定义符 项表;注释,1 标号段 标号段位于语句的开头,指明标号所在指令的首地址,标号又称为标号地址或符号地址,是一个可选项,只有需要时才设置。绝对不允许把指令的保留字、寄存器号及伪指令字符作为语句的标号;标号在同一程序单位中只能出现一次。2、操作码段 操
4、作码段可以是可执行指令的助记符,操作码段用于指示计算机进行何种操作,因此,是任何一条语句中的必选项,汇编语言根据这一字段生成目标代码。操作码段也可以是伪指令的助记符,对汇编程序下命令,在汇编时起作用。,LOOP:MOV A,R0 DJNZ R2,LOOP,3、操作数段 操作数段用于存放指令的操作数或操作数地址,操作数的个数因指令的不同而不同,通常有三种情况:无操作数 RET 单操作数 JC LOOP 双操作数 MOV A,B 可以采用字母或数字等多种表示形式:(1)操作数是立即数,可用二进制、十进制和十六进制形式(2)作寄存器和特殊功能寄存器名 MOV A,PSW(3)标号地址 DJNZ R7
5、,NEXT(4)带加、减运算符的表达式,例:MOV A,#100-14、注释段:注释指令或程序的含义,便于阅读程序、维护程序。必须用“;”隔开,续行时,也必须以“;”开头。,常数:01010101B;12D,12;0F1H,59H67Q;A,a操作数:A,B,DPTR表达式mov A,#(12H-03H),414 汇编语言源程序的汇编,汇编可分成两种:人工汇编机器汇编 机器汇编是用机器自动把汇编语言源程序翻译成可以运行的目标代码程序,即二进制程序的过程,它是一种用机器来代替人脑的汇编,完成这一汇编过程的软件称为“汇编程序”。,汇编,机器语言目标程序,汇编语言源程序,汇编程序,汇编,机器语言目标
6、程序,汇编语言源程序,人工查指令机器码表,415 汇编语言程序设计的一般步骤,程序设计的方法程序设计的步骤,程序设计的方法,结构化设计模块化设计开发方法自底向上开发先底层开发自顶向下开发先顶层开发混合方法,底,顶,程序设计的步骤,分析课题,确定算法和思路根据算法和思路画出流程图根据流程图编写程序上机调试,排除错误,流程图图例,起止框处理框判断框连线,程序设计步骤流程图,413 伪指令,定义:仅向汇编程序发出的,并仅由汇编程序在汇编过程中识别和执行的一种汇编控制命令,它本身在目标程序中不产生机器码。汇编起始伪指令:ORG汇编结束伪指令:END定义字节伪指令:DB定义字伪指令:DW定义位伪指令:B
7、IT赋值伪指令:EQU DATA,汇编起始伪指令,格式:ORG 功能:指定汇编源程序编译成机器语言程序 的起始地址例如:ORG 0000H LJMP 0100H ORG 0100H Start:MOV A,#5AH SJMP$END,程序中可以有多条ORG语句,但定义的起始地址既不要交叉,也不要重叠。必须从小地址向大地址分配程序所占空间。,汇编结束伪指令,格式:END 起始地址功能:停止汇编示例:ORG 0000H ljmp 0100H ORG 0100H Start:mov A,#5Ah sjmp$END,定义字节伪指令,格式:DB 功能:把项或项表的数值存入从标号开始的连续单元,其中项或项
8、表可以是一个字节、数或以引号括起来的字符串。ORG 1000HDat:DB 11h,-1,A,BCD END,该指令只能为程序存储器赋初值,不能为其他存储器赋初值,尤其不能为内部数据存储器赋初值。,注意:,1000H,11H,FFH,41H,42H,程序存储器,43H,44H,补码,ASCII码,定义字伪指令,格式:DW 功能:把项或项表的数值存入从标号开始的连续单元,其中项或项表是一个字(两字节)。ORG 1000HDat:DW 1122h,3344h,-1 END,1000H,11H,22H,33H,44H,程序存储器,只对程序存储器起作用,FFH,FFH,定义位伪指令,格式:BIT 功能
9、:定义位变量地址U BIT 20H.0V BIT 20H.1W BIT 20H.2X BIT P1.0Y BIT P2.4Z BIT P3.2Q BIT TCON.2,赋值伪指令,格式:EQU 功能:定义符号变量值 X EQU 05H Y EQU 06H NEXT EQU 2000H 格式:DATA 功能:定义符号变量值(内部RAM)ONE DATA 30H(数据或地址)TWO DATA ONE+1,421 简单程序设计,特点:从第一条指令开始依次执行每一条指令,直到程序执行完毕,中间没有转移指令,没有分支。只有一个入口一个出口。,入口,出口,1、例43 两位压缩的BCD码转换成相应的ASCI
10、I码算法1 ANL 拆字、ORL#30H拼字算法2 DIV 拆字、ORL#30H 拼字存储 两位BCD数指压缩的BCD码占一个单元 相应的ASCII码占二个单元,2、例44 将8位无符号二进制数转换成三位BCD码 算法1 DIV 100 得百位,再DIV 10 的十位和个位 算法2 DIV 10 的个位,再DIV 10 的十位和百位 存储 8位无符号二进制数占一个单元 个位、十位和百位各占一个单元,422 分支程序设计,用条件转移语句实现二分支用cjne实现三分支例4-6 多分支用 jmp A+DPTR 实现多分支,根据不同的条件,执行不同的程序段。JZ、JNZ、JC、JNC、JB、JNB、C
11、JNE、DJNZ正确合理地运用,用条件转移语句实现二分支,用cjne实现三分支,编程要点:cjne=等于不等于则:jc 大于 如何实现?,ORG 0000H Cjne R3,#15,NEQ sjmp L1;=15NEQ:jnC L1;15 sjmp L2;15 L1:nop;15 L2:,y=,(R0)x,(R1)y,2、判正负,CJNE R0,#0,NZERO,CLR CMOV A,R0SUBB A,#0JZ ZERO,MOV A,R0 JZ ZERO,其它方法?,分析:,1、判零,MOV A,R0JNB ACC.7,positive,CJNE R0,#7FH,DO1 SJMP positi
12、veDO1:JC positive;negativePositive:.0FFH80H negative 00H7FH positive,用cjne实现三分支,cjne R0,#0,MP1 mov R1,#0 sjmp MP3MP1:mov A,R0 jnb ACC.7,MP2 mov R1,#0FFh sjmp MP3MP2:mov R1,#01hMP3:sjmp$end,y=,(R0)x,(R1)y,判正负,判零,分支间隔离,ORG 1000H ONE DATA 30H TWO DATA 31H MAX DATA 32H CLR C MOV A,ONE SUBB A,TWO JZ XMAX
13、 JB ACC7,NEG JB OV,YMAX SJMP XMAX NEG:JB OV,XMAXYMAX:MOV A,TWO SJMP RMAX XMAX:MOV A,ONERMAX:MOV MAX,ASJMP$END,例46 ONE和TWO单元中的两个带符号数比较大小,将较大者存入MAX单元中。两数相等则任一个存入MAX即可。,若XY为负,则OV=0,XY,若XY为正,则OV=0,XY OV=1,XY,用 jmp A+DPTR 实现多分支,KeyB5:mov DPTR,#JMPTBL clr C subb A,#0Ah rl A JMP A+DPTRJMPTBL:ajmp AAA ajmp
14、BBB ajmp CCC ajmp DDDAAA:BBB:,键入 10,转AAA 11,转BBB 12,转CCC 13,转DDD,CCC:DDD:,(A)=?,语句组1,语句组2,语句组3,语句组4,0AH,0BH,0CH,0DH,入口,AAA,BBB,CCC,DDD,423 循环程序设计,循环程序结构循环程序通常有两种编制方法循环问题的类型循环程序设计举例,循环程序结构,循环初始化:循环控制变量的初始化、数据变量的初始化循环工作部分:循环主体,重复执行的部分循环控制部分:循环变量的修改、终止控制循环结束:这部分程序用于存放执行循环程序所得结果以及恢复各单元的初值。,1、先循环处理后循环控制,
15、称为直到型循环;,2、先循环控制后循环处理,称为当型循环。,循环程序通常有两种编制方法,1、计数型 举例 循环次数已知,用计数方法控制循环的终止。2、条件型 循环次数未知,根据某种条件判断是否终止循环。例47 内部RAM块传,遇到“#”字符结束 3、计数型+条件型 例48 8031外部RAM块传及冒泡排序 重点,循环问题的类型,单循环程序例1:多个单字节数求累加和 计数型例2:内部数据区清零 计数型例47 内部RAM块传 改为条件型没讲多重循环程序例3:50ms延时程序 计数型例47 内部RAM块传 计数型+条件型没讲例48 外部RAM块冒泡排序 重点 计数型+条件型没讲,循环程序设计举例,例
16、1:多个单字节数求累加和,ORG 0000HSUM:mov R3,#0 mov R4,#0 mov R0,#50H mov R2,#5Loop: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 0000HZero:mov R0,#30H mov R7,#10 mov A,#00HLoop:mov R0,A inc R0 djnz R7,Loop sjmp$END,内部RAM,30H,R0,0,0,0,0,0,0,10个,例3:50ms
17、延时程序,Delay:mov R7,#200Del1:mov R6,#123 nopDel2:djnz R6,Del2 djnz R7,Del1 sjmp$;(不计入),;1us;1us;1us;2us;2us,T=200(1+1+1232+2)+11us=50001us=50ms,例47把内部RAM中起始地址为BLK1的数据块传送到外部RAM以BLK2为 起始地址的区域,直到遇到“#”字符的ASC码为止。去掉块长度。参考程序如下:ORG2000HBLK1EQU30HBLK2EQU1000H MOV SP,#6FH MOVR0,#BLK1;BLK1数据块起始地址MOVDPTR,#BLK2;BL
18、K2数据块起始地址XH:CLRCMOVA,R0;取数据PUSHACCSUBBA,#23H;判是否为“#”字符JZSTOPPOPACCMOVXDPTR,A;数据传送INCR0INCDPTRAJMP XH;循环控制 STOP:SJMP$END,原题为计数型+条件型,改为条件型,例47把内部RAM中起始地址为BLK1的数据块传送到外部RAM以BLK2为 起始地址的区域,直到遇到“#”字符的ASC码为止。块长度在R1中。参考程序如下:ORG2000HBLK1EQU30HBLK2EQU1000H N EQU 100 MOV SP,#6FH MOVR0,#BLK1;BLK1数据块起始地址MOVDPTR,#
19、BLK2;BLK2数据块起始地址 MOV R1,#N;块长度 INCR1SJMPCHECK;防止数据块的长度为零 XH:CLRCMOVA,R0;取数据PUSHACCSUBBA,#23H;判是否为“#”字符JZSTOPPOPACCMOVXDPTR,A;数据传送INCR0INCDPTR CHECK:DJNZ R1,XH;循环控制 计数 STOP:SJMP$END,计数型+条件型,条件,改错,例48 设单片机8031外部RAM从3600H单元开始存放有100个无符号数,试编写程序能使它们按从小到大的顺序排列。(最小的数放在3600H单元)解:排序程序采用“冒气泡”的方法,其“冒气泡”的过程如下:(设
20、N=5时),85429,5428,425,24,第一轮比较4次,第二轮比较3次,第三轮比较2次,第四轮比较1次,98542,89542,85942,85492,8542,5842,5482,542,42,452,对 n 个数,则要进行n-1轮扫描,在第 i 轮扫描中要进行 n-i 次比较。,可以推知:,若将原始数据改为 9 8 2 4 5,则排序过程如下:,82459,2458,245,24,第一轮比较4次,第二轮比较3次,第三轮比较2次,第四轮比较1次,98245,89245,82945,82495,8245,2845,2485,245,24,245,可以看出:,第三轮排序中没有发生交换,即
21、第三轮结束后,已经排好了,应结束排序,不必再排第四轮。为此增加一个“排好序标志位”,预先将它清0,当产生交换时,将它置1,表示没排好,可以进行下一轮排序,否则,结束排序。,36H 00H 01H 02H 03H 04H 05H 06H,P2,R0,R1,movx A,R0mov 30h,Amovx A,R1movx R0,Axch A,30Hmovx R1,A,交换,用一个指针?用一个R0?用一个DPTR?,A,30H,冒泡法排序,ORG 0000h mov PSW,#00h mov P2,#36h mov R2,#100-1Loop0:mov R0,#00h mov R1,#01h mov
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教案 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-6426507.html