单片机 汇编语言程序设计知识_第1页
单片机 汇编语言程序设计知识_第2页
单片机 汇编语言程序设计知识_第3页
单片机 汇编语言程序设计知识_第4页
单片机 汇编语言程序设计知识_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

第4章

汇编语言程序设计知识/sundae_meng4.1汇编语言程序的汇编1.机器语言

11100101001100000010010101000000

1111010101010000

2.汇编语言

MOVA,30HADDA,40H

MOV50H,A3.高级语言

高级语言是一种面向算法和过程的语言。如:

FORTAN、BASIC、C语言/sundae_meng4.2汇编语言程序设计概述4.2.1

汇编语言语句格式〔标号:〕<操作码助记符>[操作数][;注释]1.标号

标号是语句地址的标志符号、代表该语句指令代码第一个字节的地址。

2.操作码助记符

此为语句中唯一不可缸少的部分,也是语句的核心,表示该语句进行何种操作。3.操作数

操作数是指令的操作对象。4.注释

注释是为方便程序的编写、理解、交流而书写的说明解释性文字、符号。

/sundae_meng4.2.1伪指令

1.汇编起始地址伪指令ORG(Origin)

格式:〔标号:〕ORG<addr16>

功能:规定目标程序段式数据块的起始地址。说明:总放在源程序段的开头和数据块的开头

2.汇编结束指令END

格式:〔标号:〕END

功能:告诉汇编程序,源程序到此结果,汇编到此截止。说明:一个程序只能有一条END命令,且位于程序的最后。汇编程序对END语句以后的语句不进行汇编。例如:

ORG 2000HSTART:MOV A,BJNB ACC.7,DONECPL ADONE:MOV B,AEND

/sundae_meng

格式:〔标号:〕DB<字节数据>

功能:从指定的地址单元开始,存入规定好的8位数(字节数据)说明:1)存贮地址单元可由前一条指令确定或由ORG命令指定;

2)当存贮多个数时,中间用“,”隔开。例如:

ORG8000HMOVA,40HTAB:DB40H,1101B,96……表示从8002H单元开始分别存放40H,0DH,43H例:

ORG1000HDB“Howareyou”则把字符串中的字符按ASCII码连续存放在1000H~100AH11个单元中(包括两个空格)。

注意:DB0FA2H是非法的,因0FA2H不是字节数。3.字节定义伪指令DB(DefineByte)/sundae_meng

格式:〔标号:〕DW<字数据>

功能:从指定的地址开始,存入字十六位数据(字数据)。说明:存入数据时高位在前,低位在后,即高8位存入低地址单元,低8位存入高地址单元。例:

ORG1000HDW765AH,40H,“AB”

则1000H~1005H单元依次存放着:76H,5AH,00H,40H,

41H,42H。注意:

1)DW语句中,40H是8位数,按16位数0040H存放.

2)DW“ABC”及DW“Howareyou”是非法的,而

DB“ABC”

“Howareyou”则是合法的。

4.字定义伪指令DW(DefineWord)/sundae_meng

格式:〔标号:〕DS<数或表达式>

功能:从指令的地址单元开始,保留指定数目的字节单元作为备用空间。例:

ORG1000HDS20START:MOVA,#00H则汇编后,从1000H开始,保留20个单元作它用,第三条指令的标号START的地址应为1014H。注意:MCS-51系列单片机,DB、DW、DS伪指令只能用于程序存贮器,不能对数据存贮器使用。

5.空间定义伪指令DS(DefineStorage)/sundae_meng

格式:<字符名称>EQU<数或表达式>

功能:将右边的值赋给左边用户定义的字符。说明:1)赋值后的字符即可做为地址使用,也可以做为立即数使用;2)一经使用EQU赋值,整个程序有效;3)所赋值可是8位(字节)或16位(字);4)该伪指令一般放在程序的开始段;5)指令字符名称构成的规定和地址标号一样,但不是标号,使用时后无“:”。例如程序段:

ORG8000HAA EQU10H

;AA=10HABC EQUAA+10H;ABC=20HMOV A,ABC;A←20HBS:ADDA,#AA;A←(A)+10H

