-第四章汇编语言程序设计

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

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

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

资源描述

第四章汇编语言程序设计4.1程序设计语言4.1.1机器语言以二进制代码形式表示指令和数据的语言.(机器码)如00111010+01011100→30H其机器语言程序为符号语言程序二进制十六进制0111010074HMOVA,#3AH001110103AH0010010024HADDA,#5CH010111005CH11110101F5HMOV30H,A0011000030H计算机能够识别机器语言,并能够按设计好的逻辑执行这一串代码所规定的动作.但这种语言难懂、难记、易错和编程困难。借助助记符形成符号语言,反映指令功能和主要特征,这样便于理解和记忆,这就形成汇编语言。4.1.2汇编语言用符号来表示指令和地址的语言就称作符号语言,又称作汇编语言。这也是一种面向机器的语言。1汇编语言的符号往往用人们容易辨认、阅读和记忆的字母符号。(1)助记符:指令系统,如加法ADD,减法SUB(TRACT),传送MOV(E)伪指令,这是汇编控制指令(2)符号地址和标号:用一些便于、记忆和理解的符号组,如LOOP、NEXT2汇编(1)几个概念*源程序:用符号语言编写的程序。*目标程序:机器能够直接执行的机器语言程序。把源程序翻译成目标程序的过程就称作汇编,又称作代真。(2)汇编方法人工查表①人工汇编:源程序______目标程序要求一丝不苟,认真细致,繁琐且易出错。汇编程序②机器汇编:源程序______目标程序汇编语言程序机器语言程序准确、快速,不会出偶然性错误(3)汇编类型①自汇编:机器本身完成的汇编过程,又称驻留汇编。②交叉汇编:用其他机器将程序变成目标程序后送回机器执行。③反汇编:将目标程序变回汇编语言程序。!汇编语言程序与汇编程序是两个不同的概念,不能混淆。汇编语言虽然比机器语言前进了一大步,但它还是面向机器的一种语言,不同的机器就要有不同的汇编语言,要用汇编语言编写程序,就必须对该种计数器十分熟悉(包括指令系统以至于硬件情况),而且编写出的程序只能在这种机器上使用。有没有不依赖或少依赖机器的语言呢?这就是高级语言。4.1.3高级语言只与解决问题的算法有关,而与机器的类型、结构和指令系统无关。面向过程的语言:科学计算:FORTRAN、ALGOL、PASCAL、BASIC、C商业管理:COBOL数字程控:APT人工智能:LISP、PROLOG面向对象的语言:Smalltalk、C++、VisualBASIC、VisualC++(1)优点不依赖(很少)依赖于机器,学习容易,变成效率高,使用方便,程序短,便于交流和推广。可移植性好,同一个程序可以在不同的机器上运行。(2)缺点语法复杂,特殊规定多用高级语言编写的程序要经过编译程序(Compiler)或解释程序(Interpreter)翻译成目标程序才能运行。而高级语言的编译开销大,要有大量的硬件和软件支持,需要占用大量内存,高级语言越复杂,功能越强,编译程序越庞大(从几k到几M);运行效率低,一般要膨胀15~300%。4.1.4使用汇编语言的意义1高级语言的编译程序大多是用汇编语言编写2汇编语言的运行效率高,提高了计算机的效率,这在实时控制应用中特别重要。3对专用程序、重复使用频率高的程序应该用汇编语言编写,更加有利于提高效率。4采用汇编语言可以充分发挥机器的专有特性。5硬件成本低和软件投资少。6搞通汇编语言,有助于理解和评价高级语言。4.1.5结论1使用机器语言和汇编语言无需太多的软件和硬件支持,而且能产生质量很高的目标程序,但成程序没有通用性,难编难懂。总的来说,汇编语言开发效率低,运行效率高。2高级语言面向过程和面向对象,不依赖于个别的机器,程序相对易编易懂,便于交流使用,但需要较多的软件和硬件支持,而且产生的程序相对质量较低,所占用的时间和空间都大,时空指标下降,一般不适用于实时响应。总的来说,高级语言开发效率高,运行效率低。4.2MCS-51系列单片机汇编语言4.2.1汇编语言源程序格式指令助记符符号由厂方设计人员规定。符号地址由用户自己确定。典型的汇编语言语句结构由四部分组成:标号:操作码操作数;注解(Lable)(Opcode)(Operand)(Comment)标号后面用冒号分隔,操作码与操作数之间用空格分隔,操作数之间用逗号分隔,操作数与注解之间用分号分隔。1标号:指令的符号地址,在程序汇编时,就被赋以指令存储地址的具体数值。采用符号地址便于查看、修改,尤其是转移指令中转移地址的表示。实际上并不是每条指令都需要加上标号,只有要被其他语句引用的指令才需要加上标号。标号有如下规定:(1)由字母、数字和其他一些字符组成,但为了在汇编时与数据区分,要求第一个符号必须是大写字母。所用字符一般不超过6个。(2)标号不能用操作码的助记符和寄存器的代号以及其他系统保留字。(3)特定的标号只能在程序中定义一次,保持一义性。请大家对以下几个标号进行判断,看是否合法:NEXT23ABLOOP3M3ADDDPTRB3GK4DSPCOUNTER-AZnmpq2操作码字段这一字段永远不会是空的。(其他三个字段有时会是空的)(1)指令系统的助记符(硬指令),即指令操作码助记符。在汇编时,与“操作码表”进行逐一比较,找出其相应的机器码--代真。(2)伪指令(软指令),这是汇编过程的控制指令,也是汇编程序的操作指令。与指令系统的助记符不同,没有机器码与它对应,当源程序汇编成目标程序后,目标程序中并不出现这些伪指令的代码,它们仅在汇编过程中起作用,完成一些特定的操作。3操作数字段操作对象的数据值或以符号表示的数据或地址值。形式可以是工作寄存器、专用寄存器、已用伪指令EQU赋值的标号、用引号表示的ASCII码、立即数(二进制、八进制、十进制和十六进制)和表达式。4注释字段用来对程序作一些注解和说明,便于人们阅读程序,汇编程序对此字段不予处理。在些注释时,一般说明指令的作用和执行的条件,注意要说明程序在做什么,而不是说明该指令在做什么。在用到子程序时,要说明子程序的入口条件和出口条件以及该程序完成的功能和作用。4.2.2伪指令这是用来向汇编程序提供的有关如何完成汇编的控制命令信息。一旦汇编结束,伪指令的使命就完成,所以在目标程序中并不出现伪指令的代码。1ORG(Origin)起点形式:[标号:]ORG[地址]作用:指明此语句后面的程序或数据块存放区的首址。在一个程序中可以根据情况多次使用。其中[标号]是选择项,根据需要选用,[地址]可以是16位的地址值,也可以是已赋值的标号和表达式。如ORG2000H首地址为2000HORG100首地址为0064HORGBEGIN在使用前要给BEGIN赋值ORG首地址为0000H2DB或DEFB(DefineByte)定义字节形式:[标号]DB8位数表作用:把8位数表中的数值或字符的ASCII码存入从标号开始的连续存储单元中。其中8位数表是指一个字节或用逗号分开的字节串和引号内的ASCII码。如ORG2400HFIRST:DB56H,0A3H;56H、0A3H分别存放在2400H和2401H单元WORD:DB-3,5*2;FDH和0AH存放在2402H和2403H单元中STR:DB'TIME';TIME的ASCII码54H、49H、4DH和45H存放在2404H、;2405H、2406H和2407H单元中3DW或DEFW(DefineWord)定义字(主要用于定义地址)形式:[标号]DW16位数表作用:把16位数表中的数值或字符的ASCII码存入从标号开始的连续存储单元中。如ORG2400HADDR:DW56A3H;56H、A3H分别存放在2400H和2401H单元DW'AB';41H、42H分别存放在2402H和2403H单元4DS或DEFS(DefineStorage)定义存储器形式:[标号]DS8位数表作用:由标号所指单元开始,保留指定的内存单元(字节)个数,以供源程序在运行中使用。如ORG3000HMAX:DS1;保留3000H单元供存放“最大数”用BUF:DS10;从3001H单元开始保留10个单元作缓冲区5EQU(Equate)等值形式:标号:EQU赋值项作用:使等式两边的8位量等值,赋值后在程序中不能改变。如FIRST:EQU20H;给符号地址赋值为20HFIRST:EQUSECOND;SECOND与FIRST等值,可在使用中互换6EQW(EquateWord)字等值形式:标号:EQW赋值项作用:使等式两边的16位量等值,赋值后在程序中不能改变。如FIRST:EQU2200H;给符号地址赋值为2200HFIRST:EQUSECOND;SECOND与FIRST等值,可在使用中互换7BIT位定义形式:标号:BIT8位位地址作用:给标号赋以位地址,该地址可以是直接地址,也可以是符号地址或位名如USR-FLG:BITF0/PSW.5USR_FLG:BIT0D5H8END结束汇编形式:[标号:]END表达式作用:通知汇编程序该汇编语言程序结束(1)在一个源程序中必须要有END伪指令。而且只能有一个放在整个程序的最后;(2)标号只有在其他指令要引用它时才需要;(3)表达式一般在主程序中才需要,且表达式即为主程序的起始地址,表示结束源程序的汇编,如果汇编正确,便自动地转向此首址的目标程序执行。如MOVR0,#60HORG2000HMOVA,#3AHSUM:EQU60HMOVB,#0AH─────NUMBA:EQU3AHMULAB─────NUMBB:EQU0AHMOV@R0,BMOVR0,#SUMINCR0MOVA,#NUMBAMOV@R0,AMOVB,#NUMBBMULABMOV@R0,BINCR0MOV@R0,AEND4.3汇编语言程序设计4.3.1简单直线程序1顺序程序例多字节数加法两个三字节无符号数加法,一个加数在片内RAM的50H、51H、52H单元中,另一个加数在53H、54H、55H单元中,要求相加之和存放在53H、54H、55H、56H单元中。MOVR0,#50HMOVR1,#53HMOVA,@R0ADDA,@R1MOV@R1,AINCR0INCR1MOVA,@R0ADDCA,@R1MOV@R1,AINCR0INCR1MOVA,@R0ADDCA,@R1MOV@R1,ACLRAADDCA,#00HMOV@R1,A2查表程序查表程序常用于数据补偿、非线性修正、求非线性函数和代码转换等。这种方法既不需要计算,速度又快,而且实现容易。如果在程序中不能用几条指令直接完成算术运算时,往往用查表法实现比较有利。但在表中必须列出所有可能的值。所以这种方法需要占用较大的存储器空间。其实质是用空间换取时间。使用查表法的技巧在于巧妙地确定索引值,用得恰当可以大大简化程序设计,带来很大方便。特点:程序简单,执行速度快;在表中要列出所有可能的值,占用存储器较多,用空间换取时间。方法:y=f(x),根据变量x在表中找到相应的y值。表的形成也可用折线来分段,其中间值可通过插值方法计算。例1热敏电阻上的电压与所测的温度值为非线性关系。若用10位A/D对其电压进行采样,然后通过转换显示其温度值。这里把所测的10位二进制输入值与其相对应的温度值列成表格TTAB。测量的10位输入值x存放在R2和R3中,查表所得到的温度值也存放在R2和R3中。10位二进制输入值的范围为0000H~03FFH,一共有1024项,其分辨率为1/1024(0.1%)!这里表的偏移量(索引值)有两个字节,所以不能用A作为变址寄存器。VCT:MOVDPTR,#TTAB;指向表格的首址MOVA,R3;以下计算R2R3+DPTRADDA,DPL;R3+DPLMOVDPL,AMOVA,DPHADDCA,R2;R2+DPHMOVDPH,A;DPTR指向温度的高字节CLRAMOVCA,@A+DPTR;读温度的高字节MOVR2,ACLRAINCDPTR;DPTR指向温度的低字节MOVCA,@A+DPTR;读温度的低字节MOVR3,ARETTTAB:DWXXXX;温度值表DWXXXX例2键入一个ASCII字符,按不同的输入命令字符而转

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

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

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

×
保存成功