汇编语言程序设计基础课件

上传人:大米 文档编号:592947767 上传时间:2024-09-23 格式:PPT 页数:73 大小:364.50KB
返回 下载 相关 举报
汇编语言程序设计基础课件_第1页
第1页 / 共73页
汇编语言程序设计基础课件_第2页
第2页 / 共73页
汇编语言程序设计基础课件_第3页
第3页 / 共73页
汇编语言程序设计基础课件_第4页
第4页 / 共73页
汇编语言程序设计基础课件_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《汇编语言程序设计基础课件》由会员分享,可在线阅读,更多相关《汇编语言程序设计基础课件(73页珍藏版)》请在金锄头文库上搜索。

1、第四章第四章汇编语言程序设计基础汇编语言程序设计基础第四章第四章汇编语言程序设计基础汇编语言程序设计基础第一节、概述第二节、基本程序设计方法第三节、汇编语言程序的编辑和汇编第一节、概述第一节、概述1、程序设计语言、程序设计语言2、汇编语言源程序的格式、汇编语言源程序的格式3、伪指令、伪指令1 1、程序设计语言、程序设计语言程序设计语言:程序设计语言:计算机能理解和执行的语计算机能理解和执行的语言称计算机程序设计语言。言称计算机程序设计语言。 程序设计:程序设计:用程序设计语言把解决问题的用程序设计语言把解决问题的步骤描述出来。步骤描述出来。程序设计语言的分类:程序设计语言的分类:按照语言的结构

2、及按照语言的结构及其功能可以分为三种其功能可以分为三种机器语言、汇编语言、高级语言机器语言、汇编语言、高级语言 (1)机器语言)机器语言(MachineLanguage)用用二二进进制制代代码码0和和1表表示示指指令令和和数数据据的的最最原原始的程序设计语言。始的程序设计语言。(2)汇编语言)汇编语言(AssemblyLanguage)指指令令用用助助记记符符表表示示,地地址址、操操作作数数可可用用标标号、符号地址及字符等形式来描述。号、符号地址及字符等形式来描述。(3)高级语言)高级语言 (High-LevelLanguage)接接近近于于人人的的自自然然语语言言,面面向向过过程程而而独独立

3、立于于机器的通用语言。机器的通用语言。三种语言程序处理过程三种语言程序处理过程2、汇编语言源程序的格式、汇编语言源程序的格式1 1、汇编语言源程序是由汇编语句(即指令)组成的。、汇编语言源程序是由汇编语句(即指令)组成的。、汇编语言源程序是由汇编语句(即指令)组成的。、汇编语言源程序是由汇编语句(即指令)组成的。2 2、汇编语言的语句最多由四部分(四个字段)组成:、汇编语言的语句最多由四部分(四个字段)组成:、汇编语言的语句最多由四部分(四个字段)组成:、汇编语言的语句最多由四部分(四个字段)组成:【标号:】操作码【标号:】操作码【操作数】【;注释】【操作数】【;注释】START:MOVA,3

4、0H;A(30H) 标号之后用冒号标号之后用冒号标号之后用冒号标号之后用冒号“:”与操作码隔开与操作码隔开与操作码隔开与操作码隔开 操作码之后用空格操作码之后用空格操作码之后用空格操作码之后用空格“ ”与操作数隔开与操作数隔开与操作数隔开与操作数隔开 两操作数之间用逗号两操作数之间用逗号两操作数之间用逗号两操作数之间用逗号“,”隔开隔开隔开隔开 注释之前用分号注释之前用分号注释之前用分号注释之前用分号“;”与操作数隔开与操作数隔开与操作数隔开与操作数隔开标号字段说明标号字段说明标标号号是是指指令令的的符符号号地地址址,一一个个标标号号的的值值是是该该指指令令代代码码第第一一个个字字节节的的地地

5、址址。在在程程序序的的其其它它地地方方可可以以引引用用这这个个标标号号以以代代表表这这个个特特定定的的地地址址。不不是是每每条条指指令令都都采采用用标标号号,只只有有那那些些被被其其它它语语句句(如如转转移移、调调用用)引引用用的的语语句句和和数数据据,才才需需要要赋赋予予标标号号,以以便便实实现现控控制制程程序序的转移或调用。的转移或调用。标号的使用有以下规定:标号的使用有以下规定:(1)标标号号由由大大写写英英文文字字母母开开头头的的字字母母和和数数字字串串组组成成,长长度度为为18个个字字符符。最最后后必须以冒号必须以冒号“:”结束。结束。(2)不不能能使使用用指指令令助助记记符符、CP

6、U的的寄寄存存器名以及伪指令等作为标号。器名以及伪指令等作为标号。(3)同一程序内,标号必须互不相同。)同一程序内,标号必须互不相同。(4)为为便便于于阅阅读读程程序序,最最好好使使标标号号字字符符有一定含义。有一定含义。3、伪指令、伪指令MCS-51单单片片机机汇汇编编语语言言,包包含含两两类类不不同同性性质的指令。质的指令。(1)基基本本指指令令:即即指指令令系系统统中中的的指指令令。它它们们都都是是机机器器能能够够执执行行的的指指令令,每每一一条条指指令令都都有对应的机器码。有对应的机器码。(2)伪伪指指令令:汇汇编编时时用用于于控控制制汇汇编编的的指指令令。它们都是机器不能执行的指令,

