收藏 分享(赏)

汇编语言程序设计实训教程.docx

上传人:公务员考试助手 文档编号:21759613 上传时间:2024-04-22 格式:DOCX 页数:135 大小:949.54KB
下载 相关 举报
汇编语言程序设计实训教程.docx_第1页
第1页 / 共135页
汇编语言程序设计实训教程.docx_第2页
第2页 / 共135页
汇编语言程序设计实训教程.docx_第3页
第3页 / 共135页
汇编语言程序设计实训教程.docx_第4页
第4页 / 共135页
汇编语言程序设计实训教程.docx_第5页
第5页 / 共135页
亲,该文档总共135页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、21 世纪 高等 学校 电子 信息 类专 业规 划教 材汇编语言程序设计 实训教程秦莲主编殷肖 川姬伟 锋孙鹏编著清 华 大 学 出 版 社北 京交 通大 学出 版社 北京 内 容 简 介汇编语言程序设计是高校计算机专业的经 典课程 之一。本书 是与 汇 编语言 程序设 计教材 配套的 实训教程, 编写的目的是使学生通过实验练习 加深对 理论课 程的理 解, 全书选 用多个 具有代 表性的 实验, 对汇编语言结构化和模块化程序进行了深入的解析, 详细叙述了汇编语言 程序的编程 与调试过程, 并给出 正确结果。全书正文共 6 章, 主要内容包括: 汇编 语言程 序的语 句组成、汇编 语言源 程序

2、的 书写格 式和汇 编语言 源程序上机调试运行方法; 汇编语言程序设计基本结构实验, 即顺序程序实验、分支程 序实验、循环程序实 验; 汇编语言程序子程序调用实验和模块化程序设计实验; I / O 程序实 验, 即键 盘扫描 实验、显示控 制实验 和串口通信实验; WIN32 汇编程序实验, 即显 示程序 实验、键盘消 息处理 实验和 鼠标消 息处 理实 验; 汇编 语言与 C / C + + 语言的混合程序 设计 方式, 即 C/ C + + 嵌 入汇 编程 序 实验 和 C/ C + + 调 入汇 编 程序 模块 实验。本书可作为高校计算机专业、自动化控制专 业及相 关专业 本科生 汇编语

3、 言程序 设计实 验课程 的教科 书, 也可作为相关领域的工程技术人员的实验参考书。版权所有, 翻印必究。举报电话: 010 - 62782989 13501256678 13801310933本书封面贴有清华大学出版社防伪标签, 无标签者不得销售。本书防伪标签采用特殊防伪技术, 用户可通过在图案表面涂抹清水, 图案消失, 水干后 图案复现; 或将表面 膜揭下, 放在白纸上用彩笔涂抹, 图案在白纸上再现的方法识别真伪。图书在版编目( C IP ) 数据汇编语言程序设计 实训 教 程 / 秦莲 主 编. 北 京: 清 华大 学 出版 社; 北 京 交 通大 学 出版 社, 2005. 5( 21

4、 世纪高等学校电子信息类专业规划教材)ISBN 7 - 81082 - 524 - 0. 汇. 秦. 汇编语言 - 程序设计 - 高等学校 - 教材. TP313中国版本图书馆 CIP 数据核字( 2005 ) 第 045601 号责任编辑: 周益丹出版者:清 华 大 学 出 版 社邮编: 100084电话: 010 - 62776969http: / / www. tup. com. cn北京交通大学出版社邮编: 100044电话: 010 - 51686414http: / /press. bjtu. edu. cn印 刷 者: 北京鑫海金澳胶印有限公司 发 行 者: 新华书店总店北京发行

5、所开本: 185 260印张: 8. 5字数: 205 千字版次: 2005 年 5 月第 1 版2005 年 5 月第 1 次印刷书号: ISBN 7 - 81082 - 524 - 0 / TP194印数: 1 4 000 册定价: 14. 00 元本书如有质量问题, 请向北京交通大学出版社质监组反映。对您的意见和批评, 我们表示欢迎和感谢。 投诉电话: 010 - 51686043, 51686008; 传真: 010 - 62225406; E-mail: press center. bjtu. edu. cn。前言汇编语言是提供给用户直接访问计算机系 统最 快而又 最为 有效的 一种

