版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章汇编语言程序设计§4.0绪§4.1汇编语言源程序格式§4.2汇编语言源程序的编辑和汇编精选课件§4.0绪评价程序质量的标准程序的执行时间;程序所占用的内存字节数目;程序的逻辑性、可读性;程序的兼容性、可扩展性;程序的可靠性精选课件§4.0绪采用汇编语言的优点占用内存单元和CPU资源少;程序简短、执行速度快;可直接调动计算机的全部资源,并可以有效利用计算机的专有特性;能准确地掌握指令的执行时间,适用于实时控制精选课件§4.1汇编语言源程序格式
§4.1.1编程的步骤§4.1.2汇编语言源程序格式
§4.1.3伪指令
§4.1.4编程的方法和技巧§4.1.5汇编语言程序的基本结构精选课件§4.1.1编程的步骤一、分析问题二、确定算法三、画程序流程图四、编写程序精选课件根据问题要实现的目标:
首先设计硬件电路。然后再根据具体的硬件环境进行程序设计。精选课件一、分析问题对需要解决的问题进行分析,以求对问题正确的理解。如:解决问题的任务是什么?工作过程是什么?现有的条件,已知数据,对运算的精度
和速度方面的要求?设计的硬件结构是否方便编程?精选课件在编程以前,先要对几种不同的算法进行分析、比较,找出最适宜的算法二、确定算法精选课件三、画程序流程图程序流程图是使用各种图形、符号、有向线段等来说明程序设计过程的一种直观的表示。流程图步骤分得越细致,编写程序是也越方便。画流程图是程序结构设计是采用的一种重要手段。一个系统软件有总的流程图(主程序框图)和局部的流程图。精选课件椭圆框或桶形框:表示程序的开始或结束。矩形框:表示要进行的工作。菱形框:表示要判断的事情,菱形框内的表达式表示要判断的内容。流程图常采用的图形和符号。精选课件圆圈:表示连接点指向线:表示程序的流向流程图常采用的图形和符号。精选课件四、编写程序精选课件汇编语言编写的源程序行(一条语句)包括四
个部分,也叫4个字段。这四个字段是:
[标号:]<操作码>[操作数][;注释]
每个字段之间要用分隔符分隔,而每个字段
内部不能使用分隔符。§4.1.2汇编语言源程序格式
精选课件可以用作分隔符的符号有:
空格“”
冒号“:”
逗号“,”
分号“;”
例如,
LOOPl:MOVA,#00H
;立即数00H送A§4.1.2汇编语言源程序格式
精选课件标号是用户定义的符号地址。一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。标号由以英文字母开始的1~8个字母或数
字串组成,以冒号":"结尾。标号可以由赋值伪指令赋值。§4.1.2汇编语言源程序格式
⑴标号精选课件如果标号没有赋值,汇编程序就把存放该指令目标码第一字节的存储单元的地址赋给该标号,所以,标号又叫指令标号。注意:系统中保留使用的关键字不能用
作标号。§4.1.2汇编语言源程序格式
⑴标号精选课件对于一条汇编语言指令,这个字段是必不
可少的,它用一组字母符号表示指令的操作码。89C51中,它由指令系统助记符组成。
§4.1.2汇编语言源程序格式
⑵操作码精选课件汇编语言指令可能要求或不要求操作数。
若有两个操作数,操作数之间应用逗号分开操作数字段的内容是复杂多样的,
它可能包括下列诸项:①工作寄存器名②特殊功能寄存器名③标号④常数⑤$⑥表达式§4.1.2汇编语言源程序格式
⑶操作数精选课件⑶操作数:①工作寄存器名由PSW.3和PSW.4规定的当前工作寄存器区中的R0~R7都可以出现在操作数字段中。MOVA,R4MOVA,@R0精选课件⑶操作数:②特殊功能寄存器名89C51中的21个特殊功能寄存器的名字都可以作为操作数使用。MOVA,P1MOVTMOD,#01HSETBET0精选课件可以在操作数字段中引用的标号名包括:赋值标号由汇编命令EQU等赋值的标号可以作为
操作数。指令标号指令标号虽未给赋值,但这条指令的第一
字节地址就是这个标号的值,在以后指令操作数字段中可以引用。
⑶操作数:③标号名精选课件LOOP:MOVA,R2……LJMPLOOP
⑶操作数:③标号名精选课件汇编语言指令允许以各种数制表示常数,常数可以写成二进制、十进制或十六进制。常数总是要以一个数字开头若十六进制的
第一个数为A~F字符,前面要加零,数字后要直接跟一个表明数制的字母,B二
进制,H十六进制。
⑶操作数:④常数精选课件MOVA,#00000111BMOVA,#07HMOVA,#07MOVA,#0FDH⑶操作数:④常数精选课件“$”,用来表示程序计数器的当前值。这个符号最常出现在转移指令中,
JNBTF0,$
表示若TF0为零仍执行该指令,否则往下执行,它等效于
$:JNBTF0,$⑶操作数:⑤$精选课件汇编程序允许把表达式作为操作数使用。在汇编时,计算出表达式的值;
并把该值填入目标码中。例如,
MOVA,SUM+l⑶操作数:⑥表达式精选课件⑷注释注释字段不是汇编语言的功能部分,只是用
于增加程序的可读性。注释是汇编语言程序编写中的重要组成部分以“;”隔开。§4.1.2汇编语言源程序格式
精选课件例:LOOP:MOVA,#00H;立即数00H→A精选课件伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序,只是用来对汇编过程进行某种控制。§4.1.3伪指令
精选课件§4.1.3伪指令
ORGENDEQUDATADBDWDSBIT精选课件ORG汇编起始命令格式:ORG16位地址功能:规定该伪指令后面程序的汇编地址,
即汇编后生成目标程序存放的起始地址。
例如:
精选课件ORG汇编起始命令例如:ORG2000HSTART:MOVA,#64H┇规定了START的地址是2000H,
又规定了汇编后的第一条指令码从2000H开始存放。精选课件END汇编结束指令格式:END功能:通知汇编程序结束汇编。
在END之后所有的汇编指令均不予以处理。精选课件EQU赋值命令格式:
字符名称EQU项(数或汇编符号)功能:把“项”赋给“字符名称”。注意:字符名称不等于标号(其后没有冒号);其中的项,可以是数,也可以是汇编符号。EQU赋值过的符号名可以用作数据、代码地址、位地址或一个立即数。可以是8位的,也可以是16位的。例如:精选课件EQU赋值命令例1:AAEQUR1MOVA,AA;AA代表工作寄存器R1精选课件EQU赋值命令例2:A10EQU10DELYEQU07EBHMOVA,A10;
A10作为片内的一个直接地址LCALLDELY;DELY作为一个16位子程序的入口地址精选课件DATA数据地址赋值命令格式:字符名称DATA表达式功能:与EQU类似,但有以下差别:EQU定义的字符名必须先定义后使用,而DATA定义的字符名可以后定义先使用。用EQU伪指令可以把一个汇编符号赋给一个名字,而DATA只能把数据赋给字符名。精选课件DATA数据地址赋值命令3、DATA语句可以把一个表达式的值赋给字符名称,其中的表达式应是可求值的。DATA伪指令在程序中用来定义数据地址精选课件DB定义字节命令格式:DB(项或项表)功能:通知汇编程序从当前ROM地址开始,保留一个字节或字节串的存储单元,并存入DB后的数据。注意:项或项表可以是一个字节,用逗号隔开的字节串或括在单引号中的ASCII字符串。例如:精选课件DB定义字节命令
ORG2000HDB0A3HLIST:DB26H,03HSTR:DB‘ABC’┇经汇编后(2000H)=A3H,(2001H)=26H,(2002H)=03H,(2003H)=41H,(2004H)=42H,(2005H)=43H,
(41H,42H,
43H分别为A,B,
C的ASCII码)精选课件DW定义字命令格式:DW16位数据项或项表功能:把DW后的16位数据项或项表从当前地址连续存放。每项数值为16位二进制数,高8位先放,低8位后存放。DW用于定义一个地址表。例如:精选课件DW定义字命令
ORG1500HTABLE:DW7234H,8AH,10H┇经汇编后(1500H)=72H,(1501H)=34H,(1502H)=00H,(1503H)=8AH,(1504H)=00H,(1505H)=10H,精选课件DS定义存储空间命令格式:DS表达式功能:在汇编时,从指定地址开始保留DS之后表达式的值所规定的存储单元以备后用。例如:精选课件DS定义存储空间命令ORG1000HDS08HDB30H,8AH
汇编后,
从1000H保留8个单元,
从1008H按DB命令给内存赋值,
即(1008H)=30H(1009H)=8AH精选课件BIT位地址符号命令格式:字符名BIT位地址功能:把BIT后的位地址值赋给字符名。其中字符名不是标号,其后没有冒号,但字符名是必须的。精选课件BIT位地址符号命令例如:A1BITP1.0A2BIT02H汇编后,P1口第0位的位地址90H就赋给了A1,而A2的值则为02H。精选课件§4.1.4编程的方法和技巧一、模块化的程序设计方法二、编程技巧精选课件一、模块化的程序设计方法1、程序功能模块化的优点2、划分模块的原则精选课件1、程序功能模块化的优点单个模块结构的程序功能单一,易于编写、调试和修改。便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。程序可读性好,便于功能扩充和版本升级。对程序的修改可局部进行,其它部分可以保持不变。对于使用频繁的子程序可以建立子程序库,便于多个模块调用。精选课件2、划分模块的原则每个模块应具有独立的功能,能产生一个明确的结果,即单模块的功能高内聚性。模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、交换量的多少及交换频繁程度。模块长度适中。20条~100条的范围较合适。精选课件二、编程技巧1、尽量采用循环结构和子程序。2、尽量少用无条件转移指令。3、对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。精选课件二、编程技巧4、在中断处理程序中,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。5、用累加器传递入口参数或返回参数比较方便,在子程序中,一般不必把累加器内容压入堆栈。精选课件§4.1.5汇编语言程序的基本结构一、顺序程序二、分支程序三、循环程序精选课件语句3语句2顺序结构
入口语句1出口分支结构入口条件满足否?
分支1出口YN
分支2循环结构入口
处理
修改条件条件满足否?Y出口N精选课件一、顺序程序顺序程序是最简单的程序结构,即顺序结构。程序按顺序一条一条地执行指令。精选课件例1
双字节加法。被加数地址:addr2,addr1.
加数地址:addr4,addr3.和在:addr2,addr1中.MOVR0,#addr1MOVR1,#addr3MOVA,@R0ADDA,@R1MOV@R0,A;和的低字节INCR0INCR1MOVA,@R0ADDCA,@R1MOV@R0,A;和的高字节精选课件例2、双字节求补子程序CPLD
算法:正数不变,负数取反+1
解:
入口参数:(R7R6)=待求补码的16位负数
出口参数:(R7R6)=求补后的16位数CPLD: MOV A,R6
CPL A ;取反
ADD A,#1
MOV R6,A
MOV A,R7
CPL A
ADDC A,#0
MOV R7,A
RET精选课件例3
拆字。将片内RAM20H单元的内容拆成两段,每段四位。并将它们分别存入21H与22H单元中。程序如下:ORG2000HSTART:MOVR0,#21HMOVA,20HANLA,#0FHMOV@R0,AINCR0MOVA,20HSWAPAANLA,0FHMOV@R0,A精选课件二、分支程序程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断、满足条件则进行程序转移,不满足条件就顺序执行程序。分支程序又分为单分支和多分支结构。多分支程序是首先把分支程序按序号排列,然后按序号值进行转移。精选课件程序分支判断条件在MCS-51指令系统中,通过条件判断实现单分支程序转移的指令有:JZ、JNZ、CJNE、DJNZ等此外还有以位状态作为条件进行程序分支的指令如:JC、JNC、JB、JNB、JBC等使用这些指令可以完成0、1、正、负,以及相等、不相等作为各种条件判断依据的程序转移精选课件简单分支程序例1(2Path.asm)设内部RAM30H,31H单元中存放两个无符号数,试比较它们的大小,将较小的数存放在30H单元,较大的数存放在31H单元解这是个简单分支程序,可以使用两数相减,若CY=1,则被减数小于减数,采用JC指令进行判断,程序流程图和程序如下:精选课件简单分支程序例1精选课件例2(3Path.asm)设变量X存入30H单元,求得函数Y存入31H单元。按下式计算Y的值
X+1 (X>10)Y=0 (10>=X>=5)X-1 (X<5)解
要根据X的大小来决定Y值,在判断X<5和X>10时,采用CJNE和JC以及CJNE和JNC指令进行判断。程序流程图和代码多重分支程序精选课件多重分支程序精选课件
ORG100HSTART:MOV A,30H ;取X CJNEA,#5,NEXT1 ;与5比较NEXT1:JC NEXT2 ;X<5,则转next2 MOV R0,A ;X>=5 INC R0 ;假设X>10,Y=X+1
CJNE
A,#11,NEXT3
;与11比较NEXT3:JNC NEXT4
;X>10,转NEXT4
MOV R0,#0
;10>=X>=5,Y=0
SJMP
NEXT4NEXT2:MOV R0,A
DEC R0
;X<5.Y=X-1NEXT4:MOV 31H,R0
;存结果
END多路分支程序精选课件例3:128种分支转移程序。功能:根据入口条件转移到128个目的地址。入口:(R3)=转移目的地址的序号00H~7FH。出口:转移到相应子程序入口。128个子程序首址JMP_128:MOVA,R3RLAMOVDPTR,#JMPTABJMP@A+DPTRJMPTAB:AJMPROUT00AJMPROUT01┇┇AJMPROUT7F精选课件说明:此程序要求128个转移目的地址(ROUT00~ROUT7FH)必须驻留在与绝对转移指令AJMP相同的一个2KB存储区内。RL指令对变址部分乘以2,因为每条AJMP指令占两个字节。精选课件分支程序结构散转指令转向0分支转向1分支转向n-1分支转向n分支K=0K=1K=n-1K=n┅┅┅精选课件三、循环程序在程序运行时,有时需要连续重复执行某段程序,可以使用循环程序。其结构包括四部分:
1、置循环初值2、循环体(循环工作部分)3、修改控制变量4、循环控制部分精选课件置初值循环体循环修改循环控制退出循环未完完(a)置初值循环体循环修改循环控制退出循环未完完(b)图循环组织方式流程图精选课件1、置循环初值对于循环程序中所使用的工作单元,在循环开始时应置初值。例如,工作寄存器设置计数初值,累加器A清0,以及设置地址指针、长度等。精选课件2、循环体(循环工作部分)重复执行的程序段部分,分为循环工作部分和循环控制部分。循环控制部分每循环一次,检查结束条件,当满足条件时,就停止循环,往下继续执行其他程序精选课件3、修改控制变量在循环程序中,必须给出循环结束条件。常见的是计数循环,当循环了一定的次数后,就停止循环。在单片机中,一般用一个工作寄存器Rn作为计数器,对该计数器赋初值作为循环次数。每循环一次,计数器的值减1,即修改循环控制变量,当计数器的置件为0时,就停止循环。精选课件4、循环控制部分根据循环结束条件,判断是否结束循环。8051可采用DJNZ指令来自动修改控制变量并能结束循环。精选课件例1在内部RAM30H~4FH连续32个单元中存放单字节无符号数。求32个无符号数之和,并存放到RAM51H、50H中解这是重复相加问题。设用R0作加数地址指针,R7作循环次数计数器,R3作总和数高字节寄存器。程序流程图及代码:循环次数已知的程序精选课件精选课件
ORG 0000HSTART:MOVR7,#31 ;R7作循环次数计数
MOV R3,#0;R3作和数高字节寄存器
MOV A,30H ;取第一个被加数
MOV R0,#31H ;R0作加数地址指针LOOP:ADD A,@R0 ;作加法
JNC NEXT ;CY=0,和<256,则转
INC R3 ;CY=1,加到高字节NEXT:INC R0 ;修改R0指针
DJNZ R7,LOOP ;未完,重复加法
MOV 51H,R3 MOV 50H,A ;存和数循环次数已知的程序精选课件例2:设有一带符号的数组存放在8031单片机内部RAM,以20H为首地址的连续单元中,其长度为90,要求找出其中的最大值并将其存放到内部RAM的1FH单元中,试编写相应的程序循环次数已知的程序精选课件NYYA与X符号相同?开始置循环计数器B初值置取数指针R0初值取第一单元内容送A修改R0并取数XA>X?X送A循环计数器计数循环计数器=0?A送结果单元A为正数NNNYY结束(B)=89(R0)=20HMOVA,@R0(R0)+1→R0精选课件SCMPMA:MOVR0,#20HMOVB,#89MOVA,@R0SCLOOP:INCR0MOVR1,AXRLA,@R0JBACC.7,RESLATMOVA,R1CLRCSUBBA,@R0JNBACC.7,SMEXT1CXAHER:MOVA,@R0LJMPSMEXT2RESLAT:XRLA,@R0JNBACC.7,SMEXT2LJMPCXAHERSMEXT1:ADDA,@R0SMEXT2:DJNZB,SCLOOPMOV1FH,A;置取数指针R0初值;置循环计数器B初值;第一个数送A;修改指针;暂存;判两个数符号是否相同;若相异,则转RESLAT;若相同,则恢复A原来值;C清0;两数相减,以判两者大小;若A为大,则转SMEXT1;若A为小,则将大数送入A;A恢复原值;若A为正,则转SMEXT2;若A为负,则转CXAHER;恢复A原值;所有单元都比较过?未比较完,则继续;最大者送1FH单元精选课件例3:设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以20H为首地址的连续单元,该字符串用回车符CR(‘CR’=0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中解:从首单元开始取数,每取一数判断其是否为‘CR’,是则结束循环次数未知的程序示例精选课件
ORG1000HSTADADATA20HSLANGDATA1FHCMCR2:MOVR0,#STADA-1MOVB,#0FFHCRLOP:INCR0INCBMOVXA,@R0CJNEA,#0DH,CRLOPMOVSLANG,BSJMP$END循环次数未知的程序示例精选课件编写循环程序应注意的问题(1)进入循环之前,应合理设置循环初始变量(2)循环体只能执行有限次,如果无限执行的话,称之为死循环,这是应当避免的(3)不能破坏或修改循环体,这里要特别注意避免从循环体外直接跳转到循环体内(4)多种循环的嵌套,应当是以下两种形式错(5)循环体内可以直接转到循环体外或外层循环中,实现一个循环多个条件控制结束的结构(6)对循环体的编程要仔细推敲,合理安排,对其优化时应主要放在缩短执行时间上,其次是程序的长度精选课件冒泡法排序-A设在8031内部RAM中存一无符号数的数组,其长度为100,起始地址是30H,要求将它们从大到小排序,排序后仍存放在原区域中精选课件冒泡法排序共4–1=3次外循环
解:先举四个数排序的例子内RAM第一次外循环第二次外循环第三次外循环30H0003030631H0302060332H0206020233H06000000精选课件这就是所谓的“冒泡法”4个数排序最多经过3次外循环就可排出,每次外循环都包含3次内循环。实际上大多情况不用3次外循环就可排完对于100个数排序也是如此,用不到99次循环,排序就结束为了提高排序速度,程序中可设一交换标志位如10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年江西师范高等专科学校高职单招语文2018-2024历年参考题库频考点含答案解析
- 2025年武汉电力职业技术学院高职单招语文2018-2024历年参考题库频考点含答案解析
- 航空运输合同集锦
- 人工智能算法开发与应用合同
- 幼儿园植树节策划方案2021【五篇】
- 桉树造林工程承包合同书
- 新企业之间借款合同范本
- 采购法务与合同管理1
- 咨询培训服务合同模板
- 校车租赁合同书
- 2025-2030年中国清真食品行业运行状况及投资发展前景预测报告
- 广东省茂名市电白区2024-2025学年七年级上学期期末质量监测生物学试卷(含答案)
- 《教育强国建设规划纲要(2024-2035年)》全文
- 2025年河南洛阳市孟津区引进研究生学历人才50人历年高频重点提升(共500题)附带答案详解
- 临床提高脓毒性休克患者1h集束化措施落实率PDCA品管圈
- 汽车车身密封条设计指南
- 2024建安杯信息通信建设行业安全竞赛题库(试题含答案)
- JBT 14727-2023 滚动轴承 零件黑色氧化处理 技术规范 (正式版)
- 术后谵妄及护理
- 医药行业的市场营销与渠道拓展
- 压力管道安全技术监察规程-工业管道
评论
0/150
提交评论