7、无机器码。它们都是机器不能执行的指令,无机器码。(1)(1)、定位伪指令、定位伪指令ORG格式格式:ORG16位地址或标号位地址或标号功能功能:用在一段源程序或数据块的前面,说明紧用在一段源程序或数据块的前面,说明紧随在后的程序段或数据块的起始地址。随在后的程序段或数据块的起始地址。例如:例如:ORG2000HSTART:MOVA,#64HEND说明说明START的的值为值为2000H(2)(2)、汇编结束伪指令、汇编结束伪指令END 格式格式:标号:标号:END表达式表达式功功能能:用用在在汇汇编编语语言言源源程程序序的的最最后后,是是源源程程序序的的结结束束标标志志。在在机机器器汇汇编编时

8、时,当当汇汇编编程程序序检检测测到到该该语语句句时时,它它就就确确认认汇汇编编语语言言源源程程序序已已经经结结束束,对对END后面指令都不予汇编。后面指令都不予汇编。如如果果源源程程序序是是一一段段子子程程序序,END后后不不写写表表达达式式;若若是是主主程程序序,则则必必须须写写表表达达式式,所所写写表表达达式式就就是是该该主主程程序序第第一一条条指指令令的的标标号号,表表示示该该程程序序的的可可执执行段的首地址。行段的首地址。(3)(3)、赋值伪指令、赋值伪指令EQU格式格式:字符名称字符名称EQU表达式表达式功功能能:汇汇编编程程序序自自动动把把EQU右右边边的的“表表达达式式(8位位或

9、或16位位)”的的值值赋赋给给左左边边的的“字字符符名名称称”。“字字符符名名称称”必必须须先先赋赋值值后使用。后使用。EQUEQU伪指令与存储单元无关。伪指令与存储单元无关。在在某某程程序序中中,一一旦旦用用EQU伪伪指指令令对对某某字字符符名名称称赋赋值值之之后后,就就不不能能再再用用EQU伪伪指指令令来来改改变变其其值值,其其值值在在整整个个程程序序中中是是固固定定的的。这这里里“字字符符名名称称”不不同同于于标标号号,因此不加冒号。因此不加冒号。例:ORG2000HBTEQUR3DATAEQU30HDELAYEQU1050HMOVR0,DATA;R0(30H)MOVA,BT;A(R3)

10、LCALLDELAY ;调用;调用1050H子程序子程序END(4)、定义字节伪指令定义字节伪指令DB格式格式:标号:标号:DBX1,X2,Xn功能功能:把把右右边边的的Xi(i=1n)依依次次存存放放到到以以左左边边标标号号为为起起始始地地址址的的连连续续的的存存储储单单元元中中。其其中中Xi为为8位位二二进进制制数数据据(或或十十进进制制、十十六六进进制制、表表达达式式、ASCII码码等等多多种种形形式)。式)。例:例:ORG1200HTAB:DB50H,10001100B,100,2*5,-4TAB1:DBD,2,#,ABC例中的字符以例中的字符以ASCII码存入码存入(例例如:如:D、

11、#、ABC)。负数用补码存负数用补码存入(例如:入(例如:-4)。)。TAB的地址的地址1200HTAB1的地址为的地址为1205H(5)(5)、定义字伪指令、定义字伪指令DW格式:格式:标号:标号:DWX1,X2,Xn功能:功能:DW与与DB功功能能相相似似,区区别别在在于于DB定定义义的的是是字字节节,DW定定义义的的是是字字(两两个个字字节节),所所以以Xi是是16位位的的数数据据字字或或标标号号,但但该该标标号号必必须须事先赋值。事先赋值。汇编时一个字数据占用两个连续的存储单元。汇编时一个字数据占用两个连续的存储单元。例:例:ORG1500HDATAEQU3522HADDR:DW345

12、6H,9BH,10DWDATA高字节在前(低地高字节在前(低地址单元)址单元)低字节在后(高地低字节在后(高地址单元)址单元)(6)(6)、定义存储空间伪指令、定义存储空间伪指令DS 格式格式:标号:标号:DS表达式表达式功能:功能:指指示示汇汇编编程程序序从从DS伪伪指指令令的的“标标号号”开开始始,预预留留一一定定数数量量的的存存储储单单元元,以以备备程程序序执执行行时时使使用用。预预留留单单元元数数量量由由DS语语句句中中“表表达达式式”的的值值决决定定,“表表达达式式”可可以以是是数值也可以是数学表达式数值也可以是数学表达式例:例:ORG0300HBASE:DS10DBAB(7 7)定

13、义位地址符号伪指令)定义位地址符号伪指令BIT格式格式:字符名称:字符名称BIT位地址位地址功功能能:把把BIT右右边边的的位位地地址址赋赋给给它它左左边边的的“字字符符名名称称”B1,B2两个字符定两个字符定义成位地址义成位地址01H(即(即20H.1),和),和P2口的口的第第0位。位。例:例:ORG1000HB1BIT01HB2BITP2.0MOVC,B1MOVB2,CEND第三节、汇编语言程序的编辑和汇编1 1、汇编语言源程序的编辑方法、汇编语言源程序的编辑方法 编编编编辑辑辑辑:是是是是指指指指对对对对源源源源程程程程序序序序进进进进行行行行输输输输入入入入、修修修修改改改改、保保保

14、保存存存存等等等等操操操操作作作作,从从从从而而而而正正正正确确确确的的的的将将将将汇汇汇汇编编编编语语语语言言言言源源源源程程程程序序序序输输输输入入入入计计计计算算算算机机机机,建建建建立立立立以以以以 .ASM .ASM .ASM .ASM为扩展名的源程序文件。为扩展名的源程序文件。为扩展名的源程序文件。为扩展名的源程序文件。三步:三步:三步:三步:1)1)1)1)用用用用编辑程序编辑程序编辑程序编辑程序生成以生成以生成以生成以. . . .ASMASMASMASM为扩展名的源程序文件。为扩展名的源程序文件。为扩展名的源程序文件。为扩展名的源程序文件。2)2)2)2)用用用用汇编程序汇编

