好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

单片机汇编语言程序经典考试题.ppt

33页
  • 卖家[上传人]:豆浆
  • 文档编号:50744150
  • 上传时间:2018-08-10
  • 文档格式:PPT
  • 文档大小:188KB
  • / 33 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 51单片机汇编语言程序设计内容提要:1、介绍伪指令;2、汇编语言程序的汇编过程;3、汇编语言实用程序举例先介绍几个概念: (1)汇编语言用助记符表示指令系统的语言称汇编语言 (2)汇编语言源程序 通常把用汇编语言编写的程序称之为汇编语言源程序 (3)汇编将汇编语言源程序“翻译”成机器语言目标程序的过程称为汇编 (4)目标程序通常把可以在计算机上直接运行的机器语言程序称为目标程 序一、 伪指令1.伪指令的概念不产生目标代码,不影响程序执行,仅仅产生一些供汇编用 的命令,这样的命令称为伪指令2. 伪指令的作用(1) 指定目标程序或数据存放的地址;(2) 给一些指定的标号赋值;(3) 在内存中预留工作单元;(4)表示源程序结束3. 伪指令(1) ORG 伪指令用于设置起始地址, 一般形式为 ORG nn 一般总是出现在某段程序或数据的前面如 ORG 2000HMOV A ,20H 表示其后的指令从2000H开始存放若在源程序开始不放ORG指令,则汇编将从0000H开始编排目 标程序注意点: 要防止程序的重叠2) DB (Define Byte)一般形式为:DB 项或项表,是指一个字节,数或字符串,或以引号括起来的 ASCII码字符串。

      该指令的功能是将项或项表的数值存入从标号开始的连续单 元中例如:HERE: DB 84H ; (HERE)=84HDB 43H ; (HERE+1)=43H ORG 1000HSEG1: DB 53H, 74H, 78H, ’1’, ’2’SEG2: DB 23H, ‘DAY’ END (1000H)=53H(1001H)=74H(1002H)=78H(1003H)=31H 数字1的ASCII码(1004H)=32H 数字2的ASCII码(1005H)=23H(1006H)=44H(1007H)=41H ‘DAY’的ASCII码 (1008H)=59H注意点:项或项表为数值时,取值范围为00-FFH,若为字符 串其长度应限制在80个字符内3) DW (Define Word)一般形式为:DW 项或项表指一个字,DB用于定义8位数据(一个字节),DW 用于定义16位数据(一个字)。

      DW伪指令常用来建立地址表例如:ABC: DW 1234H , 08H; 和 ABC: DB 12H, 34H, 00H, 08H是等价的4) DS或DEFS (Define Storage)预留存储区一般形式为:DS 由标号指定开始单元,定义一个存储区,以备源程序使用预 留的单元数由表达式的值确定例如:ORG 3C40H TEMP: DS 10 … 从3C40开始,保留10个连续的存储单元5) EQU(Equate)为标号赋值一般形式为:EQU nn或其功能是,将语句操作数的值,赋给本语句的标号故又称为等 值指令 例如:BLK EQU 1000H 即给标号BLK赋以地址值1000H,在同一个程序中,用EQU给 标号赋以地址值后,标号的值在整个程序中不能再改变6) END 源程序结束一般形式为:END EDN语句是一个结束标志它告诉汇编程序,该程序段已经 结束因此,该语句必须放在整个程序之后实际使用时,END语句的标号是可有可无的 二、 汇编语言的构成1.汇编语言和机器语言机器语言是用二进制代码“0”和“1”来表示指令和数据的最原始 的程序设计语言。

      用机器语言编写的程序称为目标程序或机器语言 程序机器语言能被计算机直接识别和执行,但对人来说,直接使 用机器语言非常困难,因此产生了汇编语言汇编语言是一种面向机器的语言,使用助记符,每一个助记符 对应一个机器码,因此使用汇编语言编程比使用机器码更方便,但 用汇编语言编写的程序计算机不能直接识别和执行,必须将其翻译 成目标程序,这一翻译过程称为汇编,汇编可以用人工完成也可以 用机器完成2.汇编指令的格式汇编指令由1—4个字段组成,格式如下: ; (1)标号 用来表明指令的地址, 用8个或以下的字符组成用字母或下划线开头,不能使用保留字,可以缺省2)操作码 即指令的助记符,用来指明CPU执行何种操作,是不能缺少的部分3)操作数 参加运算的数据或数据的地址4)注释 为了方便程序的阅读,而作的说明三、 程序设计1、顺序结构程序编写例1. 将20H单元中的8位无符号数 转换成3位BCD码,并存放到FIRST (百位)、SECO(十位)和THIR( 个位)中FIRST EQU 30HSECO EQU 31HTHIR EQU 32H MOV A, 20H MOV B, #64H DIV ABMOV FIRST, AMOV A, BMOV B, #0AHDIV AB MOV SECO , AMOV THIR , BSJMP $END例2 已知20H单元中有一二 进制数,编程将其转换成3位 BCD数后,百位送入FIRST单元 的低4位,十位和个位分别送 入SECOND单元的高4位和低4位 。

      FIRST EQU 30H SECOND EQU 31HORG 0200HMOV A, 20HMOV B, #64HDIV ABMOV FIRST, AMOV A, BMOV B, 0AHDIV ABSWAP AORL A, BMOV SECOND, ASJMP $END2、分支程序设计例3 已知VAR单元内有一个自 变量X,请按如下条件编程求Y ,并将它存入FUNC单元X>0, Y=1; X=0, Y=0; X20ORG 2000HX1 EQU 20H Y1 EQU 21HMOV A,X1CJNE A,#10,NEXT1NEXT1: JC LOOP1CJNE A,#21,NEXT2NEXT2: JNC LOOP2MOV Y1, #00HSJMP HALTLOOP1: MOV Y1, #0FFHSJMP HALT LOOP2: MOV Y1,#01HHALT: SJMP $END 3、循环程序编写例5 将内部RAM 30H开始的10个无符号字节数相加,结果存入 30H单元,设和不超过8位. MOV R7, #09HMOV R0, #30HMOV A, @R0LOOP: INC R0 ADD A, @R0 DJNZ R7, LOOPMOV 30H, ASJMP $END例6. 设从内部RAM的BLOCK单元开始存放一组无符号数,数据长 度存放在NUM单元,试编程求它们的最小值,并存入MIN单元。

      ORG 2000HBLOCK EQU 31HMIN EQU 30HNUM EQU 2FHSTART: DEC NUMMOV R0, #BLOCK MOV A,@R0LOOP1: INC R0MOV B,@R0 CJNE A, B, NEXTNEXT: JC LOOPMOV A,BLOOP: DJNZ NUM, LOOP1MOV MIN, AEND 例7 设51单片机的时钟频率为12MHz,要求设计一个软件延时程 序延时时间为10ms.ORG 2000HMOV R6, #0AHLOOP2: MOV R7,#200LOOP1: NOPNOPNOPDJNZ R7, LOOP1DJNZ R6, LOOP2END 说明:内循环指令周期数为 : 1+1+1+2=5μs 完成一次 内循环环需要1001个机器周 期总总的延时时间为时时间为 10.031ms4、子程序的编写(1) 保护和恢复现场子程序中使用在主程序中使用的寄存器一般需要保护,通常需要保护的寄存器有PSW、A和Rn等。

      保护和恢复的方法是:使用PUSH和POP指令2) 入口和出口参数入口参数相当于给子程序的已知条件;出口参数相当于调用子程序后得到的结果3)子程序名用标号表示子程序名,子程序名通常是子程序的入口地址,用ret指令表示子程序调用结束然后,返回到主调函数该调用的下一条指令处执行子程序调用举例:例8. 将单字节无符号数,转换成非压缩的BCD码,用子程序编程说明: 使用子程序可以减少编程的工作量,提高程序的可读性分析: 单字节无符号数最大为255,因此最多可以转换成3位BCD码入口条件:将单字节无符号数存入累加器A中出口条件:R0中存放结果的起始地址即个位BCD码的地址EXBCD: INC R0INC R0PUSH BMOV B, #100DIV ABMOV @R0, ADEC R0MOV A, #10XCH A, BDIV ABMOV @R0, ADEC R0MOV @R0, BPOP BRET 例9. 将20H—2AH,30H—3EH,40H—4FH 三个子域清零.子程序名: “zero”;入口地址: R0,R2R0中存放子域的起始地址R2中存放子域的长度出口参数: 无 ORG 0100H MAIN: MOV R0, #20HMOV R2, #0BHACALL ZERO MOV R0, #30HMOV R2, #0FHACALL ZEROMOV R0, #40HMOV R2, #10HACALL ZEROSJMP $ ZERO: MOV @R0, #00HINC R0DJNZ R2, ZERORETEND 5、查表程序设计查表程序设计中常用以下指令:MOVC A, @A+DPTR MOVC A, @A+PC 例10 用MOVC A, @A+PC指令编 程,求c=a2+b2的值,设a,b,c分别用 内部RAM单元DA,DB,DC存放。

      子程序SQR入口参数: A出口参数: A DA EQU 30H DB EQU 31H DC EQU 32H STAR: MOV A, DAACALL SQRMOV R1, AMOV A, DBACALL SQRADD A, R1MOV DC, ASJMP $ SQR: INC AMOVC A, @A+PC RET A TAB: DB。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.