6、 编程 语言, 使用 汇编语言编写程序能够充分发挥计算机硬件系统的功能, 具有占用存储空间少、运行速度快 以及代码质量高等优点, 那些需要对计算机硬件进 行控制 或对 运行 时间和 效率 有要求 的系 统软件或应用软件, 通常都是用汇编语言编写的, 因此熟练掌握汇编语言源程序的设计方法 是非常重要的。本书是与 汇编语言程序设计教材配套的实训 教程, 目的是 使学生通 过实验加 深对理 论课程的理解。本书在整个编写过程中, 努力做 到实验 简单 明了, 具有 一定 的代 表性, 文字 解释清晰, 通俗易懂。全书正文共 6 章。第 1 章介绍了汇编语言与机器语言的特点, 对汇编语言程序的语句组成、

7、汇编语言源程 序的书写格式和汇编语言源程序上机调试运行方法进行了重点论述。第 2 章介绍了汇编语言程序设计基本结构实验, 即顺序程序实验、分支程序实验和循环 程序实验。对每类实验都进行了详细的问题分析, 实验验证。第 3 章介绍了汇编语言程序子程序调用实验和模块化程序设计实验。在子程序调用实 验中对主程序与子程序都进行了详细的论述。第 4 章介绍了 I / O 程序实验, 对键盘扫描实 验、显示控 制实 验、串口通 讯实 验等典 型实 验进行了详细论述。第 5 章介绍了 WIN32 汇编程序的 框架, 重 点叙述 了显 示程 序实验、键 盘 消息 处理 实验 和鼠标消息处理实验。第 6 章介绍

8、了汇编语言与 C / C + + 语言的混合程序设计方式, 重点叙 述了 C / C + + 嵌入 汇编程序实验和 C / C + + 调入汇编程序模块实验。本书由秦莲同志负责组织编写。具体编写分工是: 第 1, 2, 3 章由秦莲编写; 第 4 章由姬 伟锋编写; 第 5 章由孙鹏编写; 第 6 章由殷肖川编写。由于编者水平所限, 书中难免存在错误和不妥之处, 敬请广大读者批评指正。作者2005 年 5 月目录第 1 章概述( 1)1 . 1汇编语言简介( 1)1 . 1 . 1汇编语言与机器语言( 1)1 . 1 . 2汇编语言的语句组成( 2)1 . 1 . 3汇编语言中的常数与表达式(

9、 2)1 . 1 . 4汇编语言中的标号及变量( 3)1 . 2汇编语言源程序的典型结构( 3)1 . 2 . 1上机调试过程( 5)1 . 2 . 2常用 DEBUG 命令( 8)第 2 章基本结构实验( 13)2 . 1顺序程序实验( 13)2 . 1 . 1 【 实验 2. 1】查表求值( 13)2 . 1 . 2 【 实验 2. 2】BCD 码转换( 15)2 . 1 . 3 【 实验 2. 3】表达式计算( 17)2 . 2分支程序实验( 19)2 . 2 . 1 【 实验 2. 4】求函数值( 20)2 . 2 . 2 【 实验 2. 5】方程求解( 22)2 . 2 . 3 【

10、实验 2. 6】求最大值与最小值( 25)2 . 3循环程序实验( 28)2 . 3 . 1 【 实验 2. 7】函数调用( 29)2 . 3 . 2 【 实验 2. 8】“ 冒泡法”排序( 32)2 . 3 . 3 【 实验 2. 9】矩阵相乘( 35)第 3 章子程序与模块化程序实验( 39)3 . 1子程序实验( 39)3 . 1 . 1 【 实验 3. 1】显示程序( 39)3 . 1 . 2 【 实验 3. 2】计算 N!( 41)3 . 1 . 3 【 实验 3. 3】数据传送( 44)3 . 2模块化程序实验( 50)3 . 2 . 1 【 实验 3. 4】显示字符串( 50)3