15、程序汇编程序汇编程序生成目标文件。生成目标文件。生成目标文件。生成目标文件。3)3)3)3)用用用用连连连连接接接接程程程程序序序序把把把把多多多多个个个个目目目目标标标标文文文文件件件件连连连连接接接接在在在在一一一一起起起起,形形形形成成成成一一一一个大的可执行的文件。个大的可执行的文件。个大的可执行的文件。个大的可执行的文件。由由于于单单片片机机本本身身不不具具备备开开发发功功能能,只只能能通通过过微微型型计计算算机机系系统统来来完完成成以以上上功功能能。最最终终还还必必须须借借助助于于开开发发装装置置来来排排除除应应用用系系统统在在设设计计过过程程中中的的硬硬件件故故障障、以以及及目目

16、标标程程序序中中存存在在的的程程序序错错误误。当当目目标标系系统统调调试试成成功功以以后后,再再用用开开发发装装置置把把目目标标程程序序固固化化到到单单片片机机的的内内部部或或外外部部EPROMEPROM芯芯片中。片中。几乎所有的开发装置都带有系统集成软几乎所有的开发装置都带有系统集成软件,其中都包含有相应的编辑程序。件,其中都包含有相应的编辑程序。2 2、汇编语言源程序的汇编步骤、汇编语言源程序的汇编步骤两类汇编方法:人工汇编、机器汇编两类汇编方法:人工汇编、机器汇编(1 1) 人工汇编人工汇编v先先确确定定程程序序在在程程序序存存储储器器的的起起始始地地址址,然然后后按按源源程程序序的的顺

17、顺序序逐逐条条转转换换成成机机器器语语言言代代码码,并并以以字字节节为为单单位位从从起起始始地地址址依依次次排排列列。对对暂暂时时无无法法确确定定其其实实际际值值的的标标号号或或地地址址偏偏移移量量应应预预留留出出位置。位置。v全全部部翻翻译译完完成成后后,再再对对未未确确定定的的标标号号和和地地址址偏偏移移量量进进行行计计算算和和确确定定,正正确确填填入入指指令令预预留留出出的位置中。的位置中。例:对下面源程序进行人工汇编例:对下面源程序进行人工汇编 首先查指令表写出每条指令的指令代码及第一字节的地址首先查指令表写出每条指令的指令代码及第一字节的地址首先查指令表写出每条指令的指令代码及第一字

18、节的地址首先查指令表写出每条指令的指令代码及第一字节的地址 地址地址地址地址指令代码指令代码指令代码指令代码源程序源程序源程序源程序ORG3000HORG3000H3000H3000HD291D291STARTSTART:SETBP1.1SETBP1.13002H3002H753003753003DLDL: MOV30HMOV30H,#03H#03H3005H3005H7531F07531F0DL0DL0:MOV31HMOV31H,#0F0H#0F0H3008H3008HD531D531 rel1rel1DL1DL1:DJNZ31HDJNZ31H,DL1DL1300BH300BHD530D53

19、0 rel2rel2DJNZ30HDJNZ30H,DL0DL0300EH300EHB291B291CPLP1.1CPLP1.13010H3010H空空空空1 1 空空空空2 2 AJMPDLAJMPDLENDEND对空格中的值进行计算对空格中的值进行计算 计算偏移量计算偏移量计算偏移量计算偏移量rel1rel1、rel2rel2已知:偏移量已知:偏移量已知:偏移量已知:偏移量= =目标地址当前目标地址当前目标地址当前目标地址当前PCPC值值值值所以:所以:所以:所以:rel1=3008Hrel1=3008H300BH=-3300BH=-3补码表示:补码表示:补码表示:补码表示:rel1=0FD

20、Hrel1=0FDH同理:同理:同理:同理:rel2=3005Hrel2=3005H300EH=-9300EH=-9补码表示:补码表示:补码表示:补码表示:rel1=0F7Hrel1=0F7H 计算转移地址计算转移地址计算转移地址计算转移地址指令原形:指令原形:指令原形:指令原形:AJMPadd11AJMPadd11,其中,其中,其中,其中add11=a10a9a1a0add11=a10a9a1a0指令代码:指令代码:指令代码:指令代码:a10a9a8a10a9a80000100001 a7a0a7a0已知:已知:已知:已知:DL=3002HDL=3002H,取其低,取其低,取其低,取其低11

21、11位,即位,即位,即位,即add11=add11=000000 00000010B00000010B所以:空所以:空所以:空所以:空1=01H1=01H,空,空,空,空2=02H2=02H分别用求得的数将分别用求得的数将分别用求得的数将分别用求得的数将4 4个空格填好,人工汇编结束个空格填好,人工汇编结束个空格填好,人工汇编结束个空格填好,人工汇编结束 (2 2)机器汇编)机器汇编 机器汇编是由机器执行机器汇编是由机器执行“汇编程序汇编程序”,自动把汇编语言源程序翻译成目标代码。自动把汇编语言源程序翻译成目标代码。机器汇编的原理和人工汇编类似,实际机器汇编的原理和人工汇编类似,实际上是人工汇

22、编的模拟。上是人工汇编的模拟。 3 3、程序存储器的写入方法、程序存储器的写入方法单单片片机机的的应应用用程程序序一一但但调调试试好好后后就就固固化化在在程程序序存存储储器器中中,以以避避免免受受到到破破坏坏。程程序序存存储储器器可可以以在在单单片片机机内内部部(ROM或或EPROM),也也可可在在外外部部(EPROM)。ROM型型的的存存储储器器其其程程序序是是由由厂厂家家固固化化在在芯芯片片内内。而而EPEOM型型的的存存储储器器是是可可编编程程的的,允允许许用用户户自自行行写写入入程序,但必须借助于编程器。程序,但必须借助于编程器。市市面面上上有有各各种种智智能能型型多多功功能能编编程程

