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

上传人:sh****n 文档编号:8729358 上传时间:2020-03-31 格式:PPT 页数:33 大小:383.31KB
返回 下载 相关 举报
单片机汇编语言程序经典考试题.ppt_第1页
第1页 / 共33页
单片机汇编语言程序经典考试题.ppt_第2页
第2页 / 共33页
单片机汇编语言程序经典考试题.ppt_第3页
第3页 / 共33页
点击查看更多>>
资源描述
51单片机汇编语言程序设计内容提要 1 介绍伪指令 2 汇编语言程序的汇编过程 3 汇编语言实用程序举例 先介绍几个概念 1 汇编语言用助记符表示指令系统的语言称汇编语言 2 汇编语言源程序通常把用汇编语言编写的程序称之为汇编语言源程序 3 汇编将汇编语言源程序 翻译 成机器语言目标程序的过程称为汇编 4 目标程序通常把可以在计算机上直接运行的机器语言程序称为目标程序 一 伪指令1 伪指令的概念不产生目标代码 不影响程序执行 仅仅产生一些供汇编用的命令 这样的命令称为伪指令 2 伪指令的作用 1 指定目标程序或数据存放的地址 2 给一些指定的标号赋值 3 在内存中预留工作单元 4 表示源程序结束 3 伪指令 1 ORG伪指令用于设置起始地址 一般形式为ORGnn一般总是出现在某段程序或数据的前面 如ORG2000HMOVA 20H 表示其后的指令从2000H开始存放 若在源程序开始不放ORG指令 则汇编将从0000H开始编排目标程序 注意点 要防止程序的重叠 2 DB DefineByte 一般形式为 DB项或项表 是指一个字节 数或字符串 或以引号括起来的ASCII码字符串 该指令的功能是将项或项表的数值存入从标号开始的连续单元中 例如 HERE DB84H HERE 84HDB43H HERE 1 43HORG1000HSEG1 DB53H 74H 78H 1 2 SEG2 DB23H 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 DefineWord 一般形式为 DW项或项表指一个字 DB用于定义8位数据 一个字节 DW用于定义16位数据 一个字 DW伪指令常用来建立地址表 例如 ABC DW1234H 08H 和ABC DB12H 34H 00H 08H是等价的 4 DS或DEFS DefineStorage 预留存储区一般形式为 DS由标号指定开始单元 定义一个存储区 以备源程序使用 预留的单元数由表达式的值确定 例如 ORG3C40HTEMP DS10 从3C40开始 保留10个连续的存储单元 5 EQU Equate 为标号赋值一般形式为 EQUnn或其功能是 将语句操作数的值 赋给本语句的标号 故又称为等值指令 例如 BLKEQU1000H即给标号BLK赋以地址值1000H 在同一个程序中 用EQU给标号赋以地址值后 标号的值在整个程序中不能再改变 6 END源程序结束一般形式为 ENDEDN语句是一个结束标志 它告诉汇编程序 该程序段已经结束 因此 该语句必须放在整个程序之后 实际使用时 END语句的标号是可有可无的 二 汇编语言的构成1 汇编语言和机器语言机器语言是用二进制代码 0 和 1 来表示指令和数据的最原始的程序设计语言 用机器语言编写的程序称为目标程序或机器语言程序 机器语言能被计算机直接识别和执行 但对人来说 直接使用机器语言非常困难 因此产生了汇编语言 汇编语言是一种面向机器的语言 使用助记符 每一个助记符对应一个机器码 因此使用汇编语言编程比使用机器码更方便 但用汇编语言编写的程序计算机不能直接识别和执行 必须将其翻译成目标程序 这一翻译过程称为汇编 汇编可以用人工完成也可以用机器完成 2 汇编指令的格式汇编指令由1 4个字段组成 格式如下 1 标号用来表明指令的地址 用8个或以下的字符组成用字母或下划线开头 不能使用保留字 可以缺省 2 操作码即指令的助记符 用来指明CPU执行何种操作 是不能缺少的部分 3 操作数参加运算的数据或数据的地址 4 注释为了方便程序的阅读 而作的说明 三 程序设计1 顺序结构程序编写例1 将20H单元中的8位无符号数转换成3位BCD码 并存放到FIRST 百位 SECO 十位 和THIR 个位 中 FIRSTEQU30HSECOEQU31HTHIREQU32HMOVA 20HMOVB 64HDIVABMOVFIRST AMOVA BMOVB 0AHDIVABMOVSECO AMOVTHIR BSJMP END 例2已知20H单元中有一二进制数 编程将其转换成3位BCD数后 百位送入FIRST单元的低4位 十位和个位分别送入SECOND单元的高4位和低4位 FIRSTEQU30HSECONDEQU31HORG0200HMOVA 20HMOVB 64HDIVABMOVFIRST AMOVA BMOVB 0AHDIVABSWAPAORLA BMOVSECOND ASJMP END 2 分支程序设计例3已知VAR单元内有一个自变量X 请按如下条件编程求Y 并将它存入FUNC单元 X 0 Y 1 X 0 Y 0 X 0 Y 1 ORG0100HVRAEQU30HFUNCEQU31HMOVA VARJZDONEJNBACC 7 POSIMOVA 0FFHSJMPDONEPOSI MOVA 01HDONE MOVFUNC ASJMP END 例4已知X Y为无符号数 分别存放于X1 Y1单元中 请按如下条件编程求Y ORG2000HX1EQU20HY1EQU21HMOVA X1CJNEA 10 NEXT1NEXT1 JCLOOP1CJNEA 21 NEXT2NEXT2 JNCLOOP2MOVY1 00HSJMPHALTLOOP1 MOVY1 0FFHSJMPHALTLOOP2 MOVY1 01HHALT SJMP END 3 循环程序编写例5将内部RAM30H开始的10个无符号字节数相加 结果存入30H单元 设和不超过8位 MOVR7 09HMOVR0 30HMOVA R0LOOP INCR0ADDA R0DJNZR7 LOOPMOV30H ASJMP END 例6 设从内部RAM的BLOCK单元开始存放一组无符号数 数据长度存放在NUM单元 试编程求它们的最小值 并存入MIN单元 ORG2000HBLOCKEQU31HMINEQU30HNUMEQU2FHSTART DECNUMMOVR0 BLOCKMOVA R0LOOP1 INCR0MOVB R0 CJNEA B NEXTNEXT JCLOOPMOVA BLOOP DJNZNUM LOOP1MOVMIN AEND 例7设51单片机的时钟频率为12MHz 要求设计一个软件延时程序延时时间为10ms ORG2000HMOVR6 0AHLOOP2 MOVR7 200LOOP1 NOPNOPNOPDJNZR7 LOOP1DJNZR6 LOOP2END 说明 内循环指令周期数为 1 1 1 2 5 s完成一次内循环需要1001个机器周期总的延时时间为10 031ms 4 子程序的编写 1 保护和恢复现场子程序中使用在主程序中使用的寄存器一般需要保护 通常需要保护的寄存器有PSW A和Rn等 保护和恢复的方法是 使用PUSH和POP指令 2 入口和出口参数入口参数相当于给子程序的已知条件 出口参数相当于调用子程序后得到的结果 3 子程序名用标号表示子程序名 子程序名通常是子程序的入口地址 用ret指令表示子程序调用结束 然后 返回到主调函数该调用的下一条指令处执行 子程序调用举例 例8 将单字节无符号数 转换成非压缩的BCD码 用子程序编程 说明 使用子程序可以减少编程的工作量 提高程序的可读性 分析 单字节无符号数最大为255 因此最多可以转换成3位BCD码 入口条件 将单字节无符号数存入累加器A中 出口条件 R0中存放结果的起始地址 即个位BCD码的地址 EXBCD INCR0INCR0PUSHBMOVB 100DIVABMOV R0 ADECR0MOVA 10XCHA BDIVABMOV R0 ADECR0MOV R0 BPOPBRET 例9 将20H 2AH 30H 3EH 40H 4FH三个子域清零 子程序名 zero 入口地址 R0 R2R0中存放子域的起始地址R2中存放子域的长度出口参数 无 ORG0100HMAIN MOVR0 20HMOVR2 0BHACALLZEROMOVR0 30HMOVR2 0FHACALLZEROMOVR0 40HMOVR2 10HACALLZEROSJMP ZERO MOV R0 00HINCR0DJNZR2 ZERORETEND 5 查表程序设计查表程序设计中常用以下指令 MOVCA A DPTRMOVCA A PC例10用MOVCA A PC指令编程 求c a2 b2的值 设a b c分别用内部RAM单元DA DB DC存放 子程序SQR入口参数 A出口参数 A DAEQU30HDBEQU31HDCEQU32HSTAR MOVA DAACALLSQRMOVR1 AMOVA DBACALLSQRADDA R1MOVDC ASJMP SQR INCAMOVCA A PCRETATAB DB0 1 4 9 16DB25 36 49 64 81END 例11将一个16进制数0 F 存放在R0的低4位 转换成ASCII码存放到原单元 ORG2000HMOVDPTR TABMOVA R0ANLA 0FHMOVCA A DPTRMOVR0 ASJMP TAB DB30H 31H 32H 33H 34H 35H 36H 37H 38H DB39H 41H 42H 43H 44H 45H 46HEND 6 排序程序的编写例12编程将已存入内部RAM 70H到75H中的6个数按从小到大顺序排列 ORG2000HSORT MOVR2 70HMOVR3 71HLOOP LCALLSUBINCR2INCR3CJNER3 76H LOOPLOP2 SJMPLOP2ENDORG2040HSUB MOVA R2MOVR0 AMOVA R3MOVR1 AMOVA R0LOP CLRCSUBBA R1 MOVA R0JCLOP1XCHA R1MOV R0 ALOP1 INCR1CJNER1 76H LOPMOV R0 ARET 7 逻辑运算编程例13 编程求逻辑函数L的值 式中L U V W X Y Z均为位变量 逻辑变量从P1口的P1 0 P1 5输入 从P1 7输出 即有以下对应关系 P1 0 UP1 1 VP1 2 WP1 3 XP1 4 YP1 5 ZP1 7 L ORG2000HUEQUP1 0VEQUP1 1WEQUP1 2XEQUP1 3YEQUP1 4ZEQUP1 5LEQUP1 7MOVC WCPLCORLC VCPLC ANLC UMOV07H CMOVC WANLC YORLC ZCPLCANLC XORLC 07HMOVL CSJMP 例14用堆栈传递参数将30H单元存放的两个十六进制数字 分别转换成ASCII码存入31H32H单元 ORG2000HMOVSP 50HPUSH30HACALLHASCPOP31HMOVA 30HSWAPAPUSHACCACALLHASCPOP32HSJMP HASC DECSPDECSPPOPACCMOVDPTR TABANLA 0FHMOVCA A DPTRPUSHACCINCSPINCSPRETTAB DB30H 31H 32H 33H 34H 35H 36HDB37H 38H 39H 41H 42H 43H 44H 45H 46H 例15汇编语言源程序的汇编过程ORG2000H2000H7F09START MOVR7 09H2002H7831MOVR0 31H2004HE6MOVA R02005H08LOOP INCR02006H26ADDA R02007HDFLOOPDJNZR7 LOOP2009HF530MOV30H A200BH80HALTHALT SJMPHALTEND
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!