11、 . 2 . 2 【 实验 3. 5】统计负数个数( 52)第 4 章I/O 程序实验( 56)4 . 1键盘扫描程序实验( 56)4 . 1 . 1 【 实验 4. 1】单字符输入程序( 56)4 . 1 . 2 【 实验 4. 2】多字符输入程序( 57)4 . 2显示控制程序实验( 60)4 . 2 . 1 【 实验 4. 3】在图形和字符显示方式下显示字符串( 60)4 . 2 . 2 【 实验 4. 4】在图形显示方式下画线( 63)4 . 2 . 3 【 实验 4. 5】显示十进制整数( 65)4 . 3文件实验( 67)【 实验 4. 6】磁盘文件管理( 67)4 . 4串口通信

12、实验( 69)【 实验 4. 7】串口通信( 69)4 . 5中断系统与中断程序实验( 73)4 . 5 . 1 【 实验 4. 8】中断服务程序( 73)4 . 5 . 2 【 实验 4. 9】驻留中断服务程序( 76)第 5 章WIN 3 2 汇编程序实验( 79)5 . 1WIN 32 汇编程序的框架( 79)【 实验 5. 1】消息框显示( 79)5 . 2显示程序实验( 83)5 . 2 . 1 【 实验 5. 2】简单窗口显示( 83)5 . 2 . 2 【 实验 5. 3】字符串显示( 86)5 . 2 . 3 【 实验 5. 4】菜单的使用( 90)5 . 3键盘消息处理程序实

13、验( 95)【 实验 5. 5】键盘消息处理( 95)5 . 4鼠标消息处理程序实验( 98)【 实验 5. 6】鼠标消息处理( 98)第 6 章汇编与 C /C + + 混合编程实验( 102)6 . 1混合编程方式概述( 102)6 . 2C /C + + 中嵌入汇编程序实验( 102)6 . 2 . 1 【 实验 6. 1】在 C 程序中嵌入汇编语句实现累加求和( 103)6 . 2 . 2 【 实验 6. 2】用嵌入汇编实现对任一 C 数组 array 元素自动求和( 104)6 . 2 . 3 【 实验 6. 3】利用嵌入式汇编编写 C 程序中的函数( 105)6 . 2 . 4 【

14、 实验 6. 4】嵌入式汇编调用 C 函数( 107)6 . 2 . 5 【 实验 6. 5】嵌入式汇编调用 C 标准库函数( 109)6 . 3C /C + + 调用汇编程序模块实验( 111)6 . 3 . 1 【 实验 6. 6】VC 程序调用汇编程序模块实现排序( 111)6 . 3 . 2 【 实验 6. 7】VC 程序调用汇编程序模块实现简单计算( 115)附录 AASC II 码表( 118)附录 BDO S 和 BIO S 的宏定义( 119)附录 CDE BUG 命令表( 129)参考文献( 130)第 1 章概述1.1汇编语言简介程序设计语言的种类很多, 总体可分为低级 语

15、言 和高级 语言 两种。低 级语 言有机 器语 言和汇编语言, 高级语言有 C / C + + , Pascal, BASIC 等。1 .1 .1汇编语言与机器语言计算机能够直接识别的是 二进 制数 0 和 1 组成的 代码。机 器指 令( Instruction) 就 是二 进制编码指令, 一条机器指令控制计算机完成一 个操 作。每种 处理 器都有 各自 的机器 指令 集, 某种处理器支持的所有指令的集 合就是 该处 理器的 指令 系统 ( Instruction Set) 。指 令集 及使用它们编写程序的规则被称作机 器语言 ( Maching Language) 。 用机器 语言 形成的

