汇编语言程序设计11.ppt_第1页
汇编语言程序设计11.ppt_第2页
汇编语言程序设计11.ppt_第3页
汇编语言程序设计11.ppt_第4页
汇编语言程序设计11.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第 4 章 汇编语言程序设计简介 伪 指 令 一、 汇编起始指令 ORG 指令格式为: ORG nn 该指令的作用是指明后面的程序或数据块的起始地址, 它总是出现在每段源程序或数据块的开始。 式中, nn为 16 位 地址, 汇编时nn确定了此语句后面第一条指令或第一个数据 的地址,此后的源程序或数据块就依次连续存放在以后的地址 内, 直到遇到另一个ORG指令为止。 第 4 章 汇编语言程序设计简介 例: ORG 2000H MOV SP, 60H MOV R0, 2FH MOV R2, 0FFH ORG伪指令说明其后面程序的目标代码在存储器中存放的 起始地址是2000H, 即 存储器地址 目标程序 2000H 75 81 60 2003H 78 2F 2005H 7A FF 第 4 章 汇编语言程序设计简介 二、等值指令EQU 指令格式: 字符名称 EQU 数字或汇编符号 功能: 使指令中的字符名称等价于给定的数字或汇编符号。 使用等值指令可给程序的编制、调试、修改带来方便, 如果 在程序中要多次使用到某一地址,由EQU指令将其赋值给一个字 符名称, 一旦需要对其进行变动, 只要改变EQU命令后面的数字 即可, 而不需要对程序中涉及到该地址的所有指令逐句进行修 改。 但要注意, 由 EQU等值的字符名称必须先赋值后使用, 且 在同一个源程序中, 同一个标号只能赋值一次。 例: PA8155 EQU 8001H 即给标号PA8155赋值为8001H。 第 4 章 汇编语言程序设计简介 三、 定义字节指令DB 指令格式: 标号: DB 8位二进制数表 功能: 把 8 位二进制数表依次存入从标号开始的连续的 存储单元中。 格式中, 标号区段可有可无, DB指令之后的 8 位二进制 数表是字节常数或用逗号隔开的字节串, 也可以是用引号括 起来的ASCII码字符串 (一个 ASCII字符相当于一个字节)。 例: 第 4 章 汇编语言程序设计简介 ORG 1000H BUF1: DB 38H, 7FH, 80H BUF2: DB 45H, 66H ORG伪指令指定了标号BUF1的地址为1000H, 而DB伪 指令是将其后的二进制数表38H, 7FH, 80H依次存放在 1000H, 1001H, 1002H 3 个连续单元之中, BUF2也是一个标 号, 其地址与前一条伪指令连续, 即1003H, 1004H地址单元 中依次存放 45H, 66H。 第 4 章 汇编语言程序设计简介 四、 定义字指令DW 指令格式: 标号: DW 16 位数据表 该指令的功能与DB相似, 区别仅在于从指定地址开始存 放的是指令中的 16 位数据, 而不是字节串。每个 16 位数据 要占两个存储单元, 高8 位先存, 低 8 位后存, 这和MCS -51指 令中的16位数据存放顺序是一致的。 第 4 章 汇编语言程序设计简介 五、 汇编结束指令END 指令格式: 标号: END 地址或标号 格式中标号以及END后面的地址或标号可有可无。 功能: 提供汇编结束标志。汇编程序遇到 END后就停 止汇编, 对 END以后的语句不予处理, 故 END应放在程序 的结束处。 第 4 章 汇编语言程序设计简介 例 1 工作单元清零。 在应用系统程序设计时, 有时经常需要将存储器中各部 分地址单元作为工作单元, 存放程序执行的中间值或执行结 果, 工作单元清零工作常常放在程序的初始化部分中。 设有50个工作单元, 其首址为外部存储器8000H单元, 则 其工作单元清零程序如下: 第 4 章 汇编语言程序设计简介 CLEAR: CLR A MOV DPTR, 8000H ; 工作单元首址送指针 MOV R2, 50 ; 置循环次数 CLEAR1: MOVX DPTR, A INC DPTR ; 修改指针 DJNZ R2, CLEAR1; 控制循环 RET 第 4 章 汇编语言程序设计简介 例 2 多重循环: 10 秒延时程序。 延时程序与 MCS - 51 执行指令的时间有关, 如果使用 6 MHz晶振, 一个机器周期为 2 s, 计算出一条指令以至一个循 环所需要的执行时间, 给出相应的循环次数, 便能达到延时的 目的。10 秒延时程序如下: DELAY: MOV R5, 100 DEL0: MOV R6, 200 DEL1: MOV R7, 248 DEL2: DJNZ R7, DEL2 DJNZ R6, DEL1 DJNZ R5, DEL0 RET 第 4 章 汇编语言程序设计简介 上例程序中采用了多重循环程序, 即在一个循环体中又包 含了其它的循环程序, 这种方式是实现延时程序的常用方法。 使用多重循环时, 必须注意: (1) 循环嵌套, 必须层次分明, 不允许产生内外层循环交叉 。 (2) 外循环可以一层层向内循环进入, 结束时由里往外一 层层退出。 (3) 内循环可以直接转入外循环, 实现一个循环由多个条 件控制的循环结构方式。 第 4 章 汇编语言程序设计简介 例3 在内部 RAM中从 50H单元开始的连续单元依次存 放了一串字符, 该字符串以回车符为结束标志, 要求测试该字 符串的长度。 程序如下: START: MOV R2, 0FFH MOV R0, 4FH ; 数据指针R0置初值 LOOP: INC R0 INC R2 CJNE R0, 0DH, LOOP RET 第 4 章 汇编语言程序设计简介 散转程序设计 散转程序是分支程序的一种, 它可根据运算结果或输入 数据将程序转入不同的分支。MCS - 51 指令系统中有一条跳 转指令JMPA+DPTR, 用它可以很容易地实现散转功能。该 指令把累加器的 8 位无符号数与 16 位数据指针的内容相加, 并把相加的结果装入程序计数器PC, 控制程序转向目标地址 去执行。此指令的特点在于, 转移的目标地址不是在编程或 汇编时预先确定的, 而是在程序运行过程中动态地确定的。 目标地址是以数据指针 DPTR的内容为起始的 256 字节范围 内的指定地址, 即由 DPTR的内容决定分支转移程序的首地址 , 由累加器 A的内容来动态选择其中的某一个分支转移程序 。 第 4 章 汇编语言程序设计简介 例 4 根据工作寄存器R0 内容的不同, 使程序转入相应 的分支。 (R0)=0 对应的分支程序标号为PR0; (R0)=1 对应的分支程序标号为PR1; (R0)=N 对应的分支程序标号为PRN。 第 4 章 汇编语言程序设计简介 程序如下: LP0: MOV DPTR, TAB ; 取表头地址 MOV A, R0 ADD A, R0 ; R0内容乘以2 JNC LP1 ; 无进位转移 INC DPH ; 加进位位 LP1: JMP A+DPTR; 跳至散转表中相应位置 TAB: AJMP PR0 AJMP PR1 AJMP PRN 第 4 章 汇编语言程序设计简介 本例程序仅适用于散转表首地址 TAB和处理程序入口 地址 PR0, PR1, , PRN在同一个 2 KB范围的存储区内的情 形。若超出 2 KB范围可在分支程序入口处安排一条长跳转 指令, 可采用如下程序: MOV DPTR, TAB MOV A, R0 MOV B, 03H ; 长跳转指令占 3 个字节 MUL AB ;乘3后的偏移量高8位与DPH相加 XCH A, B ;低8位与DPL相加 第 4 章 汇编语言程序设计简介 ADD A, DPH MOV DPH, A XCH A, B JMP A+DPTR; 跳至散转表中相应的位置 TAB: LJMP PR0; 跳至不同的分支 LJMP PR1 LJMP PRN 第 4 章 汇编语言程序设计简介 例5 把内部RAM某一单元中一个字节的十六进制数转换 成两位ASCII码, 结果存放在内部RAM的连续两个单元中。 假设一个字节的十六进制数在内部 RAM 40H单元, 而结 果存入 50H#, 51H单元, 可以用堆栈进行参数传递, 程序如下 : MAIN: MOV R1, 50H ; R1 为存结果的指针 MOV A, 40H ; A为需转换的十六进制数 SWAP A ; 先转换高位半字 PUSH ACC ; 压栈 LCALL HEASC ; 调用将低半字节的内容转换; 成ASCII码子程序HEASC POP ACC MOV R1, A ; 存高半字节转换结果 INC R1 PUSH 40H 第 4 章 汇编语言程序设计简介 LCALL HEASC POP ACC MOV R1, A ; 存低半字节转换结果 END HEASC: MOV R0, SP DEC R0 DEC R0 ; R0 指向十六进制数参数地址 XCH A, R0 ; 取被转换参数 ANL A, 0FH ; 保留低半字节 ADD A, 2 ; 修改 A值 MOVC A, A+PC ; 查表 XCH A, R0; 结果送回堆栈 RET TAB: DB 30H, 31H, 32H, 第 4 章 汇编语言程序设计简介 查表程序设计 查表程序是一种常用程序, 它广泛使用于 LED显示控制 、 打印机打印控制、数据补偿、数值计算、转换等功能程序 中, 这类程序具有简单、执行速度快等特点。 所谓查表法, 就是预先将满足一定精度要求的表示变量与 函数值之间关系的一张表求出, 然后把这张表存于单片机的程 序存储器中, 这时自变量值为单元地址, 相应的函数值为该地 址单元中的内容。查表, 就是根据变量 X在表格中查找对应的 函数值 Y, 使 Y=f(X)。 第 4 章 汇编语言程序设计简介 MCS - 51指令系统中, 有两条查表指令: MOVC A, A+PC MOVC A, A+DPTR 第 4 章 汇编语言程序设计简介 例 6 一个十六进制数存放在内部 RAM 的 HEX单元的低 4 位中, 将其转换成ASCII码并送回 HEX单元。 十六进制 09的ASCII码为 30H39H, AF的ASCII 码为41H46H, ASCII码表格的首地址为ASCTAB。编程如下 : ORG 1000H HEXASC: MOV A, HEX ANL A, 0FH ADD A, 3; 修改指针 MOVC A, A+PC MOV HEX, A RET 第 4 章 汇编语言程序设计简介 ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H DB 46H 在这个程序中, 查表指令MOVC A, A+PC到表格首地 址有两条指令, 占用 3 个字节地址空间, 故修改指针应加 3。 第 4 章 汇编语言程序设计简介 例 7 设有一个巡回检测报警装置, 需对 n路输入进行控 制, 每路有一个额定的最大值, 是双字节数。当检测量大于该 路对应的最大值时, 就越限报警。假设R2 为保存检测路数的 寄存器, 其对应的最大额定值存放于 31H和 32H单元中。 查 找最大额定值的程序如下: FMAX: MOV A, R2 ADD A, R2 ; 表中一个额定值为2个字节 MOV 31H, A MOV DPTR, TAB ; 表首址 第 4 章 汇编语言程序设计简介 MOVC A, A+DPTR; 查表读取第一个字节 XCH A, 31H ; 第一个字节内容存入31H INC DPTR MOVC A, A+DPTR; 查表读取第二个字节 MOV 32H, A ; 第二字节的内容存入32H TAB: DW 1230H, 1450H, . DW 2230H, 2440H, . DW 3120H, 3300H, . 第 4 章 汇编语言程序设计简介 4-7 汇编语言及汇编过程 一、汇编程序功能 源程序 (汇编指令程序) 汇编 目标程序 (机器码指令程序) 汇编指令与机器码指令有一一对应的关系。 汇编程序是一种翻译程序,将源程序翻译成目标程序。 第 4 章 汇编语言程序设计简介 二、汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。 1、手工汇编: 第一次汇编:确定地址,翻译成各条机器码,字符标号 原样写出; 第二次汇编:标号代真,将字符标号用所计算出的具体 地址值或偏移 量代换。 第 4 章 汇编语言程序设计简介 源程序 目标程序 地址 ORG 1000H START:MOV R0,2FH MOV R2,#00H MOV A,R0 MOV R3,A INC R3 SJMP NEXT LOOP:INC R0 CJNE R0,#44H,NEXT INC R2 NEXT:DJNZ R3,LOOP MOV 2AH,R2 SJMP $ END 第一次汇编第二次汇编 1000 A82F 1002 7A00 1004 E6 10

温馨提示

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

最新文档

评论

0/150

提交评论