单片机汇编.ppt

上传人:sccc 文档编号:5815559 上传时间:2023-08-23 格式:PPT 页数:15 大小:323.01KB
返回 下载 相关 举报
单片机汇编.ppt_第1页
第1页 / 共15页
单片机汇编.ppt_第2页
第2页 / 共15页
单片机汇编.ppt_第3页
第3页 / 共15页
单片机汇编.ppt_第4页
第4页 / 共15页
单片机汇编.ppt_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《单片机汇编.ppt》由会员分享,可在线阅读,更多相关《单片机汇编.ppt(15页珍藏版)》请在三一办公上搜索。

1、2.3 汇编语言程序设计,汇编语言程序设计,主要内容,1.汇编语言格式及构成2.汇编源程序设计步骤及汇编3.顺序程序设计4.分支程序设计5.循环和查表程序设计6.子程序设计,2.3.1 汇编语言格式,标号段:操作码段 操作数段;注释段如:LP1:MOV R2,#10;设置循环次数标号段:指明所在指令操作码字节所在的内存地址。标号由大写英文字母开头的字母和数字串组成,长度为18个字符。标号段可省略。,2.3.2 汇编语言构成,1.指令性语句(助记符语句)2.指示性语句(伪指令)a.ORG(起始汇编)伪指令 例:ORG 2000H;指定程序存储地址从2000H开始 b.END(结束汇编)伪指令 例

2、:END c.EQU(赋值)伪指令 字符名称 EQU 数据或汇编符;将右边的数据或汇编符赋给左边的字符名称,汇编语言格式及构成,例如:AA EQU R1;AA当作寄存器R1使用 A10 EQU 10H;A10=10H DELAY EQU 07E6H;DELAY=07E6H MOV R0,A10 MOV A,AA LCALL DELAY,d.DATA(数据地址赋值)伪指令 字符名称 DATA 表达式;将右边表达式(8位)赋左边,;只能是数据或地址等DATA型 字符名称 XDATA 表达式;16位 例:AA DATA 35H DELAY XDATA 0A7E6H,e.DB(字节定义)伪指令 标号:

3、DB 项或项表 例:TAB:DB 45H,73,A;将45H、73、A依次存放;入TAB地址开始的存储单元,汇编语言格式及构成,f.DW(字定义)伪指令 标号:DW 项或项表例:ORG 1000H HETAB:DW 1234H,8AH,10;(1000H)=12H,(1001H)=34H;(1002H)=8AH,(1003H)=00H,(1004H)=0AH,(1005H)=00H,g.DS(存储空间定义)伪指令 标号:DS 项或项表例:SPC:DS 08H;从SPC地址开始,预留8个存储单元 DB 25H;(SPC+8)=25H,h.BIT(位地址赋值)伪指令 字符名称 BIT 位地址例:A

4、1 BIT 00H A2 BIT P1.0 MOV C,A1;将位地址00H的值送Cy,汇编语言格式及构成,返回,2.3.3 汇编源程序设计步骤及汇编,源程序设计步骤:1)拟定设计任务书,设计任务书包括:程序功能、技术指标、精度等级、实施方案、工程进度、所需设备、研制费用、人员分工2)建立数学模型3)确立算法4)绘制程序流程图5)编制汇编语言源程序6)上机调试汇编语言源程序的汇编人工汇编机器汇编,汇编语言格式及构成,返回,2.3.4 顺序程序设计,例题1:求一个16位二进制负数的补码。设此16位二进制数存于NUM、NUM+1单元,解:补码=反码+1ORG 1000HNUM DATA 20HMO

5、V R0,#NUMMOV A,R0 CPL AADD A,#01HMOV R0,AINC R0 MOV A,R0 CPL AADDC A,#00HMOV R0,ASJMP$END,顺序程序设计,返回,课7,2.3.5 分支程序设计,分支程序设计,例题2:已知VAR单元内有一自变量X,按如下条件编出求函数值Y并将它存入FUNC单元的程序若X0,则Y=1;若X=0,则Y=0;若X0,则Y=-1。,ORG 1000HVAR DATA 30HFUNC DATA 31HMOV A,VARJZ DONE;若VAR=0,则转DONEJNB ACC.7,POS;若VAR0,则转POSMOV A,#0FFH;若

