




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3 3章章 MCS-51MCS-51单片机的指令系统单片机的指令系统 魏立峰魏立峰 沈阳化工大学沈阳化工大学3.4 汇编语言程序的基本形式 单片机编程语言单片机编程语言:汇编语言汇编语言+ +高级语言高级语言。汇编语言汇编语言 用英文字符来代替机器语言,这些英文字符被称为助记符汇编语言;助记符汇编语言; 汇编语言源程序:汇编语言源程序:用汇编语言编写的程序。 “汇编汇编”:汇编语言源程序需转换(翻译)成为二进制代码表示的机 器语言程序,才能识别和执行。 完成“翻译”的程序称为汇编程序。经汇编程序“汇编”得到的以“0”、 “1”代码形式表示的机器语言程序称为目标程序。优点:优点:用汇编语言编
2、写程序效率高,占用存储空间小,运行速度快, 能编写出最优化的程序,缺点:缺点:可读性差,是面向“硬件”的语言,通用性差。3.4 汇编语言程序的基本形式 单片机编程语言单片机编程语言:汇编语言汇编语言+ +高级语言高级语言。高级语言高级语言 C51已成为单片机的实用高级编程语言。 在对程序的空间和时间要求较高的场合,可使用C语言和汇编语言 混合编程。 在很多需要直接控制硬件且对实时性要求较高的场合,则更是非用 汇编语言不可。 掌握汇编语言并能进行程序设计,是学习和掌握单片机程序设计的 基本功之一。优点:优点:通用性强,直观、易懂、易学,可读性好。通用性强,直观、易懂、易学,可读性好。缺点:缺点:
3、程序占用程序占用空间空间和和时间时间相对较多。相对较多。3.4.1 汇编语言程序的伪指令 基本语句基本语句:指令语句指令语句+ +伪指令语句伪指令语句。伪指令伪指令 在汇编语言源程序中应有在汇编语言源程序中应有向汇编程序发出的指示信息向汇编程序发出的指示信息,告诉它如,告诉它如 何完成汇编工作,这是通过何完成汇编工作,这是通过伪指令伪指令来实现来实现。 伪指令不属于指令系统中的汇编语言指令,它伪指令不属于指令系统中的汇编语言指令,它是程序员发给汇编是程序员发给汇编 程序的命令程序的命令,也称为,也称为汇编程序控制命令。汇编程序控制命令。 只有在汇编前的源程序中才有伪指令。只有在汇编前的源程序中
4、才有伪指令。 “伪伪”体现在体现在汇编后,伪指汇编后,伪指 令令没有相应的机器代码产生。没有相应的机器代码产生。 伪指令具有控制汇编程序的输入伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇输出、定义数据和符号、条件汇 编、分配存储空间等功能编、分配存储空间等功能1. ORG(ORiGin)汇编起始地址命令 格式: ORG addr16 或 标号地址。 作用:说明下面紧接的程序段或数据段存放的起始地址。例如: ORG 1000H;规定标号START代表地址为1000H开始。START:MOV A,#00H 若省略ORG伪指令,则该程序段从ROM中0000H单元 开始存放。 在一个源程
5、序中,可以多次使用ORG伪指令,但地址值 由小到大依序排列,不允许空间重叠。3.4.1 汇编语言程序的伪指令2. END汇编结束3. EQU(EQUate)标号赋值命令3.4.1 汇编语言程序的伪指令 格式: END 作用:结束汇编。 汇编程序遇到END伪指令后即结束汇编。 处于END之后的程序,汇编程序软件将不处理。 格式:符号名 EQU 表达式 作用:将表达式的值或特定的某个汇编符号定义为一个指定的符号名。【例】 SG EQU R0 ;SG与R0等值 LEN EQU10H;DE与10H等值 MOV A, SG ;(A)(R0) MOV R7, #LEN ;(R7)10H4. DB (Def
6、ine Byte)定义数据字节3.4.1 汇编语言程序的伪指令 格式: 标号: DB 字节数据表 作用:从标号指定的地址单元开始,在ROM中存放8位 的数据字节。 将字节数据根据从左到右的顺序依次存放在指定的存储 单元中,一个数据占一个存储单元。 字节数据表可以是字符、十进制、十六进制、二进制等。 该伪指令常用于存放数据表格。4. DB (Define Byte)定义数据字节3.4.1 汇编语言程序的伪指令 例如: ORG 1000H SEG1: DB 53H,24 , “2” SEG2: DB DAY END 则 (1000H)=53H (1001H)=18H; 十进制数24 (1002H)
7、=32H;32H为“2”的ASCII码 (1003H)=44H;44H为“D”的ASCII码 (1004H)=41H;41H为“A”的ASCII码 (1005H)=59H;59H为“Y”的ASCII码如果操作数为数值,其取值范围应为00HFFH;若为字符串,其长度应限制在80个字符内。5. DW (Define Word )定义数据字3.4.1 汇编语言程序的伪指令 格式: 标号: DW 字数据表 作用:从标号指定的地址单元开始,在ROM中存放 16位的数据字。 16位的二进制数,高8位存放在低地址单元,低8位存 放在高地址单元。例如: ORG2000HDW1246H,7BH;汇编后(2000
8、H)=12H;第1个字(2001H)=46H(2002H)=00H;第2个字(2003H)=7BH6. BIT 位定义命令7. DATA数据地址赋值3.4.1 汇编语言程序的伪指令 格式:符号名 BIT 位地址表达式 作用:将位地址赋给指定的符号名。【例】 LEDBITP1.7FLAGBIT02H 汇编后,位地址P1.7、02H分别赋给变量LED和FLAG。 格式:符号名 DATA 表达式 作用:将表达式的值或特定的某个汇编符号定义为一个 指定的符号名。【例】 MAINDATA2000H 汇编后MAIN的值为2000H。汇编 手工汇编:通过查指令的机器代码表,逐个把助记符 指令“翻译”成机器代
9、码,再进行调试和运行。 机器汇编:用PC机上的软件(汇编程序)来代替手工汇编。 用编辑软件进行源程序编辑,然后生成一个ASCII码文件, 扩展名为 “.ASM”。在微机上运行汇编程序,译成机器码。 机器码通过串口(或并口)传送到用户样机或在线仿真器, 进行程序的调试和运行。 有时,在分析某些产品的程序的机器代码时,需将机器代 码翻译成汇编语言源程序,称为“反汇编”。3.4.2 汇编语言程序的编辑与汇编源程序由主程序、子程序、中断服务子程序组成主框架编制案例;程序变量定义区1 SDABITP1.3;定义SDA位变量 2 IOEQUP0;定义I/O等值P0口3 ByteConDATA30H ;定义
10、字节变量ByteCon;程序主体部分4 ORG0000H ;程序段从0000H单元开始存放 5 LJMPMAIN;跳到主程MAIN6 ORG0003H ;从0003H开始存放程序段LJMPINTERUPT0 ;跳到外部中断0处理子程序8 ORG0030H ;从0030H开始存放程序段9MAIN: ;主程序标号说明10 MOVSP,#60H ;设置堆栈指针3.4.3 汇编语言源程序的格式 11 LCALL INITIATE ;调用初始化子程12 FCY: ;控制程序循环标号LCALLSUB ;调用功能子程序13 LJMPFCY ;跳到FCY构成循环14 ORGxxxx ;以下功能程序的存放地址1
11、5 INITIATE: ;初始化子程序标号16 RET ;子程序返回17 SUB: ;功能子程序标号18 RET ;子程序返回19 INTERUPT0: ;外部中断0功能程序20 RETI ;中断返回21 TABLE: ;表的标号22 DB 00H,01H ;表的数据 END ;源程序结束,停止汇编。 3.4.3 汇编语言源程序的格式 3.5 汇编语言程序的基本结构 汇编语言源程序设计通常采用结构化设计方法,任何复杂的程序都可分解为:u顺序结构部分u分支结构部分u循环结构部分u子程序部分u程序书写格式:4个对齐 1标号,2助记符,3第一个操作数,4注释【功能】求变量X的平方。(单字节查单字节查
12、表子程序)【入口参数】X值存放在片内RAM的30H单元【出口参数】X2值存放在片内RAM的31H单元 程序框图如图3.10所示。 ORG 0100HSQU: MOV DPTR,# TABLE MOV A,30H MOVC A,A+DPTR MOV 31H,A RET ORG 2000HTABLE: DB 00,01,04,09,16,25 DB 36,49,64,81,100,121 END 3.5.1 顺序程序设计 3.5.2 分支程序设计 分支:根据某种标志改变程序执行的顺序。一般分为单分支、多分支。(a) 单分支(b)多分支多分支图图3.11 分支程序流程图分支程序流程图3.5.2 分支
13、程序设计 【功能】求单字节有符号数的二进制补码【入口参数】二进制数放在A中【出口参数】其补码放回到A中CMPT: JNB Acc.7,RETURN ;(A)0,不需转换 MOV C,Acc.7;符号位保存 CPL A;(A)求反,加1 ADD A,#1 MOV Acc.7,C;符号位存在A的最高位RETURN: RET 1单分支选择结构 :仅有两个出口,两者选一。一般根据运算结果的状态标志,用条件判跳指令来选择并转移。3.5.2 分支程序设计 2.散转多分支程序【功能】某菜单有10项。根据输入数码转去执行相应的子程序。即输 入“1”,执行子程序1;输入“2”,执行子程序2;依次类推。【入口参数
14、】 (R3)=存输入键盘码09【出口参数】转移到相应的子程序入口 ORG 0030HKEY_JMP:MOV DPTR, #TAB1;子程序入口首地址送DPTR MOV A, R3;把键盘输入缓冲区内容送累加器(A) MOV B, #03H MUL AB ;由于长跳转指令LJMP占用3B, ;各子程序入口地址相距3B 3.5.2 分支程序设计 2.散转多分支程序JMP A+DPTR ;根据输入码,执行相应的子程序TAB1:LJMP NO0LJMP NO1 LJMP NO2 LJMP NO3LJMP NO4LJMP NO5LJMP NO6LJMP NO7LJMP NO8LJMP NO9 END任意
15、任意0-n的散转的散转MOV R6, A ;乘积的低8位暂存R6MOV A,B;乘积的高8位送AADD A ,DPH ;乘积的高8位加到 DPH中MOV DPH, A MOV A, R6JMP A+DPTR3.5.3 循环程序设计 循环程序一般包含以下4部分。 (1) 设置循环初值:设置循环过程工作寄存器单元的初值。 (2) 循环体:循环程序功能部分。 (3) 循环记录:记录循环过程,为循环判断准备。 (4) 循环控制:判断循环完成情况,满足条件作相应的 处理。不满足继续执行。 n程序中含有可以反复执行的程序段n循环程序分为先循环后判断和先判断后循环两种循环体方式3.5.3 循环程序设计 图3
16、.12 循环程序流程图图3.12 循环程序流程图【功能】 n个单字节数相加,和为双字节,存放在(R3、R4)中。【入口参数】单字节数Xi放在从40H开始的RAM单元中,n放在R2中。【出口参数】和存放在(R3、R4)中。(R2为控制变量,R0为变址单元 )【分析】计算公式为 。公式要改写为用程序实现的数值解法:y (R3、R4) Xi (R0)nR2 3.5.3 循环程序设计 1niiyx SUM: MOV R3, #00H MOV R4, #00H MOV R2, #n MOV R0, #40H LOOP: MOV A, R4;取部分和低位 ADD A, R0;与Xi相加 MOV R4, A
17、 INC R0;地址加1 CLR A ADDC A, R3;低位字节向高位字节进位 MOV R3, A DJNZ R2, LOOP ;未加完继续重复 RET3.5.3 循环程序设计 【功能】设计一个延时10ms的程序。【入口参数】 (R0)=毫秒数,(R1)=1ms延时预定值。【出口参数】定时到,退出程序。【分析】延时主要与所用机器周期和延时程序中的循环次数有关。已知AT89C51单片机使用的晶振为12MHz,则可知1个机器周期为1s。ORG0100H 指令机器周期数DELAY: MOV R0 , #10 ;毫秒数R0 1DL2:MOV R1 , #250 ;1ms延时值R1 1DL1:NOP
18、 1NOP; (1+1+2)1250=1000 s 1DJNZ R1 , DL1 ;1ms延时循环 2DJNZ R0 , DL2 ;10ms延时循环 2RET ;精确延时时间计算式为: 2 ; (1+2) 1+(1+2)110+(1+1+2)125010=10.033ms3.5.3 循环程序设计 内循环外循环3.5.4 子程序设计 (1)子程序的入口地址,前必须有标号。(2)主程序调用子程序,是通过调用指令来实现。(3)子程序结构中必须用到堆栈,用来进行断点和现场的保护。(4)子程序返回主程序时,最后一条指令必须是RET或RETI指令。(5)主程序和子程序约定好交换数据的地址单元或存储 器,其
19、为主、子程序共有部分。(6)子程序可以嵌套,即子程序又可以调用另外的子程序。 n按功能分为中断子程序和功能子程序。3.5.4 子程序设计运算类子程序-1 【功能】多字节无符号数的加法。【入口参数】 DATA1=被加数的低位地址。 DATA2=加数的低位地址。N字节相加。【出口参数】 DATA2=和数低位地址。MADD: MOV R0,#DATA1;置被加数指针 MOV R1, #DATA2;置加数指针 MOV R7,#N;置字节数 CLR C;清进位位LOOP: MOV A,R0 ADDC A,R1 ;求和 MOV R1,A ;存结果 INC R0 ;修改指针 INC R1 DJNZ R7,L
20、OOP;循环判断 RET 3.5.4 子程序设计运算类子程序-2 【功能】多字节无符号数的减法。【入口参数】 DATA1=被减数的低位地址。 DATA2=减数的低位地址。N字节相减。【出口参数】 DATA2=差数低位地址。MADD: 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 3.5.4 子程序设计码型转换子程序-1 【功能】将1位十六进
21、制数转换成相应的ASCII码。【入口参数】 (R0)=1位十六进制数。【出口参数】 (R2)=转换后的ASCII码。【分析】转换方法为:小于10,加上30H,否则加上37H。HASC:MOV A,R0;取4位二进制数ANLA,#0FH;屏蔽掉高4位PUSH ACC;4位二进制数入栈CLR C ;清进(借)位标志位SUBB A,#0AHPOP ACC;弹出原4位二进制数JC LOOP;借位位为1,跳转至LOOPADD A,#07H;借位位为0,该数在AF之间,加37HLOOP: ADDA,#30H;该数在09之间,加30H MOV R2,A;ASCII码存于R2 RET3.5.4 子程序设计码型
22、转换子程序-2 【功能】将一个字节二进制数转换成 3 位非压缩型BCD码。 【入口参数】二进制数在内部RAM 40H单元。【出口参数】转换结果放入内部 RAM 52H, 51H, 50H单元中。【分析】转换方法为:依次100、10整除。HEXBCD: MOV A, 40H MOV B, 100 DIV AB;商(A)百位数,余数(B) MOV 52H, A MOV A, B MOV B,10 DIV AB ;商(A)十位数,余数(B)个位数 MOV 51H, A MOV 50H, B RET 3.5.4 子程序设计查表子程序-1 【功能】单字节查双字节查表子程序。 【入口参数】 1)8位A/D电压采集数字量,VR3; 2)温度值放在ROM表中。【出口参数】温度值R2R3 。【分析】特点:自变量为自然数0,1,2 应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高级经济师考试试卷及答案详细汇报
- 2025年心理学考研复习试题及答案
- 2025年全国大学英语考试模拟试题及答案
- 2025年初中数学补习班考试题及答案
- 中医执业医师考试复习app:如何选择高效工具
- 中考物理考点冲刺23【热机】(含答案)
- 医疗机构后勤服务流程优化与建筑设施改造合同
- 民宿景区特色民宿租赁及民宿旅游导览服务合同
- 人工智能语音数据标注合作框架协议
- 虚拟现实旅游项目风险评估与投资决策合作协议
- 2025年北京市朝阳区高三二模-政治+答案
- 温州市普通高中2025届高三第三次适应性考试物理试题及答案
- 《光纤激光切割技术》课件
- 10.信息光子技术发展与应用研究报告(2024年)
- 2025年下半年商务部外贸发展事务局第二次招聘8人易考易错模拟试题(共500题)试卷后附参考答案
- 2024年山西杏花村汾酒集团有限责任公司招聘笔试真题
- 《行政法与行政诉讼法》课件各章节内容-第一章 行政法概述
- 浙江2025年浙江省地质院本级及所属部分事业单位招聘笔试历年参考题库附带答案详解
- 2025年广东广州中物储国际货运代理有限公司招聘笔试参考题库含答案解析
- 海外安保面试题及答案
- 危重患者的早期康复
评论
0/150
提交评论