16、 程序 是计算机惟一能够直接识别并执行的程序, 而用其 他语言 程序 编写 的程序 必须 经过翻 译转 换成机器语言程序才能执行。因此, 机器语言程序常被称为目标程序( 或目的程序) 。机器指令一般由操作码( Opcode) 和操作数( Operand) 构成。操作 码是表 明操作性 质的 代码, 操作数则表明参加操作的数或数所在的地址。一条机器指令是一组二进制代码, 一个 机器语言程序就是一段二进制代码序列。用机 器语 言编写 程序 的最大 缺点 是难 以理解, 因 而极易出错, 也难以发现错误。所以只是在计算机发展的早期或不得已的情况下, 才用机器 语言编写程序。现在除了有时在程序某处需要

17、 直接 采用机 器指 令填充 外, 几乎 没有人 采用 机器语言编写程序了。为了克服机器语言的缺点, 人们采用便于记忆、并能描述指令功能的符号来表达机器指 令。表示指令操作码的符号称为指令助记符, 简称助记符; 助记符一般是表明指令功能的英 语单词或其缩写。指令操作数同样也可以用易于记忆的符号表示。用助记符表示的指令就 是汇编格式指令。汇编格式指 令以 及使用 它们 编写程 序的 规则 就形成 汇编 语言 ( Assembly Language) 。用汇编语言编写的程序就是汇编语言程序。汇编语言是 一种符号 语言, 它用助 记符表示操作码, 比机器语言容易理解和掌握, 也 容易 调试和 维护。

18、但 是, 汇编 语言源 程序 要翻译成机器语言程序才可以由处理器执行。这个翻 译的过程 称为“ 汇编”, 完成汇 编工作 的程序就是汇编程序( Assembler) 。用汇编语言编程时, 程序员可以直接使用存储器、寄存 器、I / O 端 口进行处 理, 同 时也能 直接使用 CPU 指令系统及其提供 的各种 寻址 方式, 编出 高质 量的 程序, 所以 用汇 编语 言编 写的程序要比与它等效的高级语言程序生成的目的代码精简很多, 因此占用内存少, 执行速 度快。但是汇编语言程序与所要解决问题的数 学模 型之间 的关 系不直 观, 使得 编程难 度增 大, 出错可能性也增大, 因而进行程序设计

19、和调试的时间比较 长。另外, 不同的 CPU 系列具 有不同的汇编语言, 因此汇编语言在不同机器间的可移植性较差。2汇编语言程序设计实训教程1 .1 .2汇编语言的语句组成汇编语言源程序是由一条条语句组成的, 语句则由名称、操作助记符、操作数、注释 4 部 分组成。例如:NEXT: MOV AL, 80 H; AL80 HDATADB02 H, 03 H, 04 H, 05 H, 0 6H, 07 H, 08 H1. 名称语句中的名称是一个标识符, 可以由字母 ( a, b, c, d, e, z) , 数 字( 0, 1, 2, 9) 及特 殊符号( ? , . , , - ,) 组成。名称

20、必 须由 字 母开 头, 若名 称 中有 圆点 符, 则 圆点 符必 须用 第一个字符。注意, 数字不能用作第一个字 符。构成 名称 的字符 总数 可多 达 31 个, 若超31 个字符, 则只有前 31 个字符有效。2. 操作助记符操作助记符将指出该语句的基本操作功能, 每条语句必须有操作助记符, 它是汇编语言 中规定了明确含义的一组专用符号, 所以不能随意使用。例如, MOV 是传送指 令的助 记符, ADD 是加法指令的助记符, DB 是定义字节变量的伪指令助记符。3. 操作数语句的操作数部分, 可以 是数 据 本身, 也 可以 是 数据 所在 的地 址。前 者 可 以是 一 个常 数,

21、 也可以是代表常数的一个标识符或表达式, 后者通常是以某种寻址方式给出的存放操作 数的地址。不是每条语句都必须含有操作数的, 例如: HALT 暂停指令就不含操作数。4. 注释注释仅用作对语句或程 序段 的 说明, 它 不是 程 序的 可执 行部 分, 汇 编时 不 形成 目 标代 码, 注释必须以分号“ ; ”开头, 它可以作为语句的一个部分, 也可以作为一个单独的语句。1 .1 .3汇编语言中的常数与表达式1. 常数常数可以分为数值常数和字符串常数两 类。数值 常数 按其 基数的 不同, 可 以有二 进制 数、八进制数、十进制数、十六进制数等几种不同的表示形式, 汇编语言采用不同的后缀加以

