资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第4 4章章汇编语言程序设计知识汇编语言程序设计知识汇编语言程序的汇编汇编语言程序的汇编1.机器语言机器语言 11100101 00110000 00100101 01000000 11110101 01010000 2.汇编语言汇编语言 MOV A,30H ADD A,40H MOV 50H,A3.高级语言高级语言高级语言是一种面向算法和过程的语言。如:高级语言是一种面向算法和过程的语言。如: FORTAN、BASIC、C语言语言汇编语言程序设计概述汇编语言程序设计概述汇编语言语句格式汇编语言语句格式标号:标号: 操作数操作数;注释;注释 1.标号标号标号是语句地址的标志符号、代表该语句指令代码第一个字节的地址。 2.操作码助记符操作码助记符 此为语句中唯一不可缸少的部分,也是语句的核心,表示该语句进行何种操作。3.操作数操作数 操作数是指令的操作对象。4.注释注释注释是为方便程序的编写、理解、交流而书写的说明解释性文字、符号。 伪指令伪指令 1.汇编起始地址伪指令汇编起始地址伪指令ORG(Origin)格式:格式:标号:标号:ORG 功能:规定目标程序段式数据块的起始地址。功能:规定目标程序段式数据块的起始地址。 说明:总放在源程序段的开头和数据块的开头说明:总放在源程序段的开头和数据块的开头 2.汇编结束指令汇编结束指令END格式:格式:标号:标号:END 功能:告诉汇编程序,源程序到此结果,汇编到此截止。功能:告诉汇编程序,源程序到此结果,汇编到此截止。说说明明:一一个个程程序序只只能能有有一一条条END命命令令,且且位位于于程程序序的的最最后后。汇汇编程序对编程序对END语句以后的语句不进行汇编。语句以后的语句不进行汇编。例如:例如: ORG 2000H START:MOV A,B,DONE CPL A DONE:MOV B,A END 格式:格式:标号:标号:DB 功能:从指定的地址单元开始,存入规定好的功能:从指定的地址单元开始,存入规定好的8 8位数(字节数据)位数(字节数据)说明:说明:1 1)存贮地址单元可由前一条指令确定或由)存贮地址单元可由前一条指令确定或由ORGORG命令指定;命令指定; 2 2)当存贮多个数时,中间用)当存贮多个数时,中间用“,”隔开。隔开。例如:例如: ORG 8000H MOV A, 40H TAB:DB 40H, 1101B, 96表示从表示从8002H单元开始分别存放单元开始分别存放40H,0DH,43H例:例: ORG 1000H DB “How are you”则则把把字字符符串串中中的的字字符符按按ASCII码码连连续续存存放放在在1000H100AH 11个单元中(包括两个空格)。个单元中(包括两个空格)。 注意:注意:DB 0FA2H 是非法的,因是非法的,因0FA2H不是字节数。不是字节数。3.字节定义伪指令字节定义伪指令DB(Define Byte)格式:格式:标号:标号:DW 功能:从指定的地址开始,存入字十六位数据(字数据)。功能:从指定的地址开始,存入字十六位数据(字数据)。 说明:存入数据时高位在前,低位在后,即高说明:存入数据时高位在前,低位在后,即高8位存入低地址单位存入低地址单 元,低元,低8位存入高地址单元。位存入高地址单元。 例:例: ORG 1000H DW 765AH,40H,“AB” 则则1000H1005H单元依次存放着:单元依次存放着:76H,5AH,00H,40H, 41H,42H。 注意:注意: 1 1)DWDW语句中,语句中,40H40H是是8 8位数,按位数,按1616位数位数0040H0040H存放存放. . 2 2)DWDW“ABCABC”及及DWDW“How How are are youyou”是是非非法法的的,而而 DBDB“ABCABC” “How are youHow are you”则是合法的。则是合法的。 4. 字定义伪指令字定义伪指令DW(Define Word)格式:格式:标号:标号:DS DS 功功能能:从从指指令令的的地地址址单单元元开开始始,保保留留指指定定数数目目的的字字节节单单元元作作为备用空间。为备用空间。 例:例: ORG 1000HORG 1000H DS 20 DS 20 START START:MOV AMOV A, #00H#00H则则汇汇编编后后,从从1000H1000H开开始始,保保留留2020个个单单元元作作它它用用,第第三三条条指指令令的的标标号号STARTSTART的地址应为的地址应为1014H1014H。 注注意意:MCS-51MCS-51系系列列单单片片机机,DBDB、DWDW、DSDS伪伪指指令令只只能能用用于于程程序序存存贮器,不能对数据存贮器使用。贮器,不能对数据存贮器使用。 5.5.空间定义伪指令空间定义伪指令DS(Define Storage)DS(Define Storage)格式:格式: EQU 功能:将右边的值赋给左边用户定义的字符。功能:将右边的值赋给左边用户定义的字符。说明:说明:1)赋值后的字符即可做为地址使用,也可以做为立即数)赋值后的字符即可做为地址使用,也可以做为立即数 使用;使用;2)一经使用)一经使用EQU赋值,整个程序有效;赋值,整个程序有效;3)所赋值可是)所赋值可是8位(字节)或位(字节)或16位(字);位(字);4)该伪指令一般放在程序的开始段;)该伪指令一般放在程序的开始段;5)指指令令字字符符名名称称构构成成的的规规定定和和地地址址标标号号一一样样,但但不不是是标标号号,使使用时后无用时后无“:”。例如程序段:例如程序段: ORG 8000HAA EQU 10H ;AA=10H ABC EQU AA+10H ;ABC=20H MOV A,ABC ;A 20H BS: ADD A, #AA ;A (A)+10H 说明:程序中,说明:程序中,AA、ABC是字符名称,是字符名称,BS是标号。是标号。6.赋值伪指令赋值伪指令EQU(Equate)格式:格式: BIT 功能:把位地址赋给指定的字符名称。功能:把位地址赋给指定的字符名称。例:例: A1 BIT P A2 BIT 20H 说说明明:赋赋值值命命令令和和位位定定义义命命令令仅仅为为方方便便编编程程和和阅阅读读理理解解程程序序使使用用,使使用用时时,字字符符名名称称或或位位名名称称一一般般取取有有意意义义且且便便于记忆的字母数字。于记忆的字母数字。 7.位定义伪指令位定义伪指令BIT汇编语言程序设计一般步骤汇编语言程序设计一般步骤 (1)分析问题,明确任务)分析问题,明确任务(2)建立数学模型,确定算法)建立数学模型,确定算法(3)绘制程序流程图)绘制程序流程图(4)编写源程序)编写源程序 (5)汇编、调试)汇编、调试循环结构程序设计循环结构程序设计 典典型型循循环环结结构构包包括四部分:括四部分:初始化部分初始化部分循环处理部分循环处理部分循环控制部分循环控制部分循环结束部分循环结束部分1.设置循环计数器实现已知循环次数的循环控制设置循环计数器实现已知循环次数的循环控制程序如下:程序如下: MOV R0,#64H ;设置循环计数器;设置循环计数器 MOV DPTR,#DATA ;设置地址指针;设置地址指针 CLR ALOOP:MOVX DPTR,A ;清;清0 INC DPTR DJNZ R0,LOOP ;判;判0结束循环结束循环例例4-7 将首址为将首址为DATA的的100个外部个外部RAM单元清零。单元清零。解解该例为已知循环次数的循环程序将循环次该例为已知循环次数的循环程序将循环次数数存放在数数存放在R0中。椐图如中。椐图如4-7所示。所示。2.使用测试条件转移指令控制未知次数的循环使用测试条件转移指令控制未知次数的循环例例4-8 设设某某以以“$”为为结结束束标标志志的的字字符符中中共共不不超超过过256个个,存存放放在在内内部部RAM以以STA为为首首址址的的连连续续单单元元里里,设设统统计计此此字字符符中中长度并存放到内部长度并存放到内部RAM的的LEN单元中。单元中。解法一解法一框图如图框图如图4-8所示:程序如下:所示:程序如下: ORG 1000H MOV R2,#STA ;设地址指针;设地址指针 MOV B,#00H ;设计数器;设计数器LOOP: MOV A,R2 CJNE A,“$”,NEXT ;判断是否结束;判断是否结束 MOV LEN,B ;存数据结果;存数据结果 SJMP DONE NEXT: INC B ;修改计数器;修改计数器 INC R2 ;修改地址指针,;修改地址指针, 准备下一次循环准备下一次循环 SJMP LOOP DONE: END 程序如下:程序如下: ORG 1000H MOV R2,#STA-1 ;设地址指针;设地址指针 MOV B,#0FFH ;设计数器;设计数器LOOP: INC R2 ;修改地址指针,准;修改地址指针,准 备下一次循环备下一次循环 INC B ;修改计数器;修改计数器 MOV A,R2 ;取数;取数 CJNE A,“$”,LOOP ;判断循环是否结束;判断循环是否结束 MOV LEN,B ;存数据;存数据 END说明:说明:1)解解法法一一为为先先判判断断后后处处理理形形式式,更更符符合合人人们们的的习习惯惯思思维维,但但使用了无条件转移指令,程序结构不清晰,质量不高。使用了无条件转移指令,程序结构不清晰,质量不高。2)解解法法二二为为先先处处理理后后判判断断形形式式,我我们们要要熟熟悉悉并并掌掌握握这这种种方方法法,同时注意解法二中对地址指针同时注意解法二中对地址指针R2和计数器和计数器B的初值设置。的初值设置。解法二解法二框图如图框图如图4-9所示。所示。4.2.4 子程序设计子程序设计1.子程序的概念子程序的概念2.子程序调用子程序调用 主程序调用子程序指令:主程序调用子程序指令:LCALL 、ACALL子程序执行结束返回指令:子程序执行结束返回指令:RET3.现场保护现场保护 子子程程序序执执行行时时首首先先必必须须将将两两段段程程序序都都用用到到的的寄寄存存器器或或存存贮贮单元保存起来,称单元保存起来,称现场保护。现场保护。 在在子子程程序序返返回回前前,再再将将保保存存起起来来的的内内容容恢恢复复到到原原处处,返返回回后后继续执行程序,这个过程称继续执行程序,这个过程称恢复现场。恢复现场。 对对于于PC值值的的现现场场保保护护和和恢恢复复是是由由计计算算机机在在执执行行LCALL,ACALL和和RET时自动完成的。时自动完成的。 对对于于其其它它需需要要保保护护的的存存贮贮单单元元,由由程程序序员员在在子子程程序序的的开开头头和和结尾编程实现,一般也是用栈操作指令完成的。结尾编程实现,一般也是用栈操作指令完成的。 4.主程序与子程序的参数传递主程序与子程序的参数传递 主主程程序序在在调调用用子子程程序序时时必必须须将将具具体体的的数数据据传传递递给给子子程程序序中中相应的变量(寄存器等),这些数据称相应的变量(寄存器等),这些数据称入口参数。入口参数。 子子程程序序执执行行结结束束后后也也必必须须将将运运行行结结果果传传递递给给主主程程序序供供主主程程序序使用,这些结果数据称使用,这些结果数据称出口参数出口参数。 例例4-12设设内内部部存存放放长长度度为为40H的的ASCII字字符符串串,首首址址为为40H。试试将将该该字字符符中中每每一一个个字字符符中中加加偶偶校校验验位位。要要求求先先编编写写ASCII字符的偶校验子程序,通过子程序调用完成所给任务。字符的偶校验子程序,通过子程序调用完成所给任务。 解解该该例例中中,入入口口参参数数仅仅有有一一个个ASCII数数,出出口口数数据据也也只只有有一一个个加校验位的加校验位的ASCII字符,可只用累加器字符,可只用累加器A传送。传送。子程序编写如下:子程序编写如下: ORG 0120H SUB:ADD A,#00H ;根据;根据A中字符的中字符的1的个数的个数 ;产生;产生PSW的奇偶标志位的奇偶标志位P JNB P,DONE ;判;判A中中1个数是否为偶数个数是否为偶数 ORL A,#80H ;为奇,置标志位;为奇,置标志位1DONE:RET主程序如下:主程序如下: ORG 0100H MAIN:MOV R0,#40H MOV R7,#40H ;置循环计数器;置循环计数器NEXT:MOV A,R0 ;取数;取数 ACALL SUB ;调用子程序置校验位;调用子程序置校验位 MOV R0,A ;存已加校验位的;存已加校验位的ASCII字符字符 INC R0 ;修改指针,指向下一单元;修改指针,指向下一单元 DJNZ R7,NEXT ;计数器减;计数器减1判判0 END说明:说明:1)完成后的程序清单一般按地址顺序列出。)完成后的程序清单一般按地址顺序列出。2)每段程序前以)每段程序前以ORG伪指令确定该程序段位置。伪指令确定该程序段位置。3)每个子程序的首址必须有标号作为主程序调用的入口地址。)每个子程序的首址必须有标号作为主程序调用的入口地址。4)每个子程序的结束必须有)每个子程序的结束必须有RET以指令返回主程序。以指令返回主程序。5)END伪指令在全部程序之后,而不是主程序之后。伪指令在全部程序之后,而不是主程序之后。6)地址标号,变量等尽量取有意义的合法字符,以便阅读)地址标号,变量等尽量取有意义的合法字符,以便阅读。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号