MCS-51单片机 第4章汇编语言程序设计_第1页
MCS-51单片机 第4章汇编语言程序设计_第2页
MCS-51单片机 第4章汇编语言程序设计_第3页
MCS-51单片机 第4章汇编语言程序设计_第4页
MCS-51单片机 第4章汇编语言程序设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章汇编语言编程,4.1汇编语言基本概念4.2汇编语言编程,4.1汇编语言基本概念,4.1.1汇编语言4.1.2汇编语言的句子结构4.1.3伪指令,返回本章主页,4.1.1编程2 .汇编语言:在汇编语言中,指令用助记符号表示,地址、操作数可以用标签、符号的地址、字符等形式记述。 3 .高级语言:高级语言是一种接近人类的自然语言,是一种面向过程、独立于机器的通用语言。 回到本节,包含4.1.2汇编语言的句子结构、1 .汇编语言的指令类型MCS-51单片机语言、两种不同性质的指令。 (1)基本指令:指令系统中的指令。 这些都是机器能执行的指令,每个指令都有相应的机器代码。 (2)伪指令:用于在装

2、配时控制装配的指令。 这些都是机器不执行的命令,没有机器代码。 2 .汇编语言的语法形式汇编语言源程序由汇编语言(即指令)构成。 汇编语言一般由四个部分组成。 那种典型的汇编语句的形式返回此节,其中,标签:操作码操作数注释START: MOV A,30H A(30H )是4.1.3伪指令,1.ORG :汇编起始地址是指,以下段存储在存储器中的开始地址: 例如,对程序: ORG 1000H START: MOV A、#20H MOV B、#302.equal :变量标签分配确定的数值。 3.DB :定义数据字节,以字节数的形式将数据存储在存储器单元中。 4.DW :定义数据字作为字在存储单元中存

3、储数据。 5.DS :定义存储体从指定的地址单元开始,保持一定数量的存储体。 6 .位:位定义确定字符名确定的位地址值。 7.END :汇编程序结束,返回本节,4.2汇编语言编程,4.2.1汇编语言编程步骤4.2.2步骤程序4.2.3分支程序4.2.4循环程序4.2.5子程序4.2 4.2.1汇编语言编程步骤1 .分析问题2 .决策算法3 .设计过程流程图4 .分配存储器单元5 .汇编语言源程序6 .创建调试器,返回本节,4.2.2程序,顺序特征:程序按照编制的顺序依次执行各指令,直到最后的指令为止。 【例4.1】将30hz单元内的2位的BCD编码分解为ASCII码,并存储在RAM的2个单元中

4、。 程序的流程如图4-1所示。 参考程序是ORG 2000H MOV A、30H。取值ANL A、#0FH的下位4位、ADD A、#30H; 变换为ASCII代码MOV 32H,a的保存结果MOV A、30H; 取值SWAP A的上位4位和下位4位的交换ANL A、#0FH; 下位4位(原来的上位4位) ADD A,#30H; 将转换为ASCII代码MOV 31H,a的保存结果SJMP $ END、图4-1剥离程序流程图、图4-2例4.2程序流程图、【例4.2】将x、y这两个小于10的整数分别保存在片内的30H、31H单元中解:由于两个数都小于10,所以两个数的平方和小于100,可以利用乘法指

5、令来求出平方。 程序的流程如图4-2所示。 参考程序是ORG 2000H MOV A、30H。将取30H单位的数据MOV B、a的x发送到b寄存器,MUL AB; 求出X2的结果,在累加器中为MOV R1、a; 将结果暂时存储在R1寄存器中; 取31H单元数据MOV B,a,将y发送到b寄存器MUL AB,求出Y2,结果,用累加器进行add、R1; 求X2 Y2 MOV 32H、a的保存数据SJMP $; 暂停END,图4-2例的4.2程序流程图,回到本节,4.2.3分支程序,1 .分支程序的基本形式分支程序有图4-3所示的三种基本形式。 分支过程的设计要点如下: (1)首先建立可以用于条件分

6、支命令测试的条件。 (2)选择适当的条件分支命令。 (3)在转移目的地设定标签。另外,图4-3分支程序结构流程图,2 .双向分支程序设计例【例4.3】假设x存在于30H单元中,根据下式X 2 X0 Y=100 X=0求出y值,将y值存储在31H单元中。 X X0解:根据数据的符号比特来判别该数目的正负,如果最高位比特为0,则判别该数目是否为0。 程序的流程如图4-4所示。 参考程序包括ORG 1000H、MOV A,30H; 取得数JB ACC.7、NEG负数、NEG JZ ZER0; 零、ZER0 ADD A、#02H; 以正数转移到求X 2 AJMP SAVE的SAVE,保存数据ZER0:

7、MOV A,# 64H,数据为零,Y=100 AJMP SAVE; 转到保存,数据neg :保存PS a cpla; 保存: mov 31h、a; 保存数据SJMP $; 暂停,图4-4例4.3程序流程图,3 .多方向分支程序设计例【例4.4】从r0的值转移到7个分支程序。 R010、R020到SUB0、R00 Y=100 X=0到SUB1求出y值,将y值复原。 X X0解:设定计数器控制周期数,每处理一次数据就减少一个计数器。 程序的流程如图4-8所示。 参考源程序可以是ORG 2000H MOV R0、#10 MOV R1、#30H START: MOV A、R1; 取得数JB ACC.7

8、,NEG负数时为NEG JZ ZER0; 在零的情况下,ZER0 ADD A、#02H; 如果为正,则转移到求X 2 AJMP SAVE的SAVE,保存数据ZER0: MOV A,# 64H,数据为零,Y=100, AJMP SAVE; 转到SAVE,保存数据neg:dec a CPL a-x-save:mov R1,a; 保存数据INC R1地址指针没有处理指向下一个地址DJNZ R0,START的数据,因此SJMP $; 暂停,图48例的4.5的程序流程图返回本节,4.2.5的子程序,1 .子例程概念调用子例程,暂时中断主程序的执行,转移到子例程的条目地址执行子例程。 如图4图10所示。

9、调用子程序时,请注意(1)子程序占有的存储单元和寄存器。 (2)参数的传递。 (3)子程序被调用得到的数据完成程序间的参数传递。 (4)嵌套调用和递归调用。 如图4-11所示。 另外,返回图4-10子程序的调用和返回图4-11子程序的嵌套调用,将2 .子程序设计例【例4.8】4.4节的例4.5变更为子程序结构。 解:数据块中的十几个需要符号的判断和对应,可以把一些工作交给子程序,主程序只负责数据的读取、判断处理子程序的调用、数据的保存、循环控制的工作。 源程序可以是ORG 0000H MOV R0、#10 MOV R1、#30H、START: MOV A、R1; 取得数ACALL DISPOS

10、E判定处理例程SAVE: MOV R1,a; 更改保存数据INC R1地址指针,指向下一个地址DJNZ R0,START。因为没有处理数据,所以SJMP $; ORG 0200H DISPOSE: JB ACC.7,NEG; 在负数的情况下为NEG,JZ ZER0; 在零的情况下,ZER0 ADD A、#02H; 如果为正,则转移到求X 2 AJMP BACK的SAVE,保存数据ZER0: MOV A,#64H,数据移到零,Y=100 AJMP BACK SAVE,求数据NEG: DEC A CPL A,求X BACK: RET 其中,P3.1、P1.1、P1.0分别是单片机端口线上的信息,RS0、RS1是PSW寄存器中的两个标志位,30H、31H是两个比特地址,运算结果从P1.0输出。 程序包括ORG 0000H MOV C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论