22、 区分。例如: 101010B = 52O = 42D = 2 AH另外, 应该注意, 汇编语言中的数值常数的 第一位 必须 是数 字, 否则汇 编时 将被看 成是 标识符。例如: AFH 应写成 0AFH字符串常数是以单引号“ ”括起来的一串字符, 例如: WELCOME TO YOU ; 1234567 需要指出的是, 此处单引号中的内容在计算机内部均是以 ASCII 码表示的。2. 表达式表达式由操作数和操作符组成, 操作数可以是常数或标识符, 也可以是子表达式。操作 符在宏汇编语言中非常丰富, 可分为算术操作符、逻辑操作符、关系操作符、属性操作符及其 他操作符等。具体内容如下。算术操作

23、符有:+ , - , * , / , MOD。逻辑操作符有: AND( 逻辑与) 、OR ( 逻辑或) 、NOT( 逻辑非) 、XOR ( 逻辑异或) 。第 1 章概述3关系操作符有: EQ( 相等) 、NE( 不等) 、LT( 小于) 、GT( 大于) 、LE( 小于或等 于) 、GE ( 大 于或等于) 。1 .1 .4汇编语言中的标号及变量1. 标号标号是由标识符 表 示的 指 令名 称, 用以 标 示对 应 指令 的 位置 ( 地址 ) 。标 号 有 三个 属 性: 段地址、偏移地址和类型。标号的段地址和偏移地址属性是指该标号对应的指令所在段 的段地址和段内的偏移地址。标号的类型属 性

24、有两种, 即 定义为 NEAR 类 型表 示标号 在段 内使用, 定义为 FAR 类型表示标号在段间使用。标号的基本定义方法是在指令的操作助记 符前 添加标 识符 和冒号, 该 标识 符就是 我们 所要定义的标号。例如:START: MOV AX, 2 000 H这里 START 代表了 MOV 指令的地址, 因此标号可以作为程序转移指令的操作数( 即要 转向的地址) 。2. 变量定义变量汇编语言中变量是通过伪指令定义的, 常用的定义变量的伪指令格式如下:变量名DB表达式; 定义字节变量变量名DW表达式; 定义字变量变量名 变量名DDDQ表达式 表达式; 定义双字变量; 定义长字变量变量名DT

25、表达式; 定义一个十字节变量变量属性 变量具有下列属性。段地址( SEG) : 变量所在段的段地址。 偏移地址( OFFSET) : 变量所在段内的偏移地址。类型( TYPE) : 变量的类型是所定义的每个变量所占据的字节数。 长度( LENGTH) : 变量定义时, 一个变量名所定义的变量个数。大小( SIZE ) : 变量定义语句中分 配 给同 一变 量名 的所 有 变量 总的 字节 数, 其 值为 该变 量的类型与长度的乘积。1.2汇编语言源程序的典型结构汇编语言程序设计与其他程序设计语言一 样, 需要 多种 系统软 件的 支持, 要 经过编 辑、 汇编、调试之后才能运行, 汇编语 言的

26、翻 译器 ( 汇编 程序 ) 对 汇编 语言 源程 序 的格 式有 严格 的要求, 汇编语言源程序的格式是汇编语言程序 设计 必须遵 循的 语法 规则。用 汇编语 言编 写的源程序, 其结构上具有以下特点: 首先, 由若 干逻辑 段组 成, 由伪指 令语 句定 义和说 明。 其次, 整个源程序以 END 伪指令结束。 最后, 每 个逻辑 段由 语句 序列组 成。各 语句名 可以4汇编语言程序设计实训教程是如下几种形式。( 1) 指令语句: 对应于 CPU 指令系统中的一条指令, 因此为可执 行语句, 汇编时 译成目 标码。( 2 ) 伪指令语句: CPU 不执行的语句, 只是汇 编时给 汇编程

