文档详情

汇编语言程序设计PPT课件

痛***
实名认证
店铺
PPT
287KB
约40页
文档ID:84915375
汇编语言程序设计PPT课件_第1页
1/40

1第第4 4章章 汇编语言程序设计汇编语言程序设计 在单片机的应用中,汇编语言程序设计时一个关键问题它不仅是实现人机对话的基础和直接关系到所设计单片机控制系统的控制特性,而且对系统的存储容量和工作效率也有很大影响24.1 汇编语言基础汇编语言基础 根据程序设计语言的结构及其功能可以分为三种:(1)机器语言机器语言:机器语言是用二进制代码0和1表示指令和数据的最原始的程序设计语言 (2)汇编语言汇编语言:在汇编语言中,指令用助记符表示,地址、操作数可用标号、符号地址及字符等形式来描述 (3)高级语言高级语言:高级语言是接近于人的自然语言,面向过程而独立于机器的通用语言 这里主要介绍汇编语言 3 MCS-51单片机汇编语言,包含两类不同性质的指令1)基本指令基本指令:即指令系统中的指令它们都是机器能够执行的指令,每一条指令都有对应的机器码2)伪指令伪指令:汇编时用于控制汇编的指令它们都是机器不执行的指令,无机器码44.1.1 汇编语言格式汇编语言格式 汇编语言源程序是由汇编语句(即指令)组成的汇编语言一般由四部分组成一般格式为:标号:操作码 操作数 ;注释START:MOVA,30H ;A(30H)54.1.2 伪指令伪指令 伪指令是在机器汇编时供汇编程序识别和执行的命伪指令是在机器汇编时供汇编程序识别和执行的命令,用来对机器的汇编过程进行控制令,用来对机器的汇编过程进行控制。

伪指令不是真正的指令,这些指令不属于指令系统,不产生机器代码即利用伪指令告诉汇编程序如何进行汇编,同时也为人们编程提供方便 MCS-51汇编语言常用的伪指令有8条下面我们分别介绍 6 ORG伪指令称为起始汇编指令起始汇编指令,用来规定汇编时目的程序在程序存储器中存放的起始地址其格式为: 标号: ORG 16位地址 标号通常省略在机器汇编时,当汇编程序检测到该语句时,它就把下一条指令或数据的首字节按ORG后面的16位地址存入程序存储单元该指令常用于汇编语言源程序或数据块的开头 例如:ORG1000HSTART: MOVA, #20HEND(1)ORG7 END 是结束汇编伪指令其作用是通知汇编程序结束汇编汇编程序对END之后的所有汇编语言指令不再汇编 (2)END8 EQU是赋值伪指令是赋值伪指令其作用是给变量标号赋予一个确定的数值(地址或数据)其格式如下:字符名字符名 EQU 数或汇编符号数或汇编符号例如:AA EQU R1K1 EQU 40DD EQU 0F64H MOV A,AA ;即MOV A,R1MOV A,K1 ;即40ALJMP DD ;即0F64HPC(3)EQU9 DB是定义字节伪指令是定义字节伪指令。

其作用是从指定单元开始定义若干个字节的数值或ASCII码字符常用于定义数据常数表其格式如下:操作码 操作数DB 字节常数或ASCII字符例如:ORG 2010DB 76H, 73, C, BDB 0ACH则(2010H)=76H, (2011H)=49H,(2012H)=43H,(2013H)=42H,(2014H)=0ACH即将数据以字节的形式存放在从2010H开始的单元上4)DB10 DW是定义字伪指令是定义字伪指令其作用是从指定单元开始定义若干个字的数值或ASCII码字符其格式如下:操作码 操作数DW 字常数或ASCII字符例如:ORG 2010DW 1234H, 76H, 10DB 0ACH则 (2010H)=12H,(2011H)=34H, (2012H)=00H,(2013H)=76H, (2014H)=00H, (2015H)=0AH即将数据以字(双字节)的形式存放在从2010H开始的单元上5)DW11 DS是定义存储空间伪指令其作用是从指定的地址单元开始,保留DS定义的字节数的存储单元例如:ORG 2050HDS 8(6)DS12 BIT是定义位地址符号伪指令其作用是把位地址赋给字符名。

例如:A1 BIT P2.0 A2 BIT 02H(7)BIT13 DATA是定义标号数据地址赋值伪指令是定义标号数据地址赋值伪指令其作用是给它左边的字符名赋值其格式如下:字符名字符名 DATA 表达式表达式例如: ORG 0200HAA DATA 35H MOV A, AA DATA伪指令一般用来定义程序中所用的8位或16位数据或地址8)DATA144.2 汇编语言程序设计汇编语言程序设计4.2.1 汇编语言程序设计步骤4.2.2 汇编语言程序的设计方法4.2.3 汇编语言的编辑和汇编4.2.4 顺序程序4.2.5 分支程序4.2.6 循环程序4.2.7 子程序154.2.1 汇编语言程序设计步骤汇编语言程序设计步骤1. 分析问题2. 确定算法3. 设计程序流程图4. 分配内存单元5. 编写汇编语言源程序6 .调试程序164.2.2 汇编语言程序的设计方法汇编语言程序的设计方法 汇编语言程序的设计方法主要是采用模块化的程序设计方法即实际的程序一般都由一个主程序和多个子程序构成每一程序模块都有特定的功能174.2.3 汇编语言的编辑和汇编汇编语言的编辑和汇编(1)源程序编辑 用文本编辑器编写源程序,生成 .ASM文件(2)汇编 汇编的目的是把源程序翻译成计算机能识别执行的机器码。