23、器器,可可连连接接在在微微机机的的并并行行口口上上,可可对对上上千千种种器器件件进进行行编编程程(即即写写入入)、测测试试、加加密密、逻逻辑辑仿仿真真等等。许许多多编编程程器器支支持持DOS和和Windows98双双平平台台界界面面。此此外外许许多多仿仿真真器器也也专专门门设设置了编程器,专门对置了编程器,专门对EPROM芯片编程。芯片编程。第二节、基本程序设计方法一、程序设计步骤:一、程序设计步骤:1分分析析任任务务:对对任任务务进进行行仔仔细细的的调调查查研研究究,收收集集必必要的现场数据。要的现场数据。2确确定定算算法法:把把控控制制系系统统的的计计算算任任务务或或控控制制对对象象的的物

24、物理理过过程程演演化化为为计计算算机机可可以以处处理理的的形形式式,并并拟拟制制出具体的算法和步骤。出具体的算法和步骤。3绘绘制制程程序序流流程程图图:将将文文字字步步骤骤加加以以图图解解,而而成成为为流流程程图图(又又称称程程序序框框图图)。流流程程图图充充分分地地表表达达了了程程序序的的设设计计思思路路,将将问问题题与与程程序序联联系系起起来来,使使复复杂问题简化和收到提纲挈领的效果杂问题简化和收到提纲挈领的效果。4编编写写汇汇编编语语言言源源程程序序:根根据据流流程程图图编编写写程程序序(用用汇汇编编语语言言指指令令实实现现流流程程图图中中每每一一个个功功能能框框的的要要求求),这这就就

25、是是源源程程序序设设计。计。6上上机机调调试试:必必须须通通过过上上机机调调试试得得到到正正确确的结果,才能认为是正确的程序。的结果,才能认为是正确的程序。v判断程序质量的三个标准:判断程序质量的三个标准:1 1、程序的执行时间短、程序的执行时间短2 2、占用的内存单元数少、占用的内存单元数少3 3、程序的语句行数少、程序的语句行数少程序流程图程序流程图用约定的几何图形、流向线及必要的文用约定的几何图形、流向线及必要的文字说明构成的用以描述程序过程的图形。字说明构成的用以描述程序过程的图形。1 1、端点符号、端点符号2 2、处理符号、处理符号3 3、判断符号、判断符号4 4、调用符号、调用符号

26、5 5、流程线、流程线6 6、连接符号、连接符号二、基本程序设计二、基本程序设计(一)顺序程序(简单程序)(一)顺序程序(简单程序)特点:特点:是一种基本上按指令书写顺序从头至是一种基本上按指令书写顺序从头至尾逐条执行的程序。它是程序设计的基础,也尾逐条执行的程序。它是程序设计的基础,也能解决某些实际问题,或成为复杂程序的某个能解决某些实际问题,或成为复杂程序的某个组成部分。组成部分。例例4 41 1:拆字程序:拆字程序 设内部设内部RAMRAM的的20H单元中存有两位单元中存有两位BCD码,码,请编程把它拆成两段,十位请编程把它拆成两段,十位BCD数存入数存入21H的的低低4位,个位位,个位

27、BCD数存入数存入22H的低的低4位。位。21H,22H单元的高单元的高4位置位置0。 ORG1000HST:MOVR0,#20H;源数据指针;源数据指针MOVR1,#22H;目的数据指针;目的数据指针MOVA,R0;取源数据送;取源数据送AANLA,#0FH;分离出个位;分离出个位BCD数数MOVR1,A;个位;个位BCD数存数存22H单元单元MOVA,R0;重新取数;重新取数ANLA,#0F0H;分离出十位;分离出十位BCD数数SWAPA;十位;十位BCD数换到低数换到低4位位DECR1;调整目的数据指针;调整目的数据指针MOVR1,A ;十位;十位BCD数存数存21H单元单元END(二)

28、(二)分支程序分支程序特点:在实际问题中,从第一条指令一直特点:在实际问题中,从第一条指令一直执行到最后一条指令的顺序程序是不多执行到最后一条指令的顺序程序是不多的。通常需要计算机对某种情况作出判的。通常需要计算机对某种情况作出判断,根据判断结果作出相应的处理,而断,根据判断结果作出相应的处理,而分支程序就充分体现了计算机的这种分分支程序就充分体现了计算机的这种分析判断能力。程序的分支是通过条件转析判断能力。程序的分支是通过条件转移指令实现的,根据判断给出的条件满移指令实现的,根据判断给出的条件满足与否选择程序的不同走向。足与否选择程序的不同走向。例例43:符号函数符号函数X-X-存在片外存在

29、片外ROMROM的的VARVAR单元中单元中Y-Y-存放在片外存放在片外RAMRAM的的DATADATA单元中单元中解:变量解:变量X X以补码存放。先对符号进行判以补码存放。先对符号进行判断。断。若若X X0 0,则令,则令Y=0Y=0;若若X0X0,再判是否小于,再判是否小于0 0,若是则令,若是则令Y= -1Y= -1;不是就令;不是就令Y=1Y=1。流程图:流程图:ORG0100HSTA:MOVDPTR,#VARMOVA,#00HMOVCA,A+DPTR;取数(取数(A)XJZDONE;若若X=0,则转,则转DONEJNBACC.7,PLUS;若若X0,则转,则转PLUSMOVA,#0