27、 序提供 汇编 信息, 并不 产生 目标代码。( 3 ) 宏指令语句: 实际上是一个指令序列, 汇编时产生对应的目标代码序列。( 4 ) 注释语句: 以分号“ ; ”开始的说明性语句, 汇编程 序不予 处理, 只起注 释作用, 使程 序易于理解。( 5 ) 空行语句: 为保持程序书写清晰, 仅包含回车换行符的语句行。 汇编语言源程序的格式有完整格式和简化格式两种, 下面分别给出这两种形式。【 例 1. 1】已知自 first 开始的内存单 元存有 10 字节 的数, 将 它们累 加, 并将 累加和 存入second 单元。汇编语言源程序如下:da t as e gme ntf i r s td

28、b00 , 01 , 0 2, 03 , 04 , 05 , 0 6, 07 , 08 , 09s e c onddb?da t ae ndsc odes e gme nta s s umec s : c ode , ds : da t a s t a r t : mova x , da t amov ds , a xl e a s i , f i r s t mov c x , 000 a h mov bl , 00 hne xt :mova l , s i a dd bl , a li nc s il oop ne xtmovs e c ond , bl hl tc odee ndse n

29、d s t a r t【 例 1. 2】将 dat1 开始的内存单元的非压缩的 十进制 数转换为 压缩的十 进制 数, 结 果仍 存入 dat1 中。汇编语言源程序如下:dos s e g. mode ls ma l l. s t a c k200 h. da t ad a t 1dw0506 h第 1 章概述5. c odes t a r t :mova x, da t amovds , a x mova x, da t 1 movc l , 4s a la h, c lr ola x, c lr ola l , c lmovbyt e pt r da t 1 , a l mova h, 4

30、c hi nt21 he nds t a r t上述例 1. 1 为完整格式, 例 1 . 2 为简化格式。1 .2 .1上机调试过程一个汇编语言源程序从编程到投入运行, 一 般要在 多种 软件系 统的 支持 下, 经过编 辑、 汇编、连接、装入、和调试等处理过程。1. 编辑汇编源程序 上机调试的第一步是编辑源程序。编辑源程序可以通过任何一个文本编辑器实现。例如 Windows 系统中的 记 事 本、写 字版, DOS 中 的 全 屏 幕 文 本 编 辑 器 EDIT 等, 也 可 以 采 用MASM 程序员工作平台 PWB 中的编辑环境。【 例 1. 3】在 Windows 记事本中编写查询

31、学生成绩程序。 汇编源程序如下:. mode ls ma l l. s t a c k. da t a ;为初始变量和查询结果分配单元t a b db68 H, 78 H, 42 H, 84 H, 80 H, 85 H, 56 H, 77 H, 87 H, 5 6Hnod b6e n gl i s hdb?. c ode. s t a r t upl e abx, t a b; bx 指向 TAB 表首地址mo va l , no; 学号送 a l 寄存器de ca lxl a t t a b; 用换码指令查表mo ve ngl i s h , a l; 结果保存在 e ng l i s h

32、单元. e xi t0; 结束退出e n d程序中学生成绩按学号( 从 1 开始) 从小到 大的 顺序 排列在 tab 表 中, 被查 询的学 生学 号放在变量 no 中, 查表结果放在变量 english 中。6汇编语言程序设计实训教程假定将源程序存储到 C: 目录下, 命名为 1 - 3. asm。 2. 用 MASM 汇编汇编是将源程序翻译成由机器代码组成的目标模块文件的过程。 命令如下:C: ma s m1 - 3 . a s m如果源 程 序 中 没 有 语 法 错 误, MASM 将 自 动 生 成 一 个 目 标 模 块 文 件 1 - 3. obj, 否 则 MASM 将给出相

33、 应 的 错 误 信 息。这 时 应 根 据 错 误 信 息, 重 新 编 辑 修 改 源 程 序 后, 再 进 行 汇编。3. 目标文件的连接连接 程 序 能把 一 个 或 多 个目 标 文 件 和 库文 件 合 成 一 个可 执 行 文 件 ( . EXE , . COM 文 件) 。命令如下:C: l i nk 1 - 3 . o bj如果不带文件名, LINK 连接程序将提示输入 OBJ 文件 名, 它还 会提示 生成 的可执 行文 件名以及列表文件名, 一般采用默认文 件名就 可以。 如果没 有严 重错 误, LINK 将生成 一个 可执行文件 1 - 3. exe, 否则将提 示相

