[所有分类]第4章 汇编语言程序设计

上传人:油条 文档编号:55006362 上传时间:2018-09-23 格式:PPT 页数:30 大小:359KB
返回 下载 相关 举报
[所有分类]第4章  汇编语言程序设计_第1页
第1页 / 共30页
[所有分类]第4章  汇编语言程序设计_第2页
第2页 / 共30页
[所有分类]第4章  汇编语言程序设计_第3页
第3页 / 共30页
[所有分类]第4章  汇编语言程序设计_第4页
第4页 / 共30页
[所有分类]第4章  汇编语言程序设计_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《[所有分类]第4章 汇编语言程序设计》由会员分享,可在线阅读,更多相关《[所有分类]第4章 汇编语言程序设计(30页珍藏版)》请在金锄头文库上搜索。

1、08:41,第4章 汇编语言程序设计及知识,4.1 编程的步骤、方法和技巧 4.2 汇编语言源程序的编辑和汇编,08:41,4.1 编程的步骤、方法和技巧,4.1.1 编程的步骤 4.1.2 编程的方法和技巧 4.1.3 汇编语言程序的基本结构,08:41,编程的步骤,一、分析问题 二、确定算法 三、画程序流程图 四、编写程序,08:41,用8051汇编语言编写的源程序行(一条语句)包括四个部分,也叫四个字段: 标号:操作码操作数;注释每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:空格“ ”、冒号“:”、逗号“,”、分号“;”等。,08:41,标号,标号是用户

2、定义的符号地址。 一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。 标号由以英文字母开始的18个字母或数字组成,以冒号“:”结尾。 标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存放该指令目标码第一字节的存储单元的地址赋给该标号,所以,标号又叫指令标号。,08:41,操作数,汇编语言指令可能要求或不要求操作数,所以这一字段可能有也可能没有。 若有两个操作数,操作数之间用逗号“,”分开。 操作数包括:工作寄存器、特殊功能寄存器、标号名、常数、$、表达式,08:41,汇编语言程序的基本结构,一、顺序结构 二、分支结构 三、循环结构,08:41,一、顺序结构,顺序程序是最

3、简单的程序结构,即顺序结构。 程序按顺序一条一条地执行指令。,08:41,顺序结构举例,例1 双字节乘法子程序。(R4) (R3)(R2)=(R4) 28+ (R3) (R2) =(R4) (R2) 28+ (R3) (R2),MOV A,R2;乘数 MOV B,R3;被乘数 MUL AB; (R3) (R2) MOV R5,A;乘积的低八位 MOV R6,B;乘积的高八位 MOV A,R2 MOV A,R4 MUL AB; (R4) (R2),ADD A,R6 MOV R6 ,A MOV A,B ADDC A,#00H MOV R7,A;乘积的高位 RET,08:41,顺序结构举例,例2 将

4、片内RAM 21H和20H单元中的3位压缩存放的8421BCD码转换成二进制数,其结果存放于21H和20H中。 转换方法:二进制数=(百位) 64H+ (十位) 0AH+ (个位),08:41,ORG 0100HMOV SP,#60H START:PUSH 20HPUSH 20H;保护十位和个位MOV A,21H;百位AANL A,#0FHMOV B,#64HMUL ABMOV 21H,B;高八位MOV 20H,A;低八位POP ACC;恢复十、个位ANL A,#0F0H;取十位SWAP AMOV B,#0A0HMUL ABADD A,20H;低8位加低8位,MOV 20H,A;保存低8位MO

5、V A,B;高8位AADDC A,21H;高8位加高8位MOV 21H,A;保存高8位POP ACCANL A,#0F0H;取个位ADD A,20H;低8位加个位MOV 20H,A;保存低8位MOV A,21H;高8位AADDC A,#00H;高8位带进位加MOV 21H,A;保存高8位SJMP $,08:41,二、分支结构,程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断、满足条件则进行程序转移,不满足条件就顺序执行程序。 分支程序又分为单分支和多分支结构。 在8051指令系统中,通过条件判断实现单分支程序转移的指令有:JZ、JNZ、CJNE、DJNZ等。此外还有以位状态作为

