《(2.3)--3章 单片机汇编程序设计.ppt》由会员分享,可在线阅读,更多相关《(2.3)--3章 单片机汇编程序设计.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机原理单片机原理与应用与应用第第3章章单片单片机汇机汇编程序编程序设计设计内容指内容指南南:单片机的工作就是执行程序,而程序是指令的有序集合。汇编语言是最基本的编程方式,而C语言则是单片机程序开发的主流。对于应用C语言程序开发的读者来说,了解单片机的指令系统和汇编语言也是十分必要的。本章主要介绍AT89S51单片机的指令系统与汇编语言程序设计。学习学习目标:目标:掌握51单片机指令系统与汇编语言程序的基本概念。了解51单片机汇编指令的分类、语法规则、功能及程序用法。了解汇编语言程序设计步骤及编程方法。第3章 指令系统与汇编语言程序设计3.1 指令系统概述 3.2 寻址方式 3.3 指令详解
2、3.4 汇编语言程序设计 第3章 指令系统与汇编语言程序设计 数据传送类(28条)算术运算类(24条)逻辑运算类(25条)控制转移类(17条)位操作类 (17条)指令系统指令系统计算机中全部指令的集合51单片机共有111条指令,按功能功能可划分为五大类:指令指令CPU用于指挥功能部件完成某一指定动作的指示 和命令第3章 指令系统与汇编语言程序设计CPU能直接识别并执行的指令是机器语言指令,表现形式为二进制编码。例如:01110100 10101011机器语言指令显然不利于阅读与编程第3章 指令系统与汇编语言程序设计为了改善可读性约定了一些能反应机器指令功能的单词来代表该机器指令把内部的各种资源
3、符号化!01110100 10101011MOV A,#0ABH汇编指令机器指令第3章 指令系统与汇编语言程序设计易懂的单词资源符号化第3章 指令系统与汇编语言程序设计编译器就是将“高级语言”翻译为“机器语言”的程序Keil uVision4Microsoft Visual C+6.0第3章 指令系统与汇编语言程序设计汇编语言:用助记符号表示指令的计算机语言汇编指令集、伪指令和使用他们的规则的统称特点1.与机器相关性不同型号CPU有不同的机器指令系统,也就有不同的汇编语言2.执行效率高汇编直接对硬件操作3.编写程序较为复杂汇编语言要安排运算的每一个细节4.汇编语言用到大量的各类转移指令,这些跳
4、转指令加大了调试的难度第3章 指令系统与汇编语言程序设计使用领域:要求执行效率高,反应快的领域如:操作系统内核,实时系统与硬件资源密切相关的软件开发如:设备驱动程序受存储容量限制的应用领域如:家用电器的计算机控制功能没有适当的高级语言开发环境不宜使用的领域:大型软件的整体开发第3章 指令系统与汇编语言程序设计汇编语言汇编语言(Assembly Language)用助记助记(字字)符符代替操 作码,用地址符号代替地址码的一种面向机器的程序 设计语言;本章学习目标本章学习目标:了解汇编语言的一般规则,借助指令手册能读懂汇编程序。汇编语言特点汇编语言特点代码精炼、执行速度快,但不便于编写 较复杂的程
5、序;汇编程序处理过程汇编程序处理过程输入源程序检查语法正确性(如有 语法错误,输出错误信息)翻译成二进制目标程序。第3章 指令系统与汇编语言程序设计一条汇编语言指令中最多包含4个区段,其一般格式为:标号标号:操作码操作码 操作数操作数 ;注释注释标号(标识符)当前指令行的符号地址,其值为 该指令的机器码首字节在ROM中的存放地址;标号由英文字母开头的16个字符组成,不区分大小写;标号与(英文)冒号可以同时省略。.0122H0123H0124H.xxH xxH xxH 74H 12HROMSTART 标号标号:操作码操作码 操作数操作数 ;注释注释 START:MOV A,#12H ;机器码74
6、12H 例如:第3章 指令系统与汇编语言程序设计 标号标号:操作码操作码 操作数操作数 ;注释注释操作码是指令的操作行为,由操作码助记字符操作码助记字符表征;51单片机共有42种操作码助记符,不区分大小写。MOV A,#12H ;move (传送)SETB P1.0 ;set bit (置位)CJNE A,R0,START ;compare and jump if not equal (比较跳转)举例:第3章 指令系统与汇编语言程序设计 标号标号:操作码操作码 操作数操作数 ;注释注释操作数是指令的操作对象,用操作数简记符表示,不区分大小写;操作数可以是3个、2个、1个或没有操作数;操作数大于
7、1时要用(英文)逗号隔开。CJNE A,R0,START ;若AR0,转START ADD A,#10H ;A+10H ACRL A ;A0RET ;子程序返回举例:第3章 指令系统与汇编语言程序设计 标号标号:操作码操作码 操作数操作数 ;注释注释注释是对指令的解释性说明,用以提高程序的可读 性;可用任何文字或符号描述,可以省略;由(英文)分号开始,无需结束符号。MOV A,#12H ;立即数12HASETB P1.0 ;P1.01CJNE A,R0,START ;若AR0,转START 举例:第3章 指令系统与汇编语言程序设计指令手册中,每条指令的操作数操作数却是以简记符号简记符号表示的。
8、掌握简记符号简记符号规则便于阅读源程序(查指令手册)真实指令中一般都含有具体的操作数,例如:MOV A,R3 或 MOV A,#35H第3章 指令系统与汇编语言程序设计 简记符号Rn(n=07)-当前工作寄存器组中的寄存器R0R7之一Ri(i=0,1)-当前工作寄存器组中的寄存器R0或R1-间址寄存器前缀#data-8位立即数/#data16-16位立即数direct-片内低128个RAM单元地址及SFR地址addr11-11位目的地址addr16-16位目的地址rel-8位地址偏移量,范围:128127bit-片内RAM位地址、SFR的位地址(X)-表示 X 地址单元或寄存器中的内容(X)-
9、由 X 间接寻址的单元中的内容-箭头左边的内容被箭头右边的内容所取代/-位操作数的取反操作前缀第3章 指令系统与汇编语言程序设计寻址方式是对操作数存在规律的归纳,一条指令究竟属于哪种寻址方式往往并不重要,也不会影响它的使用,因而不必过意追究。51单片机共有七种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址、立即寻址、变址寻址、位寻址、相对寻址。寻址方式越多,单片机的功能就越强;CPU取得操作数的方法称为寻址方法 寻址方式寻址方式第3章 指令系统与汇编语言程序设计立即寻址操作数在指令编码中寻址空间:ROM对 于 MOV DPTR,#2100H指 令,立 即 数 高 8位“21H”装入DPH 【例
10、例】执行执行MOV A,#50H 结果:(结果:(A A)=50H =50H MOVA,#100 MOV33H,#10HMOVR0,#0FFH第3章 指令系统与汇编语言程序设计寄存器寻址操作数在寄存器中寻址范围:R0R7、A、B、DPTR【例例】若(若(R0)=30H,执行MOV A,R0后,(A)=30H MOVA,R0ADDA,R5MOV R7,AINC DPTR第3章 指令系统与汇编语言程序设计直接寻址指令中的操作数直接以单元地址的形式给出寻址空间:片内RAM低128字节;SFR(符号形式)另一类直接寻址是转移目标地址的寻址。如:LJMP ADDR16【例例】若(若(50H50H)=3A
11、H=3AH,执行MOV A,50H后,(A)=3AH MOVA,30HMOV50H,BADDA,60HMOV A,P1第3章 指令系统与汇编语言程序设计寄存器间接寻址寄存器中的内容是操作数的地址寻址空间:片内RAM(Ri、SP)片外RAM(Ri、DPTR)【例例】若(若(R0)=30H,(30H)=5AH 执行MOV A,R0后,(A)=5AH MOVA,R0MOVR1,AADDA,R0MOVX A,DPTR第3章 指令系统与汇编语言程序设计位寻址(实质属于位的直接寻址)寻址位数据寻址空间:片内RAM位空间、SFR位空间【例例】位地址位地址00H内容为内容为1,MOV C,00H执行执行后,位
12、地址后,位地址PSW.7的内容为的内容为1。位地址的表示方法位地址的表示方法:用位名称用位名称 如如P1.5P1.5,CyCy用位地址用位地址 如如95H95HMOVC,30HCLR CSETB 20HCPL P1.0第3章 指令系统与汇编语言程序设计变址寻址操作数地址:基地址+偏移量寻址空间:ROM【例例】(A A)=0FH,=0FH,(DPTRDPTR)=2400H =2400H 执行执行MOVC A,A+DPTR(A)=88H(A)=88HMOVC A,A+DPTRMOVC A,A+PCJMP A+DPTR第3章 指令系统与汇编语言程序设计相对寻址用于跳转指令,实现程序分支Rel常用符号
13、地址表示,离源地址不要超过(128127)【例例】若若rel为75H,PSW.7为1,JC rel存于1000H开始的单元。执行JC rel指令后,程序将跳转到1077H单元取指令并执行。JC relJC relJB P1.3,ALARMJZ NEXTDJNZ R7,LOOP第3章 指令系统与汇编语言程序设计可实现可实现RAM、SFR和和ROM之间的数据互传或交换之间的数据互传或交换数据传送与交换类指令数据传送与交换类指令 指令分类介绍第3章 指令系统与汇编语言程序设计第3章 指令系统与汇编语言程序设计数据传送与交换类指令共有8种操作码:MOV用于访问片内RAMMOVX用于访问片外RAMMOV
14、C用于访问程序存储器XCH和XCHD用于字节交换SWAP用于A内半字节交换PUSH和POP用于堆栈操作第3章 指令系统与汇编语言程序设计数据传送类指令的基本通式为:,表示将源操作数源操作数(src)的内容传送给目的操作数目的操作数(dest),传送后源操作数中内容不变。transfer具有三种具体形式:MOV数据在片内片内RAM范围内传送MOVX数据在A与片外与片外RAM之间传送MOVC数据在A与与ROM之间传送第3章 指令系统与汇编语言程序设计单向箭头表示只能从源源到目的目的双向箭头表示源源和目的目的可以互换位置弧线箭头表示源源和目的目的相同(唯一)箭头线旁边的文字是相应的操作码基本规律基本
15、规律:立即数和ROM地址只能作为源操作数(单向箭头);内外ROM与A的数据传送只能用MOVC操作码助记符;片外RAM与A的数据传送只能用MOVX操作码助记符;PUSH、POP、SWAP只有1个操作数(弧线箭头);位数据传送只能在C(即Cy标志位)与bit间进行。数据传送目的和源的快捷记忆法第3章 指令系统与汇编语言程序设计算术运算类指令算术运算类指令 可实现加、减、乘、除和增可实现加、减、乘、除和增1、减、减1等运算功能等运算功能 第3章 指令系统与汇编语言程序设计算术运算类指令共有8种操作码:ADD用于不带进位加法ADDC用于带进位加法SUBB用于带借位减法INC和DEC用于加1和减1MUL
16、用于乘法DIV用于除法 DA用于十进制加法调整第3章 指令系统与汇编语言程序设计特点特点:除加1和减1外,都需以累加器A为目的操作数;一般都会影响PSW中的CY、AC、OV和P四个标志位。AC算术运算类指令快捷记忆法第3章 指令系统与汇编语言程序设计逻辑运算及移位类指令逻辑运算及移位类指令 可实现可实现与、或、异或、求反、置与、或、异或、求反、置1、清、清0、移位等、移位等功能功能第3章 指令系统与汇编语言程序设计逻辑运算及移位类指令共有10种操作码:ANL用于逻辑与运算ORL用于逻辑或运算XRL用于逻辑异或运算SETB和CLR用于置1和清0CPL用于取反RL和RR于循环左移和循环右移 RLC
17、和RRC用于带C循环左移和带C循环右移第3章 指令系统与汇编语言程序设计特点特点:字节运算以A为目的操作数(#data与direct的运算例外),位运算以C为目的操作数。CLRCPLCLRSETB逻辑运算指令快捷记忆法第3章 指令系统与汇编语言程序设计特点特点:只能针对A进行操作 左移1位相当于乘2,右移1位相当于除2。功能功能:对累加器A进行循环移位操作 循环移位指令的四种移位关系第3章 指令系统与汇编语言程序设计控制转移类指令控制转移类指令 通过改变程序计数器通过改变程序计数器PC值值,实现程序转移功能,实现程序转移功能 第3章 指令系统与汇编语言程序设计控制转移类指令共有18种操作码:A
18、JMP、SJMP、LJMP、JMP用于无条件转移 ACALL和LCALL用于子程序调用 RET和RETI用于子程序和中断返回 JZ、JNZ、CJNE和DJNZ用于字节条件转移 JC、JNC、JB、JNB和JBC用于位条件转移 NOP用于空操作第3章 指令系统与汇编语言程序设计功能功能:根据转移地址修改PC当前值;转移地址转移地址:LJMP16位;AJMP11位;SJMP8位;JMP16位特点特点:前三项都可用语句标号代替具体地址;(例如 LJMP START 或 SJMP)第四项为变址寻址转移指令 PCA+DPTR无条件转移第3章 指令系统与汇编语言程序设计功能功能:根据转移地址(rel)修改
19、PC当前值;特点特点:rel值为-128127,可用语句标号代替;例如 JC SMALL以 rel表示操作数的存在方式相对寻址相对寻址 条件转移指令快捷记忆法 第3章 指令系统与汇编语言程序设计伪指令伪指令 汇编语言指令的两类指令:真指令真指令(指令性语句)汇编后可以产生机器 码的指令,如前介绍的111条指令;伪指令伪指令(指示性语句)用于指示汇编系统软件要完成的操作,一般不产生机器码常用的伪指令:ORG、END、EQU、DATA、BIT、DB第3章 指令系统与汇编语言程序设计 MCS-51常用伪指令 伪指令名称格式功能描述ORG(Oringin)程序起始地址ORG 16位地址用于定义汇编程序
20、或数据在ROM中存放的起始地址EQU(Equate)等值指令标识符 EQU 数或汇编符号用于将一个数值或汇编符号赋给该标示符DATA(Data)数据地址赋值标识符 DATA 内存字节地址用于将一个内部 RAM 的地址赋给该标示符BIT(Bit)位地址赋值标识符 DATA 位地址或位名称用于将一个位地址或位名称赋给该标示符DB(Define Byte)定义字节标号:DB 用于把项或项表中的字节(8位)数值依次存入标号开始的存储单元中END(End)结束汇编END用于指示汇编源程序段结束第3章 指令系统与汇编语言程序设计汇编语言程序设计步骤汇编语言程序设计步骤 分析问题,确定算法或解题思路 画程序
21、流程图编写汇编程序程序调试与修改用汇编语言进行程序设计的过程和用高级语言进行程序设计的过程类似,一般需要经过以下几个步骤:第3章 指令系统与汇编语言程序设计流程图(程序框图)表示程序的执行过程或解题步骤和方法给出程序的结构,体现整体与部分之间的关系便于阅读、理解程序,查找错误起始第3章 指令系统与汇编语言程序设计【例3-17】电路如图3-8所示,AT89S51单片机的P2口作输出,经上拉电阻驱动连接8只发光二极管D1D8,当输出位为1时发光二极管点亮;输出位为0时发光二极管熄灭。试编制程序实现以下发光二极管点亮的功能:D1D8亮其余灭延时D2D7亮其余灭延时D3D6亮其余灭延时D4D5亮其余灭延时D3D6亮其余灭延时D2D7亮其余灭延时D1D8亮其余灭,重复上述过程。第3章 指令系统与汇编语言程序设计 确定解决方案确定解决方案高电平驱动的发光二极管,写1灯亮,写0灯灭;循环改写P2.0P2.7;通过软件延时子程序调节P2口输出频率。第3章 指令系统与汇编语言程序设计画程序流程图画程序流程图尽可能详细地表示出每一相关环节的内容 编写汇编程序编写汇编程序第3章 指令系统与汇编语言程序设计程序编译调试程序编译调试第3章 指令系统与汇编语言程序设计实际运行效果:第3章 指令系统与汇编语言程序设计谢谢您的聆听谢谢您的聆听
限制150内