说明:程序中,AA、ABC是字符名称,BS是标号。6.赋值伪指令EQU(Equate)/sundae_meng

格式:<字符名称>BIT<位地址>

功能:把位地址赋给指定的字符名称。例:

A1BITP1.0A2BIT20H

说明:赋值命令和位定义命令仅为方便编程和阅读理解程序使用,使用时,字符名称或位名称一般取有意义且便于记忆的字母数字。

7.位定义伪指令BIT/sundae_meng4.2.2

汇编语言程序设计一般步骤

(1)分析问题,明确任务(2)建立数学模型,确定算法(3)绘制程序流程图(4)编写源程序

(5)汇编、调试/sundae_meng4.2.3

循环结构程序设计典型循环结构包括四部分:初始化部分循环处理部分循环控制部分循环结束部分/sundae_meng1.设置循环计数器实现已知循环次数的循环控制程序如下:

MOVR0,#64H;设置循环计数器

MOVDPTR,#DATA;设置地址指针

CLRALOOP:MOVX@DPTR,A;清0INCDPTRDJNZR0,LOOP;判0结束循环〔例4-7〕将首址为DATA的100个外部RAM单元清零。〔解〕该例为已知循环次数的循环程序将循环次数数存放在R0中。椐图如4-7所示。/sundae_meng2.使用测试条件转移指令控制未知次数的循环〔例4-8〕设某以“$”为结束标志的字符中共不超过256个,存放在内部RAM以STA为首址的连续单元里,设统计此字符中长度并存放到内部RAM的LEN单元中。〔解法一〕框图如图4-8所示:程序如下:

ORG1000HMOVR2,#STA

;设地址指针

MOVB,#00H;设计数器LOOP:

MOVA,@R2CJNEA,“$”,NEXT;判断是否结束

MOVLEN,B;存数据结果

SJMPDONENEXT:INCB;修改计数器

INCR2

;修改地址指针,准备下一次循环

SJMPLOOPDONE:END/sundae_meng/sundae_meng程序如下:

ORG1000HMOVR2,#STA-1;设地址指针

MOVB,#0FFH;设计数器LOOP:INCR2

;修改地址指针,准备下一次循环

INCB;修改计数器

MOVA,@R2

;取数

CJNEA,“$”,LOOP

;判断循环是否结束

MOVLEN,B

;存数据

END说明:1)解法一为先判断后处理形式,更符合人们的习惯思维,但使用了无条件转移指令,程序结构不清晰,质量不高。2)解法二为先处理后判断形式,我们要熟悉并掌握这种方法,同时注意解法二中对地址指针R2和计数器B的初值设置。〔解法二〕框图如图4-9所示。/sundae_meng4.2.4子程序设计1.子程序的概念2.子程序调用

主程序调用子程序指令:LCALL、ACALL子程序执行结束返回指令:RET/sundae_meng3.现场保护

子程序执行时首先必须将两段程序都用到的寄存器或存贮单元保存起来,称现场保护。在子程序返回前,再将保存起来的内容恢复到原处,返回后继续执行程序,这个过程称恢复现场。对于PC值的现场保护和恢复是由计算机在执行LCALL,ACALL和RET时自动完成的。

对于其它需要保护的存贮单元,由程序员在子程序的开头和结尾编程实现,一般也是用栈操作指令完成的。

4.主程序与子程序的参数传递

主程序在调用子程序时必须将具体的数据传递给子程序中相应的变量(寄存器等),这些数据称入口参数。子程序执行结束后也必须将运行结果传递给主程序供主程序使用,这些结果数据称出口参数。

/sundae_meng〔例4-12〕设内部存放长度为40H的ASCII字符串,首址为40H。试将该字符中每一个字符中加偶校验位。要求先编写ASCII字符的偶校验子程序,通过子程序调用完成所给任务。

〔解〕该例中,入口参数仅有一个ASCII数,出口数据也只有一个加校验位的ASCII字符,可只用累加器A传送。子程序编写如下:

ORG0120HSUB:ADDA,#00H;根据A中字符的1的个数;产生PSW的奇偶标志位PJNBP,DONE;判A中1个数

温馨提示

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

评论

0/150

提交评论