- 1、本文档共44页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]ch04
ASM-51宏汇编程序设计语言 汇编语言语句及其结构 伪指令 常用程序设计方法 模块化程序设计 程序的调试和运行 8.1 汇编语言语句结构 指令与伪指令 指令——产生可执行代码 伪指令——不产生机器码 指示汇编器如何生成代码 确定各段的存储位置(代码段和各种数据段) 将存储单元指定为合适的变量名,并分配地址 以标号指定转移或调用所需要的符号地址 提供表达式,简化常数计算,数制自动转换 汇编语言程序的组成 机器指令(machine instruction) 全体指令的集合,形成可执行机器码 伪指令(assembler directives) 定义程序结构、符号(变量、地址),非执行语句 (汇编器)控制( assembler controls) 控制汇编模式、汇编流程(代码生成) 如 IF … ELSEIF … 程序行组成 [标号][:] 操作码 [操作数][,操作数] [; 注释] 指令、伪指令,格式相同,可选项不同; 操作码是指令或伪指令的助记符; 标号由字母和数字构成,以字母开头 标号若具有地址属性,则后跟冒号“:”;其他情况就不需要冒号。 必要时加注释,说明所在行的程序功能。不能是对指令的重复解释。 8.1.2程序行中的常数 后缀D、H、B区别进制,最高位数字以A-F开头,必须加数字0,如#0A3H; 字符或字符串用引号写出,如′A′,′ABCD′,这样可代替ASCII码,免去手工查表的麻烦。 需要注意的是,凡10进制数,均自动转换为计算机中的二进制表达。 汇编时选择足够的字长来保存中间数据,但将该数编码为指令中的一部分时,超出规定字长的高位信息自动丢失。 8.1.3程序行中的表达式 表达式中可有运算符号,包括“+、-、×、÷、()” 例如 X EQU 20h MOV A,#HIGH(X-100h) MOV B,#LOW(X-100h) MOV R0,#25*4 这里X-100h = 20h-100h = FF20h HIGH、LOW分别取高字节和取低字节,上面两行等价于: MOV A,#0FFH MOV B,#20H 运算符中的运算汇编过程中执行 程序运行期间,只有真正的指令才能被执行。 运算符的作用仅仅是减少手工计算 8.2伪指令 在汇编源程序的过程中, 还有一些指令不要求计算机进行任何操作, 也没有对应的机器码, 不产生目标程序, 不影响程序的执行, 仅仅是能够帮助汇编进行的一些指令, 称之为伪指令。 它主要用来指定程序或数据的起始位置, 给出一些连续存放数据的确定地址, 或为中间运算结果保留一部分存储空间以及表示源程序结束等等。 不同版本的汇编语言, 伪指令的符号和含义可能有所不同, 但是基本用法是相似的。 下面介绍几种常用的基本伪指令。 一、段定义伪指令 程序运行需要代码段、数据段和堆栈段 MCS-51的存储器组织有其自身特色 根据MCS-51的特点,有以下各种段 直接寻址的数据段 间接寻址的数据段 可位寻址的数据段字节寻址 位寻址的段 扩展数据段(16位地址) 代码段 堆栈段 存储空间回顾 二、段定义伪指令 格式 segment(段名) SEGMENT class segment是段名 class是类型 关于可重定位段的伪指令 段名 SEGMENT 类型 类型为 BIT,CODE,DATA,IDATA,XDATA之一 RSEG 段名 说明所指段名为一个相对的段,可以重新定位 例: M_DAT SEGMENT DATA RSEG M_DAT M_COD SEGMENT DATA RSEG M_COD STACK SEGMENT IDATA RSEG STACK RSEG segment RSEG 将一个段说明为可重新定位的相对段,其中segment 是被定义过的段名。 一个可重新定位的代码段,其所有标号所代表的地址是相对的; 一个可重新定位的数据段,则变量的地址是相对的。 连接程序在将多个模块的同类段合并时,生成具有绝对地址的可执行程序。 例2 关于绝对段的伪指令 定位地址范围 CSEG 代码段 0000-FFFF DSEG 内部RAM 00-7F(直接寻址) BSEG 位寻址段20H.0~ ISEG 内部RAM 00-FF(间接寻址) XSEG 外部RAM 0000-FFFF 三、符号定义伪指令 (1) 设置目标程序起始地址伪指令ORG。 格式: [标号: ]ORG 16位地址 该伪指令的功能是规定其后面目标程序的起始地址。 它放在一段源程序(主程序、 子程序)或数据块的前面, 说明紧跟在其后的程序段或数据块的起始地址就
文档评论(0)