6、VAR0,-1给ASJMP DONE,POS:MOV A,#01HDONE:MOV FUNC,A SJMP$END,返回,2.3.6 循环和查表程序设计,循环和查表程序设计,例题3:已知内部RAM ADDR为始址的无符号数数据块的块长存储于LEN单元内,请编程找出数据块中的最大数并存入MAX单元,解:ORG 1000H LEN DATA 31H MAX DATA 32H MOV R0,#ADDR;R0指向数据块,初始化为数据块首地址 MOV MAX,#00H;MAX单元初始化,清零LOOP:MOV A,R0;开始循环体,将一个数取到A CJNE A,MAX,BRCH;比较该数与MAX的大小BR

7、CH:JC NEXT;若该数小,则进行下一次循环 XCH A,MAX;若该数大,则与MAX交换NEXT:INC R0;为下一次循环做准备 DJNZ LEN,LOOP;判断循环次数 SJMP$END,返回,例题4:R0的低四位对应一个16进制数码,编写程序,将该数码对应字符的ASCII编码送入R1。(例如:若R0的低4位为1110B,对应16进制数码E,则将字符E的ASCII码送入R1),解:ORG 1000H MOV A,R0 ANL A,#0FH ADD A,#03H MOVC A,A+PC;查表指令 MOV R1,A;指令长度为一个字节 SJMP$;指令长度为两个字节ASCTAB:DB 0

8、,1,2,3,4;制表 DB 5,6,7,8,9 DB A,B,C,D,E,F END,循环和查表程序设计,2.3.7 子程序设计,子程序可自动保护断点(即主程序中下一条指令的地址),但不会自动保护现场(即运行子程序前的寄存器状态),若要保护现场,则在子程序的开始部分用压入堆栈命令保护现场,在结束部分用弹出堆栈命令恢复现场 可利用寄存器、存储单元或堆栈进行子程序的入口参数和出口参数传递,例题5:设MDA和MDB内有两数a和b,请编出求c=a2+b2并把c送入MDC的程序,设a和b皆为小于10的整数,子程序设计,ORG 1000H MDA DATA 20H MDB DATA 21 MDC DAT

9、A 22H MOV A,MDA;入口参数传递 ACALL SQR;调用子程序 MOV R1,A MOV A,MDB ACALL SQR ADD A,R1 MOV MDC,A SJMP$SQR:ADD A,#01;子程序 MOVC A,A+PC RET;RET为一个字节SQRTAB:DB 0,1,4,9,16;平方表 DB 25,36,49,64,81 END,子程序设计,练习1:外部RAM从2000H到2100H有一数据块,请编出将它们传送到3000H到3100H区域的程序。练习2:某系有200名学生参加外语统考,若成绩存放在8031外部RAM始址为ENGLISH的连续存储单元,现决定给成绩在

10、95分100分之间的学生颁发A级合格证书,给成绩在90分94分之间的学生颁发B级合格证书。试编一程序,可以统计A级和B级证书的学生人数,并把统计结果分别存入内部RAM的GRADA和GRADB单元。练习3(思考):已知:在内部RAM中,共有两组无符号四字节被加数和加数分别存放在FIRST和SECOND为始址的区域(低字节在前,高字节在后),请编程求和(设和也为四字节),并把和存于SUM开始的区域。练习4:已知MDA和MDB内分别存有两个小于5的整数,请用查表子程序实现C=a2+2ab+b2,并把和存于MDC单元练习5:设晶振频率为6MHz,试编写一能延时20ms的子程序。,汇编语言程序设计,练习

11、6(思考):已知内部RAM单元MA和MB中分别有两个有符号数,请编一减法子程序,并把差存入RESULT和RESULT+1中问题:有符号数的减法,如(-98)-98因为98D=62H=0110 0010B-98D=1001 1110则 1001 1110B-0110 0010B=0011 1100B=3CH=3*16+12=60,结果不对算法:将带符号数进行两字节扩展,则高字节的各个位都与符号位相同-98=1111 1111 1001 1110B 98=0000 0000 0110 0010B(-98)-98=1111 1111 0011 1100B 为负数,转换为10进制数:减1取反得0000 0000 1100 0100B=00C4H=196 即结果为-196,与笔算结果一致。练习7(思考):设8031单片机外部RAM从1000H单元开始存放100个无符号8位二进制数。要求编一子程序能把它们从大到小依次存入片内RAM从10H开始的存储区。问题:需考虑排序的算法,汇编语言程序设计,本章小结,掌握顺序程序、分支程序、循环和查表程序、子程序的设计,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号