大学单片机及接口课程 第4章-汇编程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章:汇编语言程序设计本章基本要求:⑴汇编语言的构成⑵源程序的设计与汇编*⑶应用程序设计*4.1汇编语言的构成4.1.1程序设计语言用户要使计算机能完成各式各样的任务,就要设计各种相应的应用程序,而设计程序就要用到程序设计语言。程序设计语言有3种:●机器语言●汇编语言●高级语言。4.1汇编语言的构成表4-1机器语言和汇编语言的形式地址机器语言形式汇编语言形式二进制形式十六进制形式2000H0111010000000101B7405HSTART:MOVA,#05H2002H0020010000001010B240AHADDA,#0AH2004H1111010100100000BF520HMOV20H,A2006H1000000011111110B80FEHSJMP$机器语言中二进制形式不便记忆,常采用十六进制形式记忆4.1汇编语言的构成在Keil调试环境下反汇编程序1、汇编源程序:2、反汇编程序:地址机器码反汇编程序汇编源程序4.1汇编语言的构成1、机器语言计算机能直接识别和执行的二进制代码形式的指令称为机器指令,而该类指令的集合称为计算机的机器语言,或称指令系统。机器语言是面向计算机系统的。由于各种计算机内部结构,线路的不同,每种计算机系统都有它自己的机器语言,即使执行同一操作,其指令也不相同。4.1汇编语言的构成2、汇编语言计算机所能执行的每条指令都对应一组二进制代码。为了容易理解和记忆计算机的指令,人们用一些英语的单词和字符以及数字作为助记符来描述每一条指令的功能。用助记符描述的指令系统,称为机器的汇编语言系统,简称汇编语言。汇编语言也是面向机器的,每种计算机系统也都有它自己的汇编语言,用汇编语言编写的程序,称为汇编语言源程序或汇编源程序。4.1汇编语言的构成3、高级语言高级语言(如:PASCAL、C、FORTRAN、BASIC等)克服了汇编语言的缺点,是一种面向问题或过程的语言。它是一种接近于自然语言和数学算法的语言,与机器的硬件无关,用户编程时不必仔细了解所用计算机的具体性能和指令系统。高级语言不但直观、易学、易懂,而且通用性强,可以在不同的计算机上运行,因此可移植性好。4.1汇编语言的构成4.1.2汇编语言格式MCS—51系列单片机是用51系列单片机的指令系统来编程的,其汇编语言的语句格式,也就是单片机的指令格式,即:[标号:]操作码[操作数][;注释]说明:1、[]内的部分为可选项;2、标号是一条指令在存储器存放的地址,是以字母开头的字母数字串,不可以是保留字;3、操作码和操作数必须按照指令格式书写;4.1汇编语言的构成举例:ORG0060HSTART:MOVA,#00H;A←0MOVR2,#0AH;R2←10MOVR1,#03H;R1←3LOOP:ADDA,R1;A←A+R1DJNZR2,LOOP;若R2-1≠0,则跳到LOOPNOPSJMP$END4.1汇编语言的构成4、操作数可以写成以下形式(5种-128页):①二进制、十进制、十六进制形式②工作寄存器、特殊功能寄存器③地址标号④带加减算符的表达式⑤采用$符4.1汇编语言的构成举例:MOVA,#00110101B;A←53MOVA,#20D;A←20MOVA,#20;A←20MOVR0,#20H;R0←20HMOVR1,#0BFH;R1←BFHSJMP$;原地跳转MOVR7,R2;R7←R2MOVA,LABLE;A←标号地址MOVA,LABLE+1;A←标号地址+14.1汇编语言的构成4.1.3汇编语言构成汇编语言语句分为:指令性语句、指示性语句两类。1、指令性语句包括指令系统中的全部指令,每条指令有对应的机器代码,并可由CPU执行。2、指示性语句在汇编源程序的过程中,还有一些指令不要求CPU进行任何操作,也没有对应的机器码,不影响程序的执行,仅仅是能够指导汇编进行处理的一些指令,称之为伪指令。4.1汇编语言的构成伪指令的主要功能是:用来指定程序或数据的起始位置,给出一些连续存放数据的确定地址,或为中间运算结果保留一部分存储空间以及表示源程序结束等等。不同版本的汇编语言,伪指令的符号和含义可能有所不同,但是基本用法是相似的。下面介绍几种常用的基本伪指令。MCS-51单片机伪指令伪指令仅在汇编过程中起控制作用不产生可执行目标代码,又称为软指令1、起点指令ORG格式:ORG××××H(16位地址或标号)功能:给程序起始地址或数据块的起始地址赋值例:用法:一般出现在每段源程序或数据块的开始一个源程序可多次出现ORG指令ORG2000HSTART:MOVA,#64H┇;源程序的起始地址为2000H首地址首地址2、结束命令END格式:END功能:汇编程序结束标志附在一个源程序的结尾一个源程序只能出现一次END指令用法:MCS-51单片机伪指令3、等值命令EQU格式:字符名称EQU数据或汇编符号功能:将一个数据或汇编符号赋予标号段规定的字符名称例:ORG8000HAAEQUR6MOVA,AA;AA与R6等值;A(R6)MCS-51单片机伪指令例:A10EQU10DELYEQU07EBHMOVA,A10LCALLDELY;A10=10;DELY=07EBH;转向入口地址07EBH使用EQU指令,须先赋值后使用,不能反之4、数据地址赋值等值命令DATA格式:字符名称DATA数据或表达式功能:此命令把数据/代码地址赋予标号段所规定的字符名称。定义的字符名称可先使用后定义INDEXJDATA8096HORG8000HINDEXJDATA8096HLJMPINDEXJENDORG8000HLJMP8096HEND;INDEXJ这个字符名称的地址为8096H例:等价于MCS-51单片机伪指令EQU与DATA的区别(1)DATA与EQU相似,但DATA定义的字符名称,可先使用后定义,EQU则不能(2)EQU指令可把汇编符号赋给字符名称,DATA则不能(3)DATA可把表达式的值赋给字符名称,EQU则不能DATA常在程序中定义数据地址EQU常在程序中定义字符数据MCS-51单片机伪指令5、定义字节命令DB格式:功能:标号:DB字节常数或字符串(8位)定义字节的内容,汇编程序把DB定义的字节依次存入标号开始的存储单元有定义的内存单元地址项或项表例:ORG8000HTAB:DB45H,73,‘5’,‘A’TAB1:DB101B伪指令ORG定义了TAB的起始地址为8000H,伪指令DB定义了8000H~8003单元的内容依次为:(8000H)=45H(8001H)=49H(8002H)=35H(8003H)=41H(8004H)=05HTABTAB1(1)由ORG定义(2)跟在其他源程序之后6、定义字命令DW格式:功能:标号:DW字或字表定义若干个字(双字节)例:ORG8000HTAB:DW7234H,8AH,10(8000H)=72H(8001H)=34H(8002H)=00H(8003H)=8AH(8005H)=0AH汇编后:(8004H)=00HMCS-51单片机伪指令7、定义空间命令DS格式:功能:标号:DS数据或字符及表达式例:(8008H)=30H(8009H)=8AH从指定单元地址开始,由数据或字符及表达式的值来定义应保留的单元数,备用ORG8000HDS08HDB30H,8AH即:8000H~8007H单元保留备用定义空间MCS-51单片机伪指令8、位地址符号命令BIT格式:字符名称BIT位地址功能:把位地址赋予标号段的字符名称A1BITP1.0A2BITP2.0例:;P1.0,P2.0赋予位地址字符名称A1、A2,在编程时可以直接把A1、A2当成位地址使用MCS-51单片机伪指令4.2汇编源程序的设计与汇编4.2.1汇编程序设计步骤1、确定方案和计算方法2、了解应用系统的硬件配置、性能指标。3、建立系统数学模型,确定控制算法和操作步骤。4、画程序流程图,表示程序结构和程序功能。5、编制源程序①合理分配存储器单元和了解I/O接口地址。②按功能设计程序,明确各程序之间的相互关系。③用注释行说明程序,便于阅读和修改调试和修改。6、上机调试,对程序的正确性作最后的确定。汇编程序的操作分两次扫描(汇编)第一次扫描(汇编)检查语法结构,对源程序中的符号、表达式、标号进行定义,处理伪指令,建立符号表显示ERROR,并提示行号显示ERROR,并提示行号修改!修改!第二次扫描(汇编)汇编成目标代码和汇编程序清单可执行的代码(机器码)4.2汇编源程序的设计与汇编程序设计步骤流程:拟制设计任务书建立或修改数学模型确定算法编制或修改流程图编制或修改程序汇编通过?上机调试调试通过?程序有大问题?试运行通过?完成YNYYYNNN4.2汇编源程序的设计与汇编4.2.2源程序的汇编CPU可以执行的只能是机器码程序。称:把源程序翻译成机器码的过程为汇编。汇编可:人工汇编和机器汇编两类。1、人工汇编由人工直接将汇编源程序翻译成机器码。2、机器汇编使用计算机执行“汇编程序”来代替人工实现将汇编源程序翻译成机器码。汇编语言源程序机器语言汇编反汇编交叉汇编例4.1设在内部RAM的BLOCK单元内有一无符号数据块的长度,无符号数据块起始地址是BLOCK+1。试编程求无符号数据块种数据的累加和(不考虑进位加法之和),并把它存入SUM单元。程序:ORG1000HSUMDATA1FHBLOCKDATA20HSTART:MOVR0,#BLOCK;数据块长度地址送R0MOVA,@R0;数据块长度送ACJNEA,#00H,LOOP;若数据块长度≠0,则LOOPHERE:SJMP$;若数据块长度=0,则结束LOOP:CLRANEXT:INCR0;修改数据指针ADDA,@R0;加一个数DJNZBLOCK,NEXT;若(BLOCK)-1≠0,则NEXTMOVSUM,A;存累加和SJMPHEREEND汇编程序经两次汇编得机器码第一次汇编第二次汇编地址指令码标号指令助记符1000H7820HSTARTMOVR0,#BLOCK1002HE6HMOVA,@R01003HB400LOOPCJNEA,#00H,LOOP1006H80$HERESJMP$1008HE4HLOOPCLRA1009H08HNEXTINCR0100AH26HADDA,@R0100BHD520NEXTDJNZBLOCK,NEXT100EHF51FHMOVSUM,A1010H80HERESJMPHERE地址指令码标号指令助记符1000H7820HSTARTMOVR0,#BLOCK1002HE6HMOVA,@R01003HB40002CJNEA,#00H,LOOP1006H80FEHHERESJMP$1008HE4HLOOPCLRA1009H08HNEXTINCR0100AH26HADDA,@R0100BHD520FBHDJNZBLOCK,NEXT100EHF51FHMOVSUM,A1010H80F4HSJMPHERE转移地址计算LOOP=1008H-1003H-3=02H;NEXT=1009H-100BH-3=-5=0FBH$=1006H-1006H-2=-2=0FEH;HERE=1006H-1010H-2=-12=0F4H偏移地址=指令所在地址-跳转地址-指令字节数4.3简单程序与分支程序设计4.3.1简单程序设计[例4.2]请编写能把20H单元内两个BCD数变成相应的ASCII码并放在21H(高位BCD数的ASCII码)和22H(高位BCD数的ASCII码)单元的程序。程序:ORG0500HMOVR0,#22H;R0=22HMOV@R0,#00H;(22H)=0MOVA,20H;A←(20H)BCD码XCHDA,@R0;低位BCD码与22H半字节交换ORL22H,#30H;加30H完成ASCII码变换SWAPA;高位BCD码高低位半字节交换ORLA,#30H;加30H完成ASCII码变换MOV21H,A;存入21H单元SJMP$[例4.3]已知一个补码形式的16位二进制(低8位在NUM单元,高8位在NUM+1单元),试编写能求该16位二进制数原码的绝对值

1 / 63
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功