可以用手工汇编或机器汇编生成.HEX目标程序一般要在仿真器调试通过,最后用编程器把目标程序写入EPROM184.2.4 结构化程序设计结构化程序设计 顺序程序是一种最简单,最基本的程序其特点:程序按编写的顺序依次往下执行每一条指令,直到最后一条 一、顺序程序一、顺序程序结束取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASCII码存ASCII码开始 将30H单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元中(31H和32H)例例1ORG2000HMOV A,30H;取值ANLA,#0FH;取低4位ADDA,#30H;转换成ASCII码MOV 32H,A;保存结果MOV A,30H;取值SWAP A;高4位与低4位互换ANLA,#0FH;取低4位(原来的高4位)ADDA,#30H;转换成ASCII码MOV 31H,A;保存结果 SJMP $ END 设X、Y两个小于10的整数分别存于片内30H、31H单元,试求两数的平方和并将结果存于32H单元解:可利用乘法指令求平方程序流程如下图所示例例2结束取数据X求X2暂存X2取数据Y求Y2求X2+Y2开始保存平方和ORG2000HMOV A,30H;取30H单元数据MOV B,A;将X送入B寄存器MUL AB;求X2,结果在累加器中MOV R1,A;将结果暂存于R1寄存器中MOV A,31H;取31H单元数据MOV B,A;将Y送入B寄存器MUL AB;求Y2,结果在累加器中ADDA,R1;求X2+ Y2MOV 32H,A;保存数据SJMP $;暂停END 23二、分支程序二、分支程序条件满足?AYN(a)条件满足?ABNY(b)(c)A0A1AnK=0 K=1 K=nK=? 设X存在30H单元中,根据下式X+2 X0Y =100X=0 求出Y值,Y值存入31H单元。

X X0解:根据数据的符号位判别该数的正负,若最高位为0,再判别该数是否为0程序流程如下图所示例例1参考程序如下:ORG 1000HMOV A,30H;取数JB ACC.7,NEG ;负数,转NEG JZ ZERO;为零,转ZERO ADD A,#02H;为正数,求X+2 AJMP SAVE;转到SAVE,保存数据ZERO:MOV A,# 64H;数据为零,Y=100 AJMP SAVE;转到SAVE,保存数据 NEG: DEC ACPLA;求 XSAVE: MOV 31H,A;保存数据SJMP ;暂停例例2 根据R0的值转向7个分支程序R010,转向SUB0;R020,转向SUB1; R0 R0开始1ms 延时R0-1 - R0R0=0?结束NY周期数 ORG 2000H1 MOV R0, #0AH ;毫秒数R01 DL2: MOV R1, #MT ;1ms延时的预定值1 DL1: NOP1 NOP2 DJNZ R1, DL1 ; 1ms延时循环2 DJNZ R0, DL2 ;毫秒数减1,不等于0继续循环, ;等于0结束 内循环的预定值MT需要计算,根据每条指令的周期数,及延时的总时间,MT可按以下公式计算:(1+1+2)2sMT=1000s可得 MT=125=7DH 以上计算还是存在误差的,因为没有考虑其他指令的执行时间,该程序的精确延时时间为:12s+(1+2)2s+(1+1+2)2s12510=10062s例例4 用P1口作为数据读入口,为了读取稳定的值,要求连续读8次后取平均。

清除R0、R18 - R2开始P1口读入数存入R0、R1求平均值R2-1=0?结束NY34四、子程序四、子程序主程序主程序断点断点1转子程序转子程序1返回主程序返回主程序转子程序转子程序2返回子程序返回子程序1断点断点2子程序子程序1压栈压栈弹出弹出子程序子程序235子程序设计应注意几个问题:子程序设计应注意几个问题: (1)子程序的入口地址子程序的入口地址:即子程序的第一条指令的地址该指令前要有标号标号,这标号就是该子程序的名称名称 (2)子程序的最后必须有一条返回指令RETRET (3)子程序参数子程序参数:约定的工作寄存器工作寄存器R0-R7R0-R7、特殊功能特殊功能寄存器寄存器、内存单元内存单元或堆栈堆栈子程序参数又分入口参数入口参数和出出口参数口参数 (4)现场的保护与恢复现场的保护与恢复 (5)子程序一般应该是浮动代码子程序一般应该是浮动代码 (6)子程序的嵌套调用子程序的嵌套调用 清零子程序(通过寄存器或片内RAM传递参数)MAIN: MOV R0,#30H ;传送RAM数据区的起始地址 MOV R7,#0AH ;传送RAM数据区的长度 ACALL SUBRT ;调用清零子程序 SJMP $ ;结束SUBRT: MOV A,#00H ;清零子程序LOOP: MOV R0,A INC R0 DJNZ R7,LOOP RET例例5 试设计一个ms级的通用软件延时子程序Delay,延时时间为n ms,晶振为6MHZ 。

解:在微机测控系统中,常常需要设置一些准确的延时,既可以采用硬件定时器的方式,也可以通过程序软件的方法来实现延时例例6ORG 2000H ;毫秒数R0Delay: MOV R1, #7DH ;1ms延时的预定值DL1: NOP NOP DJNZ R1, DL1 ;1ms延时循环 DJNZ R0, Delay ;毫秒数减1, RET下面主程序调用该延时子程序,延时10 ms: MOV R0, #0AH LCALL Delay 如果要保护R1寄存器的内容,则应在子程序中加PUSH和POP39 编写一段程序,把片外RAM的2000H开始的20个数据传送到片内30H开始的单元中 课堂练习课堂练习40THANK YOU VERY MUCH !本章到此结束,谢谢您的光临! 。

下载提示
相关文档
正为您匹配相似的精品文档