




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4 1汇编语言语句种类及其格式汇编程序是计算机的系统软件之一 它的作用是将汇编语言源程序翻译成机器语言程序 最常用的支持Intel8086 8088系列微机的汇编程序MASM 是美国Microsoft公司开发较早的宏汇编程序 它不仅具有ASM的全部功能 支持基本汇编语言 而且增加了宏指令 结构 记录等高级宏汇编功能 语句 Statement 是汇编语言源程序的基本组成单位 一个汇编语言源程序有三种基本语句 指令语句 伪指令语句 宏指令语句 第4章MASM汇编语言基础 4 1 1指令语句每一条指令语句在汇编时都要产生一个可供机器执行的目标代码 因此 也被称为可执行语句 格式如图4 1所示 图4 1指令语句的格式 一条指令语句有如下4个字段 1 标号字段这是一个可选字段 标号必须以 作为结束符 一个标号是一条指令的符号地址 它代表该指令的第一个字节的地址 2 指令助记符字段这是一条指令中不可缺少的主要成分 它表示这条语句要求CPU完成什么操作 3 操作数字段参与操作的数据或地址 指令语句可以有一个操作数 两个操作数或无操作数 4 注释字段这是一个可选字段 注释字段必须以分号 为开始 它可以方便程序设计人员对程序或指令加以注释 提高程序的的可读性 4 1 2伪指令语句伪指令本身不产生与之对应的目标代码 它是在汇编程序对汇编语言源程序汇编期间 由汇编程序处理的操作 可以完成数据定义 分配存储区 指示程序结束等任务 图4 2伪指令语句的格式 一条伪指令语句也有如下4个字段 1 符号名字段这是一个可选字段 符号名后面不得用冒号 这是它与指令语句格式上的唯一区别 2 伪指令字段这是伪指令语句中不可省略的主要成分 是伪指令语句要求汇编程序完成的具体操作命令 3 操作数字段这是数据项 本字段是否需要 需要几个 需要什么样的操作数等都由伪指令字段中伪指令来确定 4 注释字段这是一个任选字段 它必须以分号为开始 它的作用与指令语句的注释字段相同 4 2汇编语言数据通常汇编语言能识别的数据有 常量 变量和标号 4 2 1常量常量 出现在8086源程序中的固定值 1 十进制常量 以字母D结尾的0 9的数字序列 其中字母D可以省略 2 二进制常量 以字母B结尾的0和1组成的数字序列 3 八进制常量 以字母O或Q结尾的0 7的数字序列 4 十六进制常量 以字母H结尾的0 9和A F 或a f 的数字字母序列 注意 若最高位数是A F 则前面需加 0 5 字符串常量 用单引号或双引号括起来的一个或多个字符 这些字符用它的ASCII码值存储在内存中 4 2 2变量变量就是用来表示程序中所用的内存操作数 1 定义格式 变量名 类型助记符操作数 操作数 其中变量名字段是可有可无的 它用于指示内存操作数的地址 符号地址 操作数字段用于指示内存操作数 汇编程序将定义的内存操作数 按其类型给它们分配内存单元 常用的有以下几种 DB伪指令用来定义字节 其后的每个操作数都占用1个存储单元 DW伪指令用来定义字 其后的每个操作数都占用2个存储单元 低位字节存放在低地址 高位字节存放在高地址 DD伪指令用来定义双字 其后的每个操作数都占用4个存储单元 DQ伪指令用来定义四个字 其后的每个操作数都占用8个存储单元 2 变量的三个属性 1 段属性SEG它表示变量存放在哪一个逻辑段中 当指令中要对这些变量进行存取操作时 事先要把它们所在的段的段基址存放到段寄存器中 2 偏移量属性OFFSET表示变量在逻辑段中离段起始点的字节距离 上述段属性和偏移量属性就构成了变量的逻辑地址 3 类型属性TYPE表示变量占用存储单元的字节数 并非总字节数 它由类型助记符DB DW DD DQ来规定 即由数据定义伪指令确定的 3 预置初值变量定义格式中的操作数部分 实际上就是给变量预置初值 它们通常有以下几种情况 1 数值表达式 表示内存操作数的初始值 其值应在其定义的类型范围内 如 xxDB1 1yyDW2 16 1 2 问号表达式 不带引号的 表示可预置任何内容 如 ccDB 3 字符串表达式 对于DB伪指令 为字符串中每个字符分配一个字节单元 字符串必须是引号括起来的 不超过255个字符 对于DW伪指令 可以给两个字符组成的字符串分配两个字节的存储单元 而且这两个字符的ASCII码的存储顺序是前一个字符在高字节 后一字符在低字节 每一个数据项只能是1 2个字符 相当于定义字 对于DD伪指令 仅可给两个字符组成的字符串分配4个字节的单元 且这两个ASCII码是存储在两个低字节 存储顺序与DW伪指令相同 中 两个高字节均存放00H 相当于定义一个双字 4 带DUP表达式 DUP是定义重复数据操作符 在操作数部分的格式为 重复次数DUP 重复的内容 DUP可以嵌套使用 举例 jiaDB2DUP 3 0FH a jinDB3DUP 2DUP 0E5H 8 jia jin 其中jia jin是变量名 4 变量的使用 1 在指令语句中 如果要对某存储单元进行存取操作 就可直接引用它的变量名 若操作数采用直接寻址 变量的偏移量作为操作数偏移量 而操作数若采用了寄存器相对寻址或相对基址变址寻址 此时变量的偏移量就作为操作数的位移量 2 在伪指令语句中 定义变量时引用了另一个变量 则这个变量的内容均是被引用变量的逻辑地址 如用DW 则仅有偏移量 如用DD则前两个字节存放偏移量 后两个字节存放段地址 注意不能用DB引用变量名 4 2 3标号 Label 1 定义 标号是一条指令目标代码的符号地址 它常作为转移指令或调用指令的操作数 2 标号的三个属性 1 段属性 表示这条指令的目标代码在哪个逻辑段中 2 偏移量属性 表示这条指令目标代码的首字节在段内离段起始点的字节距离 3 距离属性 或类型属性 4 3 1算术运算符算术运算符有 加 减 乘 整除 MOD 求余 4 3 2逻辑运算符逻辑运算符有4个 AND 与 OR 或 NOT 非 和XOR 异或 逻辑运算是按位进行的 4 3表达式与运算符 4 3 3关系运算符这6个关系运算符分别是 GT 大于 GE 大于等于 LT 小于 LE 小于等于 EQ 等于 和NE 不等于 它们用于比较两个表达式 若是常数 按无符号数比较 若是变量则比较它们的偏移量 比较的结果为真 表示为全1 结果为假 表示为全0 4 3 4数值返回运算符数值返回运算符有5个 分别是 SEG OFFSET TYPE LENGTH和SIZE 这种运算符的对象必须是存储器操作数 即变量名或标号 通过运算后返回的是一个数值 下面分别说明各运算符的功能 1 SEG格式 SEG变量名或标号当运算符SEG加在一个变量名或标号前面时 汇编程序回送的运算结果是这个变量或标号所在的段的段基址 2 OFFSET格式 OFFSET变量名或标号当运算符OFFSET加在一个变量名或标号前面时 汇编程序回送的运算结果是这个变量或标号所在的段的偏移量 3 TYPE格式 TYPE变量名或标号如果是变量 则汇编程序将回送该变量的以字节数表示的类型 DB为1 DW为2 DD为4 DQ为8 如果是标号 则汇编程序将回送代表该标号类型的数值 NEAR为 1 FAR为 2 4 LENGTH格式 LENGTH变量名如果变量是用重复数据操作符DUP说明的 汇编程序将回送外层DUP给定的值 如果变量没有用DUP说明 则返回的值总是1 5 SIZE格式 SIZE变量名运算符SIZE加在变量的前面 汇编程序回送的值等于LENGTH和TYPE两个运算符返回值的乘积 实际上就是数据的存储单元数 4 3 5属性修改运算符这种运算符是对变量 标号或某存储器的类型属性进行修改指定 它主要有PTR 段跨越前缀 SHORT HIGH和LOW等5种 1 PTR格式 类型PTR地址表达式其中 地址表达式是指要修改类型属性的标号或存储器操作数 如果它是标号 则与之对应的类型有 NEAR FAR 如果它是存储器操作数 则与之对应的类型有 BYTE WORD DWORD 2 段跨越前缀它是在存储器操作数之前加上段寄存器名和冒号用于强行指定此存储器操作数相对哪个段寄存器 共有4种 DS CS SS 和ES 3 SHORT用来修饰JMP指令中转向地址的属性 指出转向地址是在下一条指令地址的 128 127字节范围之内 4 HIGH LOW格式 HIGH常数或地址表达式 表示取高字节 LOW常数或地址表达式 表示取高字节 这两个运算符称为字节分离操作符 它接收一个常数或地址表达式 HIGH取其高位字节 LOW取其低位字节 其中地址表达式必须具有常量值 HIGH LOW运算符用于分离出段地址或偏移量的高字节 低字节 表达式中运算符的计算顺序首先应该计算优先级别高的运算符 然后从左往右地对优先级别相同的运算符进行计算 表4 1运算符的优先级别关系表 4 4 1段定义伪指令格式 段名SEGMENT 段名ENDS一个完整的汇编源程序中可以定义多个段 但同时起作用的最多只有4个 每一个段都是由伪指令SEGMENT开始 由ENDS结束 SEGMENT和ENDS必须成对出现 并且在SEGMENT和ENDS的前面都必须有同一个段名 SEGMENT和ENDS语句之间的省略号部分 对于代码段来说 主要是指令 也可以有伪指令 对于数据段 附加段和堆栈段来说 一般是存储单元的定义 分配等伪操作 4 4程序的段结构 4 4 2段寻址伪指令该伪指令用来指明所定义的段与段寄存器的关系其格式如下 ASSUME段寄存器名 段名 段寄存器 段名 其中段寄存器名为CS DS ES SS中的一个 段名则必须是由SEGMENT定义过的段名 段寄存器名和段名之间必须有冒号 ASSUME伪操作的作用是指示汇编程序指令中用到的标号 过程及变量所在的段 在代码段中 可以随时用ASSUME伪指令修改 段寄存器名 段名 的联系 4 4 3段寄存器的装入1 DS和ES的装入在程序中 引用段名就是以立即数形式获取该段的段基址 而立即数又不能直接送给段寄存器 所以一个段的段基址要经过通用寄存器传送给DS ES 如 MOVAX DATAMOVDS AX2 SS的装入装入的办法有两个 1 在段定义伪指令 SEGMENT 的组合类型中选择 STACK 参数 且在段寻址伪指令 ASSUME 中 把堆栈用的这一个段指派给段寄存器SS 2 可用类似DS ES的装入办法 用几条指令实现对SS和SP的装入 用户定义的数据段名 3 CS的装入用DS ES的装入办法 那么为装入CS IP的新值需要执行几条指令 对CS IP的装入通常是 按照END结束伪指令指定的地址装入CS IP 任何一个源程序都是以END伪指令来结束 格式 END起始地址起始地址可以是一个标号或表达式 END伪指令的作用是指示源程序到此结束和指定程序运行时的起始地址 4 5 1符号定义语句1 等值语句就是赋值语句格式 符号EQU表达式其中EQU是等值伪指令 把表达式的值或符号赋给EQU左边的符号 表达式可以是 1 常量表达式 2 地址表达式 3 变量 标号或指令助记符 4 5其它常用伪指令 等值语句仅在汇编源程序时 作为替代符号用 不产生任何的目标代码 也不占有存储单元 因此 等值语句左边的符号没有段 偏移量 类型三个属性 在同一源程序中 同一符号在EQU语句未解除之前不能用EQU伪指令重新定义 NUMEQU10HNUMEQU20H 第二条EQU语句因为符号重定义而出现语法错误 已经用EQU定义的符号 若以后不再用了就可以用PURGE语句来解除 PURGE语句的格式如下 PURGE符号1 符号2 符号n 注意事项 2 等号语句格式 符号 表达式此语句的功能与EQU等值语句类似 其最大的特点是能对符号进行重定义 4 5 2程序开始和结束伪指令1 开始伪指令NAME的格式 NAMEmodule name汇编程序将以给出的module name作为模块的名字 如果程序中没有NAME伪指令 则可使用TITLE伪指令 其格式 TITLEtext2 程序结束伪指令表示源程序结束的伪指令的格式 END 起始标号 一般情况下 NAMEmodule name 或 TITLEtext 与END配合使用 不使用模块名时则用 END起始标号 结束程序 这时只在代码段中第一条可执行指令之前加一个标号作为起始标号就可以了 1 定位伪指令 ORG 定位伪指令ORG的格式 ORG表达式它表示把表达式的值赋给当前位置计数器 ORG语句后的指令或数据以表达式给定的值作起始偏移量 2 当前位置计数器 表示当前指令的地址 符号 代表当前位置计数器的现行值 4 5 3定位伪指令 ORG 和当前位置计数器 4 5 4过程定义伪指令在程序设计中 通常把具有一定功能的程序段设计成一个子程序 过程定义伪指令格式如下 过程名PROC NEAR FAR RET过程名ENDP 过程名就是过程调用指令CALL的目标操作数 它类同于标号的作用 同样具有三个属性 当没有定义它的距离属性时 隐含为NEAR 段属性 偏移量属性和距离属性 1 编辑调用编辑程序EDIT EXE WS EXE等 用键盘敲入源程序 退出编辑系统时 保存编辑完成的文件 且扩展名为 ASM 2 汇编汇编就是用宏汇编程序MASM EXE把汇编语言源程序翻译 汇编 成机器语言的目标程序 宏汇编程序主要有以下功能 检查源程序中语法错误 给出错误信息 展开宏指令 产生目标程序 OBJ 列表文件 LST 和交叉引用文件 CRF 假设现已编辑完成了源程序TEST ASM 在操作系统状态下 直接调用宏汇编程序MASM EXE对它进行汇编 4 6汇编语言上机调试 4 6 1上机步骤 接着屏幕上显示 宏汇编程序询问汇编产生的目标程序文件的文件名是否为方括号中的默认值 即目标程序与源程序同名 若是 直接按一回车键 否则需自己输入另一文件名 然后 宏汇编程序接着依次询问产生列表文件和交叉引用文件的文件名 屏幕上显示 这两个文件是否建立由操作人员确定 若要建立其中一个或两个 操作人员便可输入所需建立的文件名 否则直接送入回车键 待完成上述人机对话后 宏汇编程序便对源程序进行扫描 检查源程序中各语句是否有语法错误 同时把各语句汇编成对应的机器目标代码 在汇编过程中 若发现源程序有语法错误 便随时给出出错信息 屏幕上显示 如果警告错误和严重错误总数都等于零 那么这次源程序的汇编获得通过 可以进行连接 否则 返回编辑程序 修改源程序 然后再次进行汇编 直到源程序汇编正确无误 如果汇编时 无须产生列表文件和交叉引用文件 则在启动宏汇编程序时可用分号结尾 比如 C MASMTEST 如果需要后面的列表文件和交叉引用文件 且它们的文件名与源文件名相同 这时启动宏汇编程序时 可用逗号指明 比如 C MASMTEST 3 连接源程序经过汇编后产生的目标程序 必须经过连接程序LINK EXE连接后才能运行 连接程序把一个或多个独立的目标程序模块连接装配成一个可重定位的可执行文件 扩展名为 EXE 连接程序LINK除产生一个可执行文件外 还可产生一个内存映象文件 扩展名为 MAP LINK连接的一定是扩展名为 OBJ的目标程序 在操作系统状态下 直接启动连接程序LINK EXE 例如 C LINKTEST 接着屏幕上显示 连接程序询问连接时产生的可执行文件名是否用方括号中的默认值 即可执行文件与目标程序文件同名 若是 可直接按一回车键 否则需要重新输入一文件名 接着依次询问 屏幕上显示 其中MAP文件 MAP文件列出各段的起点 终点及长度 是否建立 由操作人员确定 若要 则输入一文件名 否则直接送一回车键 后一个是询问在连接时是否要用库文件 对于来自宏汇编语言程序的目标程序文件 通常是直接送一回车键 与启动宏汇编程序一样 可以在启动连接程序时 用分号结束后续询问 如 C LINKTEST 若要产生MAP文件 且使用目标程序文件名 可用一逗号表示 如 C LINKTEST 若需要连接多模块的目标程序时 可用 把它们连接起来 例如连接三个目标程序文件P1 OBJ P2 OBJ P3 OBJ 其操作如下 C LINKP1 P2 P3 这样产生的一个可执行文件是约定取用第一个目标程序文件名 当然操作人员也可重新用另外的文件名 4 调试运行在建立好可执行文件后 就可以直接从DOS执行程序 如下所示 C TEST EXE 即输入文件名 扩展名 EXE 可省略 C 程序运行结束后返回DOS 如果用户程序已直接把结果在终端上显示出来 那么程序已经运行结束 结果也已经得到了 4 6 2DEBUG主要命令DEBUG是为汇编语言设计的一种高级工具 它通过单步 设置断点等方式为汇编语言程序员提供了非常有效的调试手段 1 DEBUG程序的调用在DOS的提示符下 可键入命令 C DEBUG D PATH FILENAME EXT PARM1 PARM2 其中 文件名是被调试文件的名字 如用户键入文件 则DEBUG将指定的文件装入存储器中 用户可对其进行调试 如果未键入文件名 则用户可以用当前存储器的内容工作 或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试 命令中的D指定驱动器 PATH为路径 PARM1和PARM2则为运行被调试文件时所需要的命令参数 2 DEBUG的主要命令 1 显示存储单元的命令D DUMP 格式为 D address 或 D range 例如 D命令的使用情况如下 2 修改存储单元内容的命令有两种 输入命令E ENTER 有两种格式如下 第一种格式可以用给定的内容表来替代指定范围的存储单元内容 命令格式为 Eaddress list 例如 EDS 100F3 XYZ 8D第二种格式则是采用逐个单元相继修改的方法 命令格式为 Eaddress 3 检查和修改寄存器内容的命令R register 它有三种格式如下 显示CPU内所有寄存器内容和标志位状态 其格式为 R 显示和修改某个寄存器内容 其格式为 Rregistername 显示和修改标志位状态 命令格式为 RF 4 运行命令G 其格式为 G address1 address2 address3 其中 地址1指定了运行的起始地址 如不指定则从当前的CS IP开始运行 后面的地址均为断点地址 当指令执行到断点时 就停止执行并显示当前所有寄存器及标志位的内容 和下一条将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 等离子显示模组创新创业项目商业计划书
- 汽车零部件轻量化材料与工艺研究创新创业项目商业计划书
- 电脑芯片创新创业项目商业计划书
- 2025年教师招聘之《小学教师招聘》试卷及参考答案详解【完整版】
- 2025年教师招聘之《幼儿教师招聘》题库检测试卷附参考答案详解【培优】
- 教师招聘之《小学教师招聘》综合检测提分及完整答案详解(必刷)
- 2025年教师招聘之《小学教师招聘》能力检测试卷完整答案详解
- 教师招聘之《幼儿教师招聘》模拟卷包附参考答案详解(精练)
- 教师招聘之《小学教师招聘》考前冲刺练习附答案详解【综合卷】
- 2025年四川仪陇县事业单位引进人才52人笔试备考题库及答案详解1套
- 2025年第一届安康杯安全生产知识竞赛试题题库及答案(完整版)
- 生育津贴相关管理办法
- 2023-2025年中考语文试题分类汇编:记叙文阅读(辽宁专用)解析版
- 2025年杭州市上城区望江街道办事处 编外人员招聘8人考试参考试题及答案解析
- 百果园水果知识培训资料课件
- 2025年灌注桩考试题及答案
- 2025年公路检测工程师《水运结构与地基》试题及答案
- 数控机加工技术知识培训课件
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
- 湖北省武汉市东湖高新区2024-2025学年三年级下册期末考试语文试卷(含答案)
- (2025年标准)菜地赔偿协议书
评论
0/150
提交评论