34、 应 的错 误信 息, 这 时需 要根 据错 误信 息 重新 修改 源程 序后再汇编、链接, 直到生成可执行文件。4. 程序调试汇编语言源程序经过汇编 和链 接后 就 生成 了. EXE 文 件, 大 部分 程序 必 须经 过调 试阶 段才能纠正程序执行中的错误, 并得到正确的结果。DEBUG 可以帮助我们实现以上功能。下面我们以 1 - 3. exe 演示 DEBUG 的使用过程。( 1 ) 进入 DEBUG 并装入程序C: debug 1 - 3. exe -DEBUG 以短划线“ - ”作为提示符, 出现短划线时可键入 DEBUG 命令。( 2 ) 使用反汇编命令程序中学生成绩按学号(

35、从 1 开始) 从小到 大的 顺序 排列在 tab 表 中, 要查 询的学 生学 号放在变量 no 中, 查表结果放在变量 english 中。要查 询运 行结果 必须 知道变 量 english 对 应的存储单元的地址。另外, 查询 运行结 果时 希望程 序运 行后 停在返 回 DOS 之前, 因 此要 确定断点地址。键入反汇编命令 U 后, 显示信息如下:- U0B84 : 00000B84 : 0003BA860 B8 EDAMOVMOVDX, 0 B86DS , DX0B84 : 00058 CD3MOVBX, SS0B84 : 00072 BDASUBBX, DX0B84 : 000

36、9D1 E3SHLBX, 10B84 : 000 BD1E3SHLBX, 1第 1 章概述70B84 : 000 D0B84 : 000 F0B84 : 00110B84 : 0012D1E3 D1E3 FA8 ED2SHL SHL CLI MOVBX, 1BX, 1SS , DX0B84 : 00140B84 : 00160B84 : 001703 E3 FB8 D1 E0 A00ADD STILEASP , BXBX, 000 A0B84 : 001 B0B84 : 001 E0B84 : 00200B84 : 0021A01200 FEC8 D7A2130 0MOV DEC XLATMO

37、VAL, 0012 AL 00 13 , AL0B84 : 00240B84 : 0027B8004 CCD21MOVI NTAX, 4 C0021由反汇编结果可知 tab 对应的内存单元的起始地址为“ 000 A”, no 对应 的内存单 元的起 始地址为“0012 ”, english 对应的内存单元的 起始 地址 为“0013”, 程序 执行 到“0024”时 调用 INT 21 返回 DOS, 因此执行断点设为“0024 ”可保证程序完整执行。注意: 由于程序中使用. startup 伪指令 作为 程序的 默认 入口 地址, 程序 汇编 链接后 会产 生一个程序前缀, 因此程序代码段的

38、第一条指令的偏移地址非 0。例如, 例 1 . 3 中 的 lea bx, tab 指令的偏移地址为“0017”, 但是利用 G 命 令执 行程 序时起 始地 址仍为“0000”。如 果使 用标号作为入口地址, 程序代码段第一条指令的偏移地址一般为 0。( 3 ) 断点执行得到程序运行结果的存储地址后, 就可以断点执行该程序。 键入 G 0024 , 信息如下:- g 002 4AX = 0077BX = 00 0ACX = 0034DX = 0 B86SP = 0420BP = 0000SI = 00 00DI = 0000DS = 0 B86ES = 0 B740 B84 : 00 24

39、B80 04 CS S = 0 B8 6MOVCS = 0 B84I P = 0024NV UP EI PL NZ NA PE NCAX, 4 C0 0此时程序停在断点处, 并显示出所有寄存器以及各标志位的当前值, 最后一行给出了将 要执行指令的地址、机器 语言 和汇 编 语言。根 据 这些 信息 可以 判断 程 序执 行是 否正 确, 例 如, 由 AX = 0077 可知 AL = 77, 正是我们要查找的学生的成绩。( 4 ) 察看运行结果根据已知的 tab、no、english 的地址, 利用显示内存单元内容命令 D 观察运行结果。 键入 D 000A, 信息如下:0 B86 : 00