6、条件进行程序分支的指令,如JC、JNC、JB、JNB、JBC等。,08:41,单分支结构流程,08:41,多分支结构流程,08:41,散转指令,转向0分支,转向1分支,转向n-1分支,转向n分支,K=0,K=1,K=n-1,K=n,多分支结构流程,08:41,例:片内RAM ONE和TWO两个单元中存有两个无符号数,将两个数中的小者存入RES单元。,分支结构程序举例,ORG 1000HONE DATA 22H ; 定义ONETWO DATA 23H ;定义TWORES DATA 30H ;定义RESMOV A,ONE START:CJNE A,TWO,BIG;ATWO,CY=1,否则CY=0S

7、JMP STORE BIG: JC STOREMOV A,TWO STORE:MOV RES,ASJMP $,08:41,例、设变量x存放于R2,函数值y存放于R3。求下列分段函数的值:,分支结构程序举例,08:41,08:41,例: 128种分支转移程序。 功能:根据入口条件转移到128个目的地址。 入口:(R3)=转移目的地址的序号00H7FH。 出口:转移到相应子程序入口。,说明:此程序要求128个转移目的地址(ROUT00 ROUT7FH)必须驻留在与绝对转移指令AJMP相同的一个2KB存储区内。,分支结构程序举例,08:41,循环结构,先处理 后判断,先判断 后处理,08:41,循环

8、结构,例:片内RAM的BLOCK单元开始有一个无符号数据块,其长度存于LEN单元中,试求其最大值。,START: LEN DATA 20HMAX DATA 21HBLOCK DATA 22HCLR AMOV R2,LEN;数据长度MOV R1,#BLOCK;地址指针 LOOP : CLR CSUBB A,R1JNC NEXTMOV A,R1SJMP NEXT1,NEXT: ADD A,R1 NEXT1: INC R1DJNZ R2,LOOPMOV MAX,A,08:41,循环结构,例:在内部RAM的20H2FH连续16个单元中存放单字节无符号数。求16个无符号数之和,并将其和存放在31H、30

9、H中。用R0作加数指针,R7作循环次数计数器。,08:41,08:41,例:软件延时 每条指令的指令周期是确定的,因此,当单片机的时钟确定后可以准确的计算出程序执行所需时间。 1、单重循环延时DELAY: MOV R2,# data;预置循环控制常数,1DELAY1:DJNZ R2,DELAY1;2个机器周期RET;2个机器周期,循环结构,08:41,循环结构,2、双重循环延时TIME:MOV R1,#0FAH;1L1: MOV R0,#0FFH;1W1: DJNZ R0,W1;2DJNZ R1,L1;2NOP;1NOP;1RET;2,08:41,例:设计一个软件延时子程序,延时时间为10ms

10、。设晶振频率为6MHz,一个机器周期为2us。,循环结构,08:41,作业:设单片机晶振频率6M,编写一段程序,大约延时1秒钟。,08:41,子程序的调用与返回,08:41,主程序与子程序参数传递方法,1、通过寄存器传递数据 通过寄存器R0R7或者累加器来传送。即在调用寄存器之前把数据送入寄存器或者累加器。调用以后就用这些寄存器或者累加器中的数据来进行操作。子程序执行后,结果仍由寄存器或累加器送回。 2、传递数据地址 数据存放在存储器中,参数传递时只通过R0、R1、DPTR传递数据所存放的地址 3、通过堆栈传递参数 在调用前先把要传送的参数压入堆栈,进入子程序后,再将压入堆栈的参数弹出到工作寄存器或其他内存单元。 4、通过位地址传送参数,08:41,子程序程序设计举例,例:用程序实现c=a2+b2。设a存放在21H单元,b存放在22H单元,结果c存放在20H单元。,ORG 1000H MAIN:MOV SP,#60H;修改堆栈指针MOV A,21H;取aLCALL SQR;求a2MOV 20H,A; a2送入20HMOV A,22H;取bLCALL SQR;求b2ADD A,20H;a2+b2MOV 20H,A,平方子程序ORG 2000H SQR:MOV B,AMUL ABRET,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号