30、FFH;若若X0,则(则(A)-1SJMPDONEPLUS:MOVA,#01H;若若X0,则(则(A)1DONE:MOVDPTR,#DATAMOVXDPTR,A;存;存Y值值END例例44:多路分支程序:多路分支程序根根据据R5的的内内容容转转向向相相应应的的处处理理程程序序,设设R5的的内内容容为为0N,对对应应处处理理程程序序的的入入口口地地址址分分别为别为BR0BRN。根据某一输入变量或运算结果的值实现根据某一输入变量或运算结果的值实现多路多路分支分支的程序,若采用条件转移指令逐次比较,的程序,若采用条件转移指令逐次比较,程序的执行速度会很低。通常采用程序的执行速度会很低。通常采用转移指

31、令转移指令表表或或转移地址表转移地址表实现。实现。解解1 1:采采用用转转移移指指令表实现多路分支。令表实现多路分支。先在程序存储器中先在程序存储器中建立一张起始地址建立一张起始地址为为TABTAB的绝对转移的绝对转移指令表,表中连续指令表,表中连续存放存放N N条条AJMPAJMP指令,指令,每条每条AJMPAJMP指令对应指令对应一个分支(占两个一个分支(占两个字节)。字节)。ORG3100HSRA:MOVA,R5;取数(;取数(A)R5RLA;(;(A)(A)*2MOVDPTR,#TAB;TAB转移指令表首地址转移指令表首地址JMPA+DPTR;跳转到;跳转到(A)+DPTR单元单元TA

32、B:AJMPBR0;转分支;转分支0AJMPBR1;转分支;转分支1AJMPBR2;转分支;转分支2AJMPBR3;转分支;转分支3AJMPBRN;转分支;转分支NEND由由于于JMP A+DPTR指指令令转转移移的的范范围围是是以以DPTR为为起起始始的的256个个字字节节空空间间,故故由由AJMP构构成成的的转转移移指指令令表表其其最最大大长长度度不不能能超超过过256个个字字节节,由由于于AJMP指指令令为为两两字字节节指指令令,故故表表中中可可连连续续存存放放128条条AJMP指指令令,实实现现128路路分分支支的的转移。所以转移。所以R5中的中的N=0128。由于由于AJMP指令的转

33、移范围是指令的转移范围是2KB,因此分支,因此分支处理程序的位置受到了限制,必须驻留在与处理程序的位置受到了限制,必须驻留在与AJMP指令同一个指令同一个2KB存储区内。若把转移指存储区内。若把转移指令表中的令表中的AJMP改为改为LJMP指令,则分支处理指令,则分支处理程序可分布在整个程序可分布在整个64KB范围内,但程序中范围内,但程序中N要要进行乘进行乘3处理。处理。解解2 2:采用转移地址表实现多路分支:采用转移地址表实现多路分支 先在程序存储器中建立一张起始地址为先在程序存储器中建立一张起始地址为TABTAB的转移地址表,表中连续存放的转移地址表,表中连续存放N N个处个处理程序的入

34、口地址。根据理程序的入口地址。根据R5R5的内容(即的内容(即分支转移序号乘以分支转移序号乘以2 2),由查表指令),由查表指令MOVCMOVC取出相应分支入口地址送入取出相应分支入口地址送入DPTRDPTR中,中,再执行再执行JMP A+DPTRJMP A+DPTR指令(指令(A A清清0 0)转向)转向相应的处理程序。相应的处理程序。 ORG0300HSTA:MOVA,R5;取分支转移序号;取分支转移序号(A)R5RLA;(;(A)(A)*2MOVR0,A;(;(A)*2后暂存入后暂存入R0MOVDPTR,#TAB;置转移地址表首地址;置转移地址表首地址TABMOVCA,A+DPTR ;取

35、入口地址的高;取入口地址的高8位到位到AXCHA,R0;入口地址的高;入口地址的高8位暂存位暂存R0INCAMOVCA,A+DPTR ;取入口地址的低;取入口地址的低8位到位到AMOVDPL,AMOVDPH,R0;入口地址送;入口地址送DPTRCLRA;(;(A)0JMPA+DPTR;转向处理程序;转向处理程序TAB:DWBR0;转移地址表;转移地址表DWBR1DWBR2DWBRNEND(三)循环程序(三)循环程序 顺序程序中顺序程序中:所有的指令仅被执行一次;所有的指令仅被执行一次;分支程序中分支程序中:有的指令被执行一次,而有的可:有的指令被执行一次,而有的可能一次也未被执行。能一次也未被

36、执行。实际应用中实际应用中:需要反复执行某种操作,而每次需要反复执行某种操作,而每次完成这些操作都是执行同样的程序,只是处理完成这些操作都是执行同样的程序,只是处理的数据不同,这时就可以采用循环程序结构的数据不同,这时就可以采用循环程序结构循环程序:循环程序:使所需程序段自动执行多次,而无使所需程序段自动执行多次,而无须多次写出这段程序,使源程序大大缩短,同须多次写出这段程序,使源程序大大缩短,同时也节省了内存空间,但不能节省执行时间。时也节省了内存空间,但不能节省执行时间。例例45负数求补程序:负数求补程序:外部外部RAM地址地址为为3000H的数据块中有的数据块中有100个补码,要求个补码

37、,要求逐一检查,若为负数则逐一检查,若为负数则取取补后放回,正补后放回,正数则不变。数则不变。编制循环程序的要点:编制循环程序的要点:发现和寻找过程发现和寻找过程中具有重复性和规律性的部分,并分析中具有重复性和规律性的部分,并分析出重复的次数、重复结束的条件等。出重复的次数、重复结束的条件等。解:解:这个任务中规律性的过程是:取数、这个任务中规律性的过程是:取数、判符号、若为负数则判符号、若为负数则取取补补负负数数求求补补程程序序流流程程图图ORG1000HSTART:MOVDPTR,#3000H;置地址指针;置地址指针MOVR7,#64H;置计数初值;置计数初值LOOP1:MOVXA,DPT

38、R;取数;取数JNBACC.7,LOOP2 ;若正数转;若正数转LOOP2CPLAINCA;负数;负数取取补补MOVXDPTR,A;负数;负数取取补后送回补后送回LOOP2:INCDPTR;修改地址指针;修改地址指针DJNZR7,LOOP1;100个数未完继续个数未完继续END循环程序的结构包括四个部分:循环程序的结构包括四个部分:(1)初始化部分初始化部分:为循环做准备。:为循环做准备。(2)处处理理部部分分(循循环环体体部部分分):实实际际数数据据处处理理部部分分,是重复执行的程序段部分,是循环程序的主体。是重复执行的程序段部分,是循环程序的主体。(3)控制部分控制部分:控制循环的进行和结

39、束。两个内容:控制循环的进行和结束。两个内容:1、修改循环参数为下一次循环做准备;、修改循环参数为下一次循环做准备;2、判判断断是是否否满满足足结结束束条条件件,若若不不满满足足则则转转去去继继续续执行循环体部分,满足则退出循环。执行循环体部分,满足则退出循环。(4 4)结束部分:结束部分:存放所得结果,恢复某些工作单元存放所得结果,恢复某些工作单元的初值。的初值。循环程序的循环程序的2 2种组织方式种组织方式两种组织方式的区别两种组织方式的区别1 1、判断循环结束条件的时刻不同:、判断循环结束条件的时刻不同:方式方式1 1:处理部分至少执行一次:处理部分至少执行一次方式方式2 2:处理部分可

40、能一次也不执行:处理部分可能一次也不执行2 2、程序的出口不同:、程序的出口不同:方式方式1 1:程序的出口在最后:程序的出口在最后方式方式2 2:程序出口通常不是在最后:程序出口通常不是在最后例例46发送字符串程序发送字符串程序一串一串ASCII字符存放在以字符存放在以BLOCK开始开始的连续片外的连续片外RAM单元中,以空白字符单元中,以空白字符“0”结尾。要求用串行口发送出去。结尾。要求用串行口发送出去。循环结束条件是通过检查约定的结束循环结束条件是通过检查约定的结束标志标志0来决定继续循环或终止循环。来决定继续循环或终止循环。循环次数不定的情况采用循环次数不定的情况采用方式方式2。发发

41、送送字字符符串串程程序序流流程程图图ORG2000HMOVDPTR,#BLOCK;字符块首地址;字符块首地址LOOP:MOVXA,DPTR;取要发送字符;取要发送字符JZNEXT;0字符转结束字符转结束LOOP1:JNBTI,LOOP1;上个发送完吗?;上个发送完吗?CLRTI;发送完清;发送完清TIMOVSBUF,A;发送字符;发送字符INCDPTR;调整指针下一个;调整指针下一个SJMPLOOPNEXT:RETv循环中包含另一个循环叫循环嵌套循环中包含另一个循环叫循环嵌套(LOOP1:JNBTI,LOOP1)v有多层嵌套时称为多重循环程序有多层嵌套时称为多重循环程序例例47】双重循环实现】

42、双重循环实现1ms延时的程序延时的程序DELAY1:MOVR6,#32;1个机器周期个机器周期DEL2:MOVR7,#7;1个机器周期个机器周期DEL3:NOP;1个机器周期个机器周期NOP;1个机器周期个机器周期DJNZR7,DEL3;2个机器周期个机器周期DJNZR6,DEL2;2个机器周期个机器周期RET;2个机器周期个机器周期延时时间为:延时时间为:1+1+(1+1+2)7+232+2=995个机器周期个机器周期内循环内循环当采用当采用12MHz晶振时,一个机器周期为晶振时,一个机器周期为1us,延时时间为延时时间为995us,与,与1ms比较有比较有5us误差误差(四)位操作程序四)

43、位操作程序 通过位处理器和位处理指令可进行随机逻通过位处理器和位处理指令可进行随机逻辑运算和设计,可实现复杂的逻辑操作。辑运算和设计,可实现复杂的逻辑操作。例例48:编制程序实现下面逻辑表达式的功能:编制程序实现下面逻辑表达式的功能X0X7从并行口从并行口P0输入,输入,Y信号从信号从P1.7输出。输出。解:先计算三项的逻辑式,三项的结果相或解:先计算三项的逻辑式,三项的结果相或为为Y,因此只要这三项中有一个结果为,因此只要这三项中有一个结果为1,则,则Y就等于就等于1。程程序序流流程程图图ORG2000HSTART:MOVA,P0;输入;输入8位信号位信号MOVC,ACC.0ANLC,ACC

44、.1ANLC,ACC.2MOV00H,C;(;(00H)X0X1X2MOVC,ACC.2ANLC,ACC.3;(;(C)X2X3ORLC,00HCPLCJCOUT;(;(C)=1,转输出,转输出MOVC,ACC.1ANLC,/ACC.2ANLC,ACC.3;JCOUT;(C)=1,转输出,转输出MOVC,ACC.4CPLCANLC,ACC.5ANLC,/ACC.6ANLC,/ACC.7;OUT:MOVP1.7,C;(;(P1.7)最终结果最终结果SJMP$(五)子程序五)子程序子子子子程程程程序序序序已已已已成成成成为为为为计计计计算算算算机机机机的的的的一一一一种种种种软软软软件件件件资资资

45、资源源源源。常常常常将将将将子子子子程程程程序序序序构构构构成成成成子子子子程程程程序序序序库库库库,集集集集中中中中放放放放在在在在某某某某一一一一存存存存储储储储空空空空间间间间,主主主主程程程程序序序序可可可可随随随随时时时时调调调调用用用用。子子子子程程程程序序序序的的的的引引引引入入入入大大大大大大大大简简简简化化化化了了了了主主主主程程程程序序序序的的的的结结结结构构构构,节节节节省省省省了了了了存存存存储储储储空空空空间间间间,缩缩缩缩短短短短了了了了程程程程序序序序设设设设计时间。计时间。计时间。计时间。子程序要为所有调用程序共享,在结构上应具子程序要为所有调用程序共享,在结构

46、上应具有通用性和独立性,编写时应注意以下几点。有通用性和独立性,编写时应注意以下几点。(1)有有子子程程序序名名以以备备调调用用。通通常常以以子子程程序序的的第第一一条条指指令令的的标标号号作作为为子子程程序序名名,这这个个标标号号最最好好有有一一定定含含义义,以便一看就一目了然。以便一看就一目了然。(2)子程序末尾要安排一条)子程序末尾要安排一条RET返回指令。返回指令。(3)保保护护现现场场与与恢恢复复现现场场。主主程程序序调调用用子子程程序序之之前前所所使使用用的的各各寄寄存存器器的的内内容容称称为为现现场场,通通常常在在子子程程序序开开头头和和末末尾尾(RET指指令令前前)安安排排一一

47、些些入入栈栈和和出出栈栈指指令令来来保保护护和和恢恢复复现现场场。而而主主程程序序的的断断点点地地址址,通通过过调调用用指指令令和返回指令能自动保护和恢复,无须用户安排。和返回指令能自动保护和恢复,无须用户安排。(4)子子程程序序要要有有可可浮浮动动性性。所所谓谓可可浮浮动动性性就就是是子子程程序序可可以以放放在在存存储储器器的的任任何何地地方方并并能能为为主主程程序序调调用用。为为此此子子程程序序中中必必须须使使用用相相对对转转移移指指令令而而不不用用其其它它转转移移指指令令,以以便便汇汇编编时时生生成成浮浮动动代代码码。此此外外,尽尽量量使使用用寄寄存存器器和和堆堆栈栈作作数数据据暂暂存存

48、器器使使用用,而而避避免免使使用用固固定存储单元作数据暂存器。定存储单元作数据暂存器。(5)参参数数传传递递(子子程程序序参参数数分分为为入入口口参参数数和和出出口口参参数数两两类类)。因因为为子子程程序序是是主主程程序序的的一一部部分分,子子程程序序被被调调用用之之前前,主主程程序序应应先先把把有有关关参参数数(即即入入口口参参数数)送送到到某某些些约约定定的的位位置置,子子程程序序在在运运行行时时可可从从约约定定的的位位置置得得到到有有关关参参数数。同同样样,子子程程序序结结束束前前也也应应该该把把运运算算结结果果(出出口口参参数数)送送到到约约定定的的位位置置,返返回回主主程程序序后后,

49、主主程程序序可可从从约约定定位位置置上上获获得得结结果果,这这就就是是参参数数传传递递。8051单单片片机机常常用用工工作作寄寄存存器器、累累加加器器、地地址寄存器、堆栈等来传数。址寄存器、堆栈等来传数。例例411用指针寄存器来传递参数用指针寄存器来传递参数。当数据放在存储器中,且量比较大时,可用当数据放在存储器中,且量比较大时,可用指针来指示数据的位置,可节省传递数据的指针来指示数据的位置,可节省传递数据的工作量。工作量。l参数放在片内参数放在片内RAM时,用时,用R0或或R1作指针;作指针;l参数在外部参数在外部RAM或程序存储器时,用或程序存储器时,用DPTR作指作指针。针。试编写试编写

50、6 6位位BCDBCD码的加法程序。设被加数放在码的加法程序。设被加数放在片内片内RAM 40HRAM 40H42H42H单元,加数放在单元,加数放在50H50H52H52H单元,和放入单元,和放入40H40H42H42H中。(注:低位在低中。(注:低位在低地址)地址) 解:解:主程序通过指针寄存器主程序通过指针寄存器R0和和R1将将参加运算的参加运算的BCDBCD码的地址码的地址传递给子程序传递给子程序子程序通过指针寄存器子程序通过指针寄存器R0将将结果的地址结果的地址传递传递给主程序。给主程序。l入口参数:(入口参数:(R0)、()、(R1)分别指向被加数和)分别指向被加数和加数的低字节加

51、数的低字节l出口参数:(出口参数:(R0)指向结果的高字节)指向结果的高字节42H52H主程序:完成入口参数的传递和子程主程序:完成入口参数的传递和子程序的调用。序的调用。ORG0100HSTAR:MOVR0,#40H;被加数低字节地址送被加数低字节地址送R0MOVR1,#50H;加数低字节地址送加数低字节地址送R1ACALLBADD;调调6位位BCD码的加法子程序码的加法子程序子程序子程序BADD:MOVR7,#3;6位位BCD码占码占3字节字节CLRC;低字节相加时,进位位清;低字节相加时,进位位清0LOOP:MOVA,R0 ;取被加数字节;取被加数字节ADDCA,R1 ;取加数字节并加到

52、;取加数字节并加到ADAA;BCD码调整码调整MOVR0,A ;保存相加的和;保存相加的和INCR0;修改被加数指针;修改被加数指针INCR1;修改加数指针;修改加数指针DJNZR7,LOOP;未完继续;未完继续DECR0;使;使R0指向结果的高字节指向结果的高字节RETEND(六)中断服务程序与堆栈操作六)中断服务程序与堆栈操作主程序主程序( 1) 起起 始始 地地 址址 : ( PC) =0000H, 而而 从从0003H002BH分分别别为为各各中中断断源源的的入入口口地地址址,编编程程时时应应在在0000H处处安安排排一一条条长长跳跳转转指指令令,使使CPU执执行行程程序序时时可可从从

53、0000H跳跳过过各各中中断断源源的的入入口口地地址址,然然后后从从跳跳转转的的目目的的地地址址开开始始执执行主程序。行主程序。2 2)初始化:对将要用到的单片机内部部件或)初始化:对将要用到的单片机内部部件或扩充部件进行初始工作状态的设定。扩充部件进行初始工作状态的设定。中断服务程序中断服务程序1 1)起始地址起始地址: 0003H002BH为各中断源的入口,为各中断源的入口,5个中断源的入口地址相距很近(个中断源的入口地址相距很近(8个字节),若中断个字节),若中断服务程序的指令代码少于服务程序的指令代码少于8个字节,则可直接从入口个字节,则可直接从入口地址开始编写;若大于地址开始编写;若

54、大于8个字节,在相应的入口处安个字节,在相应的入口处安排一条跳转指令。排一条跳转指令。(2)中断服务程序编制中的注意事项)中断服务程序编制中的注意事项:视需要确定是否保护现场。视需要确定是否保护现场。时时清清除除那那些些不不能能被被硬硬件件自自动动清清除除的的中中断断请请求求标标志志,以免产生误中断。以免产生误中断。中中断断服服务务程程序序中中的的压压栈栈PUSHPUSH与与弹弹出出POPPOP指指令令必必须须成成对使用,以确保中断服务程序的正确返回。对使用,以确保中断服务程序的正确返回。主主程程序序与与中中断断服服务务程程序序之之间间的的参参数数传传递递类类似似主主程程序序与子程序之间的参数

55、传递。与子程序之间的参数传递。(七)应用程序举例七)应用程序举例1.定时器:定时器:首先初始化编程,步骤:首先初始化编程,步骤:(1)设置设置TMOD:根据功能要求、工作方式:根据功能要求、工作方式及运行工作方式设置。及运行工作方式设置。(2)设计数初值设计数初值TH、TL:根据定时时间或计:根据定时时间或计数要求设置。数要求设置。(3)若使用中断系统则设置中断控制寄存器若使用中断系统则设置中断控制寄存器IE、IP和和TCON。(4)启动定时器工作。启动定时器工作。例例414计算定时计算定时/计数器计数器T0工作于方式工作于方式0、1、2时的最大定时时间,设时钟频率时的最大定时时间,设时钟频率

56、fosc=6MHz分析:因为是加分析:因为是加1计数,故当定时时间最大时,计数,故当定时时间最大时,初始值初始值a=0。解:设最大定时时间为解:设最大定时时间为T(1)方式方式0,加,加1计数器为计数器为13位,位,T=21312/6MHz=16.384ms(2)方式方式1,加,加1计数器为计数器为16位,位,T=21612/6MHz=131.072ms(3)方式方式2,加,加1计数器为计数器为8位,位,T=2812/6MHz=512us【例【例415】利用定时器】利用定时器T0,在,在P1.7引脚上引脚上输出周期为输出周期为100ms的连续方波。设的连续方波。设fosc=6MHz。分析:周期

57、分析:周期100ms的方波,应输出的方波,应输出50ms高电平和高电平和50ms低电平,即低电平,即T0工作在定时方式工作在定时方式1,定时时间,定时时间50ms,每当定时时间到,使,每当定时时间到,使P1.7的输出逻辑取反。的输出逻辑取反。(1)计算计数初值计算计数初值a:(:(216a)12/6MHz=50msa=21650000/2=40536=9E58H(2)初值装入初值装入TH0和和TL0:(TH0)=9EH,(TL0)=58H(3)写方式控制字:写方式控制字:M1M0=01,GATE=0,C/T=0,所以方式控制字所以方式控制字TMOD=01H当当T0定时定时50ms时间到,时间到

58、,TF0=1,若采用查询方式,则,若采用查询方式,则用软件查询用软件查询TF0;若采用中断方式,则用;若采用中断方式,则用TF0请求中请求中断。断。解解1:软件查询方法:软件查询方法ORG0000HLJMPMAIN;上电,转向主程序;上电,转向主程序 ORG1000H;主程序;主程序MAIN:MOVTMOD,#01H;设;设T0工作于方式工作于方式1SETBTR0;启动定时器;启动定时器T0LOOP:MOVTH0,#9EH;装计数初值高;装计数初值高8位位MOVTL0,#58H;装入计数初值低;装入计数初值低8位位JNBTF0,$;计满溢出位;计满溢出位TF0是否为是否为1CLRTF0 ;清;

59、清TF0CPLP1.7 ;将;将P1.7取反,输出取反,输出SJMPLOOPEND解解2:中断方法:中断方法ORG0000HLJMPSTART;上电,转向主程序;上电,转向主程序ORG000BH;T0的中断入口地址的中断入口地址AJMPSERVE;转向中断服务程序;转向中断服务程序主程序主程序ORG1000H;START:MOVTMOD,#01H;T0工作方式工作方式1LOOP:MOVTH0,#9EH;初值高初值高8位位MOVTL0,#58H;初值低初值低8位位SETBEA ;CPU开中断开中断SETBET0;T0开中断开中断SETBTR0;启动定时器;启动定时器T0工作工作HERE:AJMPHERE;定时时间到中断;定时时间到中断中断服务程序中断服务程序ORG2000H;SERVE:MOVTH0,#9EH;重重装装计计数数初值高初值高8位位MOVTL0,#58H;重重装装计计数数初值低初值低8位位CPLP1.7;P1.7取反,输出取反,输出RETI;中断返回;中断返回END

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号