40、 0078 84 80 85 56 77x . . . Vw0 B86 : 00 1087 56 06 77 26 FF 36 8 4 -13 26 FF 36 82 13 26 8 E. V. w&. 6 . . &. 6. . &.- D 000 A0 B86 : 00 2034 7 E 13 55 8 B EC F7 46 -0600 02 5 D 74 01 FB CF4 . U. . . F . . . t . . .0 B86 : 00 3068 01 80 60 1 E 0 6 8 B EC -E9E0 00 68 02 80 6 0 1 Eh. . . . . . . . .

41、h. . .0 B86 : 00 4006 8 B EC E9 D5 00 68 03 -8060 1 E 06 8B EC E9 CA. . . . . . h. . . . . . . .8汇编语言程序设计实训教程其中左边给出数据的起始地址 ( 格式 为数 据段 地 址: 偏移 地址 ) , 然后 顺 序给 出每 个字 节单元的内容, 中间用十六进制数表示内容, 右边用字符显示内容。由以上内容可以看出从 000AH 开始的 8 个连续存储单元存储了成绩表, 0012 H 单元存 储学生学 号 6, 0013 H 单元存储学号为 6 的学生成绩 77 , 执行结果正确。( 5 ) 退出 DE

42、BUG程序调试结束, 利用 Q 命令退出 DEBUG。 键入 Q, 信息如下:- qC: 上面介绍了 DEBUG 调试执行程 序 的一 般过 程, 大 家可 以结 合程 序的 具 体情 况利 用其 他 DEBUG 命令灵活运用。DEBUG 是一个功能强大调试 工具, 在程 序调试 过程 中会为 我们 提供很大的帮助。1 .2 .2常用 DEBUG 命令DEBUG 程序是专门为分析、研制和开 发汇 编语言 程序 而设 计的一 种调 试工具, 具 有跟 踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程 序设计人员或用户“ 触及”机器内部, 是我们学习汇编语言必须掌握

43、的调试工具。DEBUG 是 DOS 的一个外部命令, 其命令格式为: path DEBUG filename parm1 parm2其中 path 是 DEBUG 命令在磁盘 上 的路 径; filename 是 要用 DEBUG 来 处理 的文 件的名字, 它包括文件的盘符、路径、主文件名和扩展名; 参数 parm1 和 parm2 是文件 filename 运 行时使用的参数。当启动 DEBUG 时, 将对 CPU 的各 寄存 器 进 行初 始 化, 初 始化 操 作将 按 以 下几 种 方式 进行。( 1 ) 如果启动时指定的 filename 是. EXE 文 件, 则 DEBUG 启

44、动 后将自 动把 指定的 文件 装入内存, 并置: CS 为程序代码段段地址 IP 为第一条要执行指令的偏移地址 SS 为堆栈段段地址 SP 为堆栈底部 + 1 单元的偏移地址 DS 和 ES 是装入文件前第一个可用内存段 的段地址 ( 即 DEBUG 程 序后 的第一 个段 地址) 标志寄存器的所有标志位为 0 BX( 0) 和 CX 是装入的文件长度 其余寄存器为 0。( 2 ) 如果启动 DEBUG 时指定的 文 件 filename 不 是. EXE 文件, 则 DEBUG 将 把文 件装 入内存, 并置: 4 个段寄存器为 DEBUG 程序后面的第一个段地址 IP 指向 100H第 1 章概述9 SP 指向这个段的段尾 标志寄存器的所有标志位为 0 BX 和 CX 是装入的文件长度 其余寄存器为 0。( 3 ) 如果启动 DEBUG 时不指定 filename, 则只是 把 CPU 的 各寄存 器进 行初 始化, 初始 化结果与上述 的 第

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高中资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报