MCS-51单片机汇编语言的伪指令.ppt_第1页
MCS-51单片机汇编语言的伪指令.ppt_第2页
MCS-51单片机汇编语言的伪指令.ppt_第3页
MCS-51单片机汇编语言的伪指令.ppt_第4页
MCS-51单片机汇编语言的伪指令.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Copyright 2006 一、MCS-51单片机汇编语言的伪指令 伪指令又称汇编程序控制译码指令,属说明性汇编指令 。 “伪”字体现在汇编时不产生机器指令代码,不影响程序 的执行,仅产生供汇编时用的某些命令,在汇编时执行某些特 殊操作。 MCS-51单片机汇编语言程序设计中,常用的伪指令(七条): ORG定位伪指令 END结束汇编伪指令 EQU赋值伪指令 DB定义字节指令 DW定义数据字指令 DS定义存储区指令 BIT位定义指令 2-3 汇编语言程序设计方法(一) Copyright 2006 1、起始地址伪指令 ORG ORG addr16 用于规定目标程序段或数据块的起 始地址, 设置在程序开始处。 例: Org 0000h ljmp main org 0100h main: . 2、汇编结束伪指令 END 告诉汇编程序,对源程序的汇编到 此结束。 一个程序中只出现一 次,在程序的 最末尾。 例: end 3、赋值伪指令 EQU 告诉汇编程序,将汇编语句操作 数的值赋予本语句的标号。 格式: 标号名称 EQU 数值 或汇编符号 “标号名称”在源程序中可以作数 值使用,也可以作数据地址、位地 址使用。 先定义后使用,放在程序开头。 例: led_lamp equ p1.0 counter equ 100 display_addr equ 2000h . mov r0, #counter mov dptr, #display_addr mov c, led_lamp 程序最末尾 指令ljmp main存放于 0000H开始的 单元 Copyright 2006 4.定义字节数据伪指令DB 格式:标号: DB 字节数据表 功能:字节数据表可以是多个字节数 据、字符串或表达式,它表示将字节数据表中的 数据从左到右依次存放在指定地址单元。 例如:ORG 1000H TAB: DB 2BH, 0A0H, A, 2*4 ; 表示从1000H单元开始的地方存放数 据2BH,0A0H,41H(字母A的ASCII码), 08H 5.定义字数据伪指令DW 格式:标号: DW 字数据表 功能:与DB类似,但DW定义的 数据项为字,包括两个字节,存放时高位 在前,低位在后。 例如:ORG 1000H DATA: DW 324AH, 3CH ; 表示从1000H单元开始的地方存 放数据32H,4AH,00H ; 3CH(3CH以 字的形式表示为003CH) 6.定义空间伪指令DS 格式:标号: DS 表达式 功能:从指定的地址开始,保留 多少个存储单元作为备用的空间。 如: ORG 1000H BUF: DS 50 ; TAB: DB 22H ;22H存放在1032H单元 。 表示从1000H开始的地方预留50个( 1000H1031H)存储字节空间。 7. 数据地址赋值伪指令XDATA 格式:格式:符号名符号名 XDATA XDATA 表达式表达式 功能:将表达式的值或某个特定功能:将表达式的值或某个特定 汇编符号定义为一个指定的符号名,可以汇编符号定义为一个指定的符号名,可以 先使用后定义,并且用于双字节数据定义先使用后定义,并且用于双字节数据定义 。 例如:例如: DELAY XDATA 0356HDELAY XDATA 0356H LCALL DELAYLCALL DELAY ;执行指令后,程执行指令后,程 序转到序转到03560356H H单元执行单元执行 Copyright 2006 常见的伪指令 8. 符号定义伪指令EQU或“=” 格式:格式:符号名符号名 EQU EQU 表达式表达式 或或 符号名符号名= =表达式表达式 功能:将表达式的值或某个特定汇编符号定义为一个功能:将表达式的值或某个特定汇编符号定义为一个 指定的符号名,只能定义单字节数据,并且必须遵循先定义指定的符号名,只能定义单字节数据,并且必须遵循先定义 后使用的原则,因此该语句通常放在源程序的开头部分。后使用的原则,因此该语句通常放在源程序的开头部分。 例如:例如: LEN=10LEN=10 SUM EQU 21HSUM EQU 21H MOV AMOV A,#LEN#LEN;执行指令后,累加器执行指令后,累加器A A中的值为中的值为0 0AHAH Copyright 2006 题意分析、熟悉并了解汇编语言指令的基本格式和主要特点、明确 被控对象对软件的要求、设计出算法等。 分配内存工作区及有关端口地址。 画出程序流程图。编写较复杂的程序时,画出程序流程图是十分必 要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程 序清晰,结构合理,便于调试。 编制汇编源程序。 仿真、调试和优化程序。 固化程序。 二、单片机汇编语言程序设计的基本步骤如下 Copyright 2006 顺序程序:顺序程序是最简单、最基本的程序结构,其特点是按 指令的排列顺序一条条地执行,直到全部指令执行完毕为止。 分支程序:分支程序是通过转移指令对相应条件的判断实现改变 程序的执行方向的设计方法。 循环程序:在程序中需要反复的执行的程序段,为了避免在程序 中多次的编写,可以通过利用条件转移或无条件转移指令来控制程序的 执行。 三:单片机汇编语言程序主要的几种程序设计方法: Copyright 2006 一、顺序程序 顺序程序是最简单的程序结构,在顺序程序中没 有任何的转移指令,以下是一个典型的例子。 例1:字节(双字)加法。将内部RAM 30H开始的4个单元中存放 的4字节十六进制数和内部RAM 40H单元开始的4个单元中存放的4字节十 六进制数相加,结果存放到40H开始的单元中。(如0a0ab234fh存放在片 内RAM30h开始的4个单元如图所示) 30H 31H 33H 32H 加数 1 存放处 4FH 23H ABH A0H Copyright 2006 题意分析示意图 (1) 题意分析。 题目的要求如图所示。 30H 31H 33H 32H 加数 1 存放处 4FH 23H ABH A0H 43H 42H 41H 40H 7BH 56H 80H E8H 加数 2 存放处 43H 42H 41H 40HCAH 79H 2BH 89H 相加结果存放处 A0AB234F E880567B 892B79CA1 Copyright 2006 ORG 0000H MOV A,30H ADD A,40H MOV 40H,A;最低字节加法并送结果 MOV A,31H ADDCA,41H MOV 41H,A;第二字节加法并送结果 (2) 汇编语言源程序。 按照双字节加法的思路,实现4字节加法的源程序如下 : Copyright 2006 MOV A,32H ADDC A,42H MOV 42H,A;第三字节加法并送结果 MOV A,33H ADDCA,43H MOV 43H,A;第四字节加法并送结果,进位 位在CY中 SJMP $ END Copyright 2006 分支程序 分支程序可以分为: 单分支 双分支 多分支 Copyright 2006 单分支 单分支程序的基本结构: 条件成立? 程序段 下条指令 N Y Copyright 2006 双分支 双分支程序的基本结构: 程序段1 条件成立? 程序段2 NY Copyright 2006 多分支 多分支程序的基本结构: 程序段2 条件N=? 程序段N-1 0N 程序段1程序段N 1N-1 Copyright 2006 例:如图所示,设计一段程序实现功能:如果(A)中1的个数为奇 数,所有的二极管发光;如果全0,则只让VD0-VD3发光;否则全灭。 单分支程序举例 Copyright 2006 开始 位P=1? (A)=0? P1FFHP100HP10FH 结束 Y Y N N ORG 0000H JB P,JISH JZ QUAN MOV P2,#00H SJMP TOend JISHU:MOV P2,#0FFH SJMP TOend QUAN:MOV P2,#0FH TOend: SJMP $ END 流程图:源程序: 判断奇偶标 志位的值 判断(A)的值 是否为0 (A)有偶数个 1,二极管灭 (A)有奇数个1 ,二极管全亮 (A)为0,VD0- VD3亮 注意:在MCS-51单片机中,实现单分支 常用的指令有:JZ、JNZ、DJNZ、 CJNE、JC、JNC、JB、JNB、JBC等 。 虚线框代表 一个单分支 Copyright 2006 双分支程序设计 例:内部RAM的40H单元和50H单元各存放了一个8位无符 号数,请比较这两个数的大小,比较结果用发光二极管显 示(LED为低有效): 若(40H)(50H),则P1.0管脚连接的LED1发光; 若(40H)(50H),则P1.1管脚连接的LED2发光。 Copyright 2006 题意分析: 本例是典型的分支程序,根据两个无符号数的 比较结果(判断条件),分别点亮相应的发光二极 管。 v比较两个无符号数常用的方法是将两个数相减, 然后判断有否借位CY。 若CY=0,无借位,则XY; 若CY=1,有借位,则XY。程序的流程图如下图所 示。 Copyright 2006 两数比较流程图 XY XY, LED1点亮 CY1? XY, Y N LED2点亮 开始 结束 Copyright 2006 源程序如下: X DATA 40H ;数据地址赋值伪指令DATA Y DATA 50H ORG0000H MOV A, X ;(X) A CLRC ;CY=0 SUBBA,Y ;带借位减法,A- (Y)-CYA Copyright 2006 JC L1 ;CY=1,转移到 L1 CLRP1.0 ;CY=0,(40H)(50H),点亮 P1.0 连 接的LED1 SJMP FIN ;直接跳转到结束等待 L1:CLR P1.1 ;(40H)(50H),点亮P1.1接的LED2 FIN:SJMP $ END Copyright 2006 多分支程序举例 例:在某单片机系统中,按下一按键,键值(代表哪个键被按下 )存放在内部RAM的40H单元内。设计一段程序实现功能: 如果(40H)=00H,调用子程序SUB1; 如果(40H)=01H,调用子程序SUB2; 如果(40H)=02H,调用子程序SUB3; 如果(40H)=03H,调用子程序SUB4; 如果(40H)=04H,调用子程序SUB5。 Copyright 2006 流程图 (40H)=? 调SUB1调SUB2调SUB3调SUB4调SUB5 =00H=02H=03H=04H=01H Copyright 2006 程序清单 MOV 40H,A MOV DPTR,#TAB RL A ADD A,40H JMP A+DPTR TAB: LCALL SUB1 LCALL SUB2 LCALL SUB3 LCALL SUB4 LCALL SUB5 设定表格首地址 40H3 传送给A 查表转移 转移地址表 Copyright 2006 循环程序 循环程序是一种很重要的程序结构。结构流程图一般如 下图所示: 循环次数够否? 循环初始化 置循环次数 循环体 下一条指令 N Y Copyright 2006 例1:设计一段程序实现功能:统计(A)中1的个数,把结果存入30H单元 中。 循环程序举例 解题思路:要统计1的个数,可以利用RLC指令把A带上Cy循环左移,如 果移入Cy的是1,就让(30H)加1,重复8次,可以统计出结果。 30H00H R208H(循环次数) RLC A Cy=0? 30H (30H)+1 (R2)-1=0? 下一条指令 N Y Y N MOV 30H,#00H MOV R2,#08H LOOP:RLC A JNC NEXT INC 30H NEXT:DJNZ R2,LOOP 30H赋初始值, 置循环次数 移位,判断Cy 是否为1,为1 则30H自加1 判断是否结束 Copyright 2006 例:将内部RAM单元中20H单元到2FH单元的数传到外 部RAM中的2000H到200FH单元中. R2 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论