《汇编程序设计》PPT课件.ppt_第1页
《汇编程序设计》PPT课件.ppt_第2页
《汇编程序设计》PPT课件.ppt_第3页
《汇编程序设计》PPT课件.ppt_第4页
《汇编程序设计》PPT课件.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

第4章 汇编语言程序设计 本章基本要求 汇编语言的构成 源程序的设计与汇编 应用程序设计 4 1汇编语言的构成 4 1 1程序设计语言用户要使计算机能完成各式各样的任务 就要设计各种相应的应用程序 而设计程序就要用到程序设计语言 程序设计语言有3种 机器语言 汇编语言 高级语言 4 1汇编语言的构成 1 机器语言计算机能直接识别和执行的二进制代码形式的指令称为机器指令 而该类指令的集合称为计算机的机器语言 或称指令系统 机器语言是面向计算机系统的 由于各种计算机内部结构 线路的不同 每种计算机系统都有它自己的机器语言 即使执行同一操作 其指令也不相同 4 1汇编语言的构成 2 汇编语言计算机所能执行的每条指令都对应一组二进制代码 为了容易理解和记忆计算机的指令 人们用一些英语的单词和字符以及数字作为助记符来描述每一条指令的功能 用助记符描述的指令系统 称为机器的汇编语言系统 简称汇编语言 汇编语言也是面向机器的 每种计算机系统也都有它自己的汇编语言 用汇编语言编写的程序 称为汇编语言源程序或汇编源程序 4 1汇编语言的构成 3 高级语言高级语言 如 PASCAL C FORTRAN BASIC等 克服了汇编语言的缺点 是一种面向问题或过程的语言 它是一种接近于自然语言和数学算法的语言 与机器的硬件无关 用户编程时不必仔细了解所用计算机的具体性能和指令系统 高级语言不但直观 易学 易懂 而且通用性强 可以在不同的计算机上运行 因此可移植性好 4 1汇编语言的构成 表4 1机器语言和汇编语言的形式 机器语言中二进制形式不便记忆 常采用十六进制形式记忆 4 1汇编语言的构成 在Keil调试环境下反汇编程序 1 汇编源程序 2 反汇编程序 地址 机器码 反汇编程序 汇编源程序 4 1汇编语言的构成 4 1 2汇编语言格式MCS 51系列单片机是用51系列单片机的指令系统来编程的 其汇编语言的语句格式 也就是单片机的指令格式 即 标号 操作码 操作数 注释 说明 1 内的部分为可选项 2 标号是一条指令在存储器存放的地址 是以字母开头的字母数字串 不可以是保留字 3 操作码和操作数必须按照指令格式书写 4 1汇编语言的构成 举例 ORG0060HSTART MOVA 00H A 0MOVR2 0AH R2 10MOVR1 03H R1 3LOOP ADDA R1 A A R1DJNZR2 LOOP 若R2 1 0 则跳到LOOPNOPSJMP END 4 1汇编语言的构成 4 操作数可以写成以下形式 5种 128页 二进制 十进制 十六进制形式 工作寄存器 特殊功能寄存器 如 R0 R7 A 地址标号 如 M M已在某处定义过 带加减算符的表达式 如 M 1M M已在某处定义过 采用 符如 JNBTF0 4 1汇编语言的构成 举例 MOVA 00110101B A 53MOVA 20D A 20MOVA 20 A 20MOVR0 20H R0 20HMOVR1 0BFH R1 BFHSJMP 原地跳转MOVR7 R2 R7 R2MOVA LABLE A 标号地址MOVA LABLE 1 A 标号地址 1 4 1汇编语言的构成 4 1 3汇编语言构成汇编语言语句分为 指令性语句 指示性语句两类 1 指令性语句包括指令系统中的全部指令 每条指令有对应的机器代码 并可由CPU执行 2 指示性语句在汇编源程序的过程中 还有一些指令不要求CPU进行任何操作 也没有对应的机器码 不影响程序的执行 仅仅是能够指导汇编进行处理的一些指令 称之为伪指令 4 1汇编语言的构成 伪指令的主要功能是 用来指定程序或数据的起始位置 给出一些连续存放数据的确定地址 或为中间运算结果保留一部分存储空间以及表示源程序结束等等 不同版本的汇编语言 伪指令的符号和含义可能有所不同 但是基本用法是相似的 下面介绍几种常用的基本伪指令 MCS 51单片机伪指令 1 起点指令ORG 格式 ORG H 16位地址或标号 功能 给程序起始地址或数据块的起始地址赋值 例 用法 一般出现在每段源程序或数据块的开始一个源程序可多次出现ORG指令 首地址 首地址 2 结束命令END 格式 END 功能 汇编程序结束标志 附在一个源程序的结尾一个源程序只能出现一次END指令 用法 MCS 51单片机伪指令 3 等值命令EQU 格式 字符名称EQU数据或汇编符号 功能 将一个数据或汇编符号 如R0等 赋予标号段规定的字符名称 例 AA与R6等值 MCS 51单片机伪指令 例 A10EQU10DELYEQU07EBHMOVA A10LCALLDELY A10 10 DELY 07EBH 转向入口地址07EBH 使用EQU指令 须先赋值后使用 不能反之 4 数据地址赋值等值命令DATA 格式 字符名称DATA数据或表达式 功能 此命令把数据 代码地址赋予标号段所规定的字符名称 定义的字符名称可先使用后定义 INDEXJXDATA8096H16位地址需要用XDATA INDEXJ这个字符名称的地址为8096H 例 等价于 MCS 51单片机伪指令 EQU与DATA的区别 1 DATA与EQU相似 但DATA定义的字符名称 可先使用后定义 EQU则不能 2 EQU指令可把汇编符号 如Rn 赋给字符名称 DATA则不能 3 DATA可把表达式的值赋给字符名称 EQU则不能 DATA常在程序中定义数据地址EQU常在程序中定义字符数据 MCS 51单片机伪指令 5 定义字节命令DB 格式 功能 标号 DB字节常数或字符串 8位 定义字节的内容 汇编程序把DB定义的字节依次存入标号开始的存储单元 有定义的内存单元地址 项或项表 例 伪指令ORG定义了TAB的起始地址为8000H 伪指令DB定义了8000H 8003单元的内容依次为 8000H 45H 8001H 49H 8002H 35H 8003H 41H 8004H 05H TAB TAB1 1 由ORG定义 2 跟在其他源程序之后 6 定义字命令DW 格式 功能 标号 DW字或字表 定义若干个字 双字节 例 ORG8000H TAB DW7234H 8AH 10 8000H 72H 8001H 34H 8002H 00H 8003H 8AH 8005H 0AH高8位在前低8位在后 汇编后 8004H 00H MCS 51单片机伪指令 7 定义空间命令DS 格式 功能 标号 DS数据或字符及表达式 例 8008H 30H 8009H 8AH 从指定单元地址开始 由数据或字符及表达式的值来定义应保留的单元数 备用 即 8000H 8007H单元保留备用 定义空间 MCS 51单片机伪指令 8 位地址符号命令BIT 格式 字符名称BIT位地址 功能 把位地址赋予标号段的字符名称 P1 0 P2 0赋予位地址字符名称A1 A2 在编程时可以直接把A1 A2当成位地址使用 MCS 51单片机伪指令 4 2汇编源程序的设计与汇编 4 2 1汇编程序设计步骤1 确定方案和计算方法2 了解应用系统的硬件配置 性能指标 3 建立系统数学模型 确定控制算法和操作步骤 4 画程序流程图 表示程序结构和程序功能 5 编制源程序 合理分配存储器单元和了解I O接口地址 按功能设计程序 明确各程序之间的相互关系 用注释行说明程序 便于阅读和修改调试和修改 6 上机调试 对程序的正确性作最后的确定 4 2汇编源程序的设计与汇编 程序设计步骤流程 Y N Y Y Y N N N 4 2汇编源程序的设计与汇编 4 2 2源程序的汇编CPU可以执行的只能是机器码程序 称 把源程序翻译成机器码的过程为汇编 汇编可 人工汇编和机器汇编两类 1 人工汇编由人工直接将汇编源程序翻译成机器码 2 机器汇编使用计算机执行 汇编程序 来代替人工实现将汇编源程序翻译成机器码 汇编语言源程序 机器语言 汇编 反汇编 汇编 汇编程序的操作 分两次扫描 汇编 第一次扫描 汇编 检查语法结构 对源程序中的符号 表达式 标号进行定义 处理伪指令 建立符号表 显示ERROR 并提示行号 显示ERROR 并提示行号 修改 修改 第二次扫描 汇编 汇编成目标代码和汇编程序清单 可执行的代码 机器码 例4 1设在内部RAM的BLOCK单元内有一无符号数据块的长度 无符号数据块起始地址是BLOCK 1 试编程求无符号数据块中数据的累加和 不考虑进位加法之和 并把它存入SUM单元 程序 ORG1000HSUMDATA1FHBLOCKDATA20HSTART MOVR0 BLOCK 数据块长度地址送R0MOVA R0 数据块长度送ACJNEA 00H LOOP 若数据块长度 0 则LOOPHERE SJMP 若数据块长度 0 则结束LOOP CLRANEXT INCR0 修改数据指针ADDA R0 加一个数DJNZBLOCK NEXT 若 BLOCK 1 0 则NEXTMOVSUM A 存累加和SJMPHEREEND 汇编程序经两次汇编得机器码第一次汇编第二次汇编 转移地址计算 LOOP 1008H 1003H 3 02H NEXT 1009H 100BH 3 5 0FBH 1006H 1006H 2 2 0FEH HERE 1006H 1010H 2 12 0F4H 偏移地址 指令所在地址 跳转地址 指令字节数 4 3简单程序与分支程序设计 4 3 1简单程序设计 例4 2 请编写能把20H单元内两个BCD数变成相应的ASCII码并放在21H 高位BCD数的ASCII码 和22H 低位BCD数的ASCII码 单元的程序 程序 ORG0500HMOVR0 22H R0 22HMOV R0 00H 22H 0MOVA 20H A 20H BCD码XCHDA R0 低位BCD码与22H半字节交换ORL22H 30H 加30H完成ASCII码变换SWAPA 高位BCD码高低位半字节交换ORLA 30H 加30H完成ASCII码变换MOV21H A 存入21H单元SJMP END 例4 3 已知一个补码形式的16位二进制 低8位在NUM单元 高8位在NUM 1单元 试编写能求该16位二进制数原码的绝对值得程序 程序 ORG0300HNUMDATA20HMOVR0 NUM R0 NUMMOVA R0 低8位送入ACPLA A求反ADDA 01H A中内容变补 保留CYMOV R0 A 存数INCR0 地址加1 指向高8位MOVA R0 高8位送入ACPLA 取反ADDCA 00H 加进位ANLA 7FH 去掉符号位 多余 MOV R0 A 存数SJMP END 4 3简单程序与分支程序设计 例4 4 已知20H单元中有一个8位二进制数 请编程把它转换为3位BCD数 把百位数存入FIRST单元的低4位 十位和个位BCD数放在SECOND单元 十位BCD数在SECOND单元的高4位 程序 ORG0200HFIRSTDATA30HSECONDDATA31HMOVA 20H A 20H MOVB 64H 除数100DIVAB A 100MOVFIRST A 低8位送入AMOVA B 余数送AMOVB 0AH 除数10DIVAB A 10SWAPA 十位BCD送高4位ORLA B 完成十位和个位装配MOVSECOND A 存入SECOND单元SJMP END 4 3简单程序与分支程序设计 4 3 2分支程序设计可分为无条件和有条件分支程序两类 重点以条件分支举例 例4 5 已知VAR单元内有一自变量 请按如下条件编出求函数值Y 并将它存入FUNC单元的程序 1X 0Y 0X 0 1X 0解 这是一个三分支归一的条件转移问题 两种求解方法 先分支后赋值 先赋值后先分 4 3简单程序与分支程序设计 先分支后赋值 程序 ORG0100HVARDATA30HFUNCDATA31HMOVA VAR A XJZDONE 若 0 则转DONEJNBACC 7 POSI 若 0 则转POSIMOVA 0FFH 若 0 则A 1SJMPDONE 转DONEPOSI MOVA 01H 则A 1DONE MOVFUNC A 存结果SJMP END Y Y N N 一个判断决策框 程序有两条出路 两种分支结构 练习 求R2中补码绝对值 正数不变 负数变补 MOVA R2JNBACC 7 NEXT 为正数 CPLA 负数变补INCAMOVR2 ANEXT SJMPNEXT 结束END 练习 某系有200名学生参加外语统考 若成绩已存放在外部RAM起始地址为ENGLISH的连续存储单元 现决定给成绩在95 100分之间的学生颁发A级合格证书 并给成绩在90 94分之间的学生颁布B级合格证书 试编写程序 统计获得A级和B级证书的学生人数 并把统计结果存入内存RAM的GRADA和GRADB单元 144 4 4循环与查表程序设计 4 4 1循环程序设计循环程序一般由四部分组成 循环初始化 循环处理 循环控制 循环结束 循环程序一般使用两种结构 如下图 循环程序的构成 各个环节任务 一 初始化部分循环准备工作 如 清结果单元 设指针 设循环控制变量初值等 二 循环体循环工作部分 需多次重复处理的工作 循环控制部分 1 修改指针和循环控制变量 2 检测循环条件 满足循环条件 继续循环 否则退出循环 三 结束部分处理和保存循环结果 允许0次循环的循环结构 在循环工作之前检测循环条件 4 4循环与查表程序设计 一 单重循环 例 求n个单字节数据的累加 设数据串已在43H起始单元 数据串长度在42H单元 累加和不超过2个字节 SUM MOVR0 42H 设指针MOVA R0MOVR2 A 循环计数器 nCLRA 结果单元清0MOVR3 AADD1 INCR0 修改指针ADDA R0 累加JNCNEXT 处理进位INCR3 有进位 高字节加1NEXT DJNZR2 ADD1 循环控制 数据是否加完 MOV40H A 循环结束 保存结果MOV41H R3RET 简单循环结构 循环体中不套循环 找正数表最小值 正数表存在片外RAM中以LIST为起始单元 用 1作为结束标志 START MOVDPTR LIST 数表首地址MOVB 127 预置最小值NEXT MOVXA DPTR 取数INCDPTR 修改指针CJNEA 1 NEXT1 是否为数表结尾 SJMPDONE 循环结束NEXT1 CJNEA B NEXT2 比较NEXT2 JNCNEXTMOVB A 保存较小值SJMPNEXTDONE SJMPDONE 练习 二 多重循环 例将内存一串单字节无符号数升序排序 步骤 每次取相邻单元的两个数比较 决定是否需要交换数据位置 第一次循环 比较N 1次 取到数据表中最大值 第二次循环 比较N 2次 取到次大值 第N 1次循环 比较一次 排序结束 循环体中套循环结构 以双重循环使用较多 SORT MOVA N 1 N个数据排序MOVR4 A 外循环次数LOOP1 MOVA R4MOVR3 A 内循环次数MOVR0 TAB 设数据指针LOOP2 MOVA R0 取二数MOVB AINCR0MOVA R0CJNEA B L1 比较L1 JNCUNEX A B 不交换DECR0 否则交换数据XCHA R0UNEX INCR0MOV R0 ADJNZR3 LOOP2 内循环结束 DJNZR4 LOOP1 外循环结束 RET 4 4循环与查表程序设计 4 4 2查表程序设计所谓查表是依据ROM中的数据表格的项数来查找与之对应的表中数值 有两条专门的查表指令 MOVCA A DPTRMOVCA A PC查表指令一般用于代码转换 显示 散转等应用场合 当用DPTR作基址寄存器时 查表的步骤分三步 基址值 表格首地址 DPTR 变址值 表中要查的项与表格首地址之间的间隔字节数 A 执行MOVCA A DPTR 当用PC作基址寄存器时 其表格首地址与PC值间距不能超过256字节 且编程要事先计算好偏移量 比较麻烦 因此 一般情况下用DPTR作基址寄存器 例 在单片机应用系统中 常用LED数码管显示数码 但显示数字 9 与显示数字编码并不相同 需要将显示数字转换为显示字段码 通常是用查表的方法 现要求将30H中的显示数字转换为显示字段码并存入30H 已知共阴字段码表首址为TABD 程序如下 CHAG MOVDPTR TABD 置共阴字段码表首址MOVA 30H 读显示数字MOVCA A DPTR 查表 转换为显示字段码MOV30H A 存显示字段码RET TABD DB3FH 06H 5BH 4FH 66H 0 4共阴字段码表DB6DH 7DH 07H 7FH 6FH 5 9共阴字段码表 程序如下 CUBE MOVDPTR TAB 置立方表首址MOVA 30H 读数据ADDA 30H 数据 2 AMOV30H A 暂存立方表数据序号MOVCA A DPTR 读立方数据高8位XCHA 30H妙 存立方数据高8位 立方表数据序号 AINCA 指向立方数据低8位MOVCA A DPTR 读立方数据低8位MOV31H A 存立方数据低8位RET TAB DW0 1 8 27 64 125 216 343 512 729 1000 0 40立方表DW1331 1728 2197 2744 3375 4096 64000 说明 数据 2 A原因是立方表数据为双字节 例 用查表程序求0 40之间整数的立方 已知该整数存在内RAM30H中 查得立方数存内RAM30H 高8位 31H 已知立方表 双字节 首地址为TAB 4 5子程序与运算程序设计 4 5 1子程序设计回顾子程序的作用 结构 以及与主程序的关系 汇编程序设计中子程序调用方法 程序要求 设计子程序时注意 1 子程序的第一条指令的地址为入口地址 一般使用标号代替 该标号也叫做子程序名 2 子程序中必须使用RET指令 3 调用子程序之前设置好堆栈 4 在子程序中注意保护CPU的状态 5 子程序入口参数的传送可以使用 指定RAM单元 R0 R7寄存器 堆栈 位地址等来传送 子程序的类型 按子程序与主程序之间传递参数的方式分类 入口参数 调用子程序之前 需要传给子程序的参数 出口参数 子程序送回调用程序的结果参数 选用不同的参数传递方式 1 寄存器传送参数2 存储器传送参数3 堆栈传送参数 设计子程序应满足通用性的要求 不针对具体数据编程 例如 1 子程序功能为求单字节数的立方 A A3 入口参数和出口参数为A 2 子程序功能为求单字节数的n次方 41H 42H 40H A 入口参数为 40H 和A 出口参数为 42H 41

温馨提示

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

评论

0/150

提交评论