收藏 分享(赏)

汇编语言程序设计-人邮.docx

上传人:oceanpvg 文档编号:2371634 上传时间:2018-09-14 格式:DOCX 页数:190 大小:690.01KB
下载 相关 举报
汇编语言程序设计-人邮.docx_第1页
第1页 / 共190页
汇编语言程序设计-人邮.docx_第2页
第2页 / 共190页
汇编语言程序设计-人邮.docx_第3页
第3页 / 共190页
汇编语言程序设计-人邮.docx_第4页
第4页 / 共190页
汇编语言程序设计-人邮.docx_第5页
第5页 / 共190页
点击查看更多>>
资源描述

1、教育部高职高专规划教材高 职 高 专 现 代 信 息 技 术 系 列 教 材汇编语言程序设计梁发寅 宗大华 编著人 民 邮 电 出 版 社图书在版编目(CIP)数据 汇编语言程序设计/梁发寅,宗大华编著 . 北 京 : 人 民 邮 电 出 版 社 , 2004.3(高职高专现代信息技术系列教材)ISBN 7-115-12060-9I. 汇 II. 梁 宗 III. 汇 编 语 言 程 序 设 计 高 等 学 校 : 技 术 学 校 教 材IV. TP313中国版本图书馆 CIP 数 据 核 字 ( 2004) 第 008344 号内 容 提 要汇 编 语 言 是 一 种 面 向 机 器 的 符

2、 号 式 程 序 设 计 语 言 。 汇 编 语 言 具 有 编 程 质 量 高 、 执 行 速 度 快 、 占 用 存 储 空 间少、易记、易修改等优点。本书以 8086/8088 汇 编 语 言 格 式 的 指 令 为 出 发 点 , 分 7 章 进 行 讲 述 。 本 书 认 为 寻 址 方 式 是 学 习 汇 编 语 言 的基础,学习中应强调程序设计的各种结构,并认真做好上机实践。本 书 适 用 于 高 职 高 专 计 算 机 及 相 关 专 业 的 学 生 。 编 写 时 , 力 求 做 到 突 出 基 础 知 识 和 必 备 知 识 ; 由 浅 入 深 地 安 排 全 书 内 容

3、; 多 举 实 例 , 用 例 子 说 明 概 念 及 各 种 编 程 方 法 ; 每 章 最 后 附 有 习 题 , 帮 助 理 解 和 巩 固 所 学 内 容 。相信本书对入门、理解、初步掌握汇编语言以及学习汇编语言的编程方法,都会有所裨益。教育部高职高专规划教材 高职高专现代信息技术系列教材 汇编语言程序设计。 编 著 梁发寅 宗大华。责任编辑 潘春燕人民邮电出版社出版发行 北 京 市 崇 文 区 夕 照 寺 街 14 号邮 编 100061 电子函件 网 址 http:/www. 读 者 热 线 : 010-67194042北京汉魂图文设计有限公司制作 北京隆昌伟业印刷有限公司印刷 新

4、华书店总店北京发行所经销。 开 本 : 7871092 1/16印 张 : 12.25字 数 : 287 千 字 2004 年 3 月第 1 版印 数 : 1 5 000 册 2004 年 3 月 北 京 第 1 次印刷ISBN 7-115-12060-9/ TP 3821定价:17.00 元本书 如有印 装质量 问题, 请与本 社联系 电话 : ( 010) 67129223丛 书 前 言江 泽 民 总 书 记 早 在 十 五 大 报 告 中 提 出 了 培 养 数 以 亿 计 高 素 质 的 劳 动 者 和 数 以 千 万 计 专 门 人 才 的 要 求 , 指 明 了 高 等 教 育 的

5、 发 展 方 向 。 只 有 培 养 出 大 量 高 素 质 的 劳 动 者 , 才 能 把 我 国 的 人 数 优 势 转 化 为 人 才 优 势 , 提 高 全 民 族 的 竞 争 力 。 因 此 , 我 国 近 年 来 十 分 重 视 高 等 职 业 教 育 , 把 高 等 职 业 教 育 作 为 高 等 教 育 的 重 要 组 成 部 分 , 并 以 法 律 形 式 加 以 约 束 与 保 证 。 高 等 职 业 教 育 由 此 进 入 了 蓬 勃 发 展 时 期 , 驶 入 了 高 速 发 展 的 快 车 道 。高等职业教育有其自身的特点。正如教育部“面向 21 世 纪 教 育 振

6、兴 行 动 计 划 ”所 指 出 的那样, “高 等职业教育必须面向地区经济建设和社会发展, 适应就业市场的实际需要 , 培养 生产、 管理、 服务第一线需要的实用人才, 真正办出特色。 ”因此, 不能以本科压缩和变形的 形式组织高等职业教育,必须按照高等职业教育的自身规律组织教学体系。为此,我们根据 高等职业教育的特点及社会对教材的普遍需求,组织高等职业学校有丰富教学经验的老师, 编写了这套高职高专现代信息技术系列教材 。本套教材充分考虑了高等职业教育的培养目标、教学现状和发展方向,在编写中突出了 实用性。本套教材重点讲述目前在信息技术行业实践中不可缺少的、广泛使用的、从业人员 必须掌握的实

7、用技术。即便是必要的理论基础,也从实用的角度、结合具体实践加以讲述。 大量具体的操作步骤、许多实践应用技巧、接近实际的实训材料保证了本套教材的实用性。 在本套教材编写大纲的制定过程中,广泛收集了高等职业学院的教学计划,调研了多个 省市高等职业教育的实际,反复讨论和修改,使得编写大纲能最大限度地符合我国高等职业教育的要求,切合高等职业教育实际。 在选择作者时,我们特意挑选了在高等职业教育一线的优秀骨干教师。他们熟悉高等职业 教 育 的 教 学 实 际 , 并 有 多 年 的 教 学 经 验 ; 其 中 许 多 是 “双 师 型 ”教 师 , 既 是 教 授 、 副 教 授 , 同时又是高级工程师

8、、认证高级设计师;他们既有坚实的理论知识,很强的实践能力,又有 较多的写作经验及较好的文字水平。目 前 我 国 许 多 行 业 开 始 实 行 劳 动 准 入 制 度 和 职 业 资 格 制 度 , 为 此 , 本 套 教 材 也 兼 顾 了 一 些证书考试(如计算机等级考试) , 并提供了一些具有较强针对性的训练题目。对 于 本 套 教 材 我 们 将 提 供 教 学 支 持 ( 如 提 供 电 子 教 案 等 ) , 同 时 注 意 收 集 本 套 教 材 的 使 用情况,不断修改和完善。本套教材是高等职业学院、高等技术学院、高等专科学院教材。适用于信息技术的相关 专 业 , 如 计 算

9、机 应 用 、 计 算 机 网 络 、 信 息 管 理 、 电 子 商 务 、 计 算 机 科 学 技 术 、 会 计 电 算 化 等 。 也可供优秀职高学校选作教材。对于那些要提高自己应用技能或参加一些证书考试的读者, 本套教材也不失为一套较好的参考书。最后,恳请广大读者将本套教材的使用情况及各种意见、建议及时反馈给我们,以便我 们在今后的工作中,不断改进和完善。关于本书 汇编语言是一种面向机器的程序设计语言,是人与计算机之间交换信息的有力工具。汇 编语言一方面保持与机器指令一一对应;另一方面用助忆符代替机器指令中的操作码,用符 号地址代替机器指令中的地址码。因此,使用汇编语言编写程序,不仅

10、继承了用机器语言编 写程序时具有的编程质量高、执行速度快和占用存储空间少的优点,而且还克服了机器语言 程序直观性差、难学、难记、难检查及难修改等缺点。本书以汇编格式的 8086/8088 指 令 为 出 发 点 , 共 分 7 章 进 行 讲 述 。 第 1 章由两个部分内 容组成:首先介绍与汇编语言有关的计算机基础知识,然后介绍汇编语言的各种寻址方式。 寻址方式是学习汇编语言的基础。第 2 章把 8086/8088 的 指 令 划 分 成 6 组,并按组对它们的 格式、功能做了介绍。第 3 章 讲 述 汇 编 语 言 各 种 语 句 的 编 写 格 式 和 程 序 的 编 写 格 式 。 第

11、 4 章 介绍程序设计中的子程序结构,突出返回地址的保存、现场保护和现场恢复等程序设计方面 的安排。第 5 章 介 绍 程 序 设 计 中 的 循 环 结 构 , 重 点 为 循 环 控 制 条 件 的 各 种 构 成 方 法 。 第 6 章介绍程序设计中的分支结构,重点为如何按条件对分支进行判断。第 7 章为上机实践,介绍 汇编语言的工作环境以及编写源程序、汇编、连接、调试以及运行的全过程。本书是为高职高专计算机及相关专业学生编写的汇编语言教材,因此在编写时,力求做 到如下几点:1 突 出 对 基 础 知 识 、 必 备 知 识 的 介 绍 , 避 免 面 面 俱 到 ;2 以 由 浅 入

12、深 、 螺 旋 式 上 升 的 方 式 安 排 全 书 内 容 , 把 各 种 知 识 一 步 步 地 灌 输 给 读 者 ;3 多 举 实 例 , 用 例 子 说 明 概 念 、 说 明 各 种 编 程 的 方 法 ;4 每 章 最 后 附 有 一 定 数 量 的 习 题 , 以 帮 助 读 者 理 解 和 巩 固 所 学 的 内 容 。 在本书的编写过程中, 陈吉人、 沈寄云和宗涛提供了很多实例 , 为每章所附习题的收集、调试做了很多的工作,在此表示诚挚的谢意!由于编者水平所限,书中难免出现谬误或不当 之处,在此恳请读者不吝批评、指正!编者2004 年 3 月 于 北 京 1 目 录第 1

13、 章 汇 编 语 言 基 础 知 识 11.1 有 符 号 数 和 无 符 号 数 .11.1.1 有符号数的补码表示 .11.1.2 补码的加法和减法 .31.1.3 无符号数 .51.1.4 字符的 ASCII 码 .51.2 存储器 .61.2.1 存储单元的地址和内容 .61.2.2 存储器地址的分段 .71.3 8086/8088 微处理器 .101.3.1 8086/8088 微处理器的组成 .101.3.2 8086/8088 寄存器 111.3.3 汇编语言 .131.4 8086/8088 寻址方式 .131.4.1 8086/8088 指令的组成 .131.4.2 符号地址

14、 .141.4.3 数据的寻址方式 .17习题 1.23第 2 章 8086/8088 的 指 令 系 统 252.1 数 据 传 送 指 令 .252.1.1 通用数据传送指令 .252.1.2 地址传送指令 .292.1.3 XLAT 查表指令 .302.1.4 标志寄存器传送指令 .312.2 算 术 运 算 指 令 .322.2.1 加减运算指令 .322.2.2 十进制调整指令 .372.2.3 乘除运算指令 .402.3 控 制 转 移 指 令 .432.3.1 JMP 无条件转移指令 .432.3.2 条件转移指令 .472.3.3 循环指令 .522.4 逻 辑 运 算 和 移

15、 位 指 令 .53汇编语言程序设计2.4.1 逻辑运算指令 .532.4.2 移位指令 .552.5 串 操 作 指 令 .60 1 2.5.1 与 REP 前缀相配合工作的 MOVS, STOS 和 LODS 指 令 602.5.2 与 REPE 和 REPNE 前缀相配合工作的 CMPS 和 SCAS 指令 632.6 处 理 器 控 制 指 令 .65习题 2.65第 3 章 汇 编 语 言 程 序 格 式 和 简 单 程 序 设 计 .683.1 汇 编 语 言 的 程 序 格 式 .683.1.1 汇编语言的语句 .683.1.2 伪指令语句 .703.1.3 指令语句 .743.

16、1.4 宏指令语句 .773.2 简 单 程 序 的 设 计 .793.2.1 汇编语言程序设计的基本步骤 .793.2.2 用流程图表示算法 .803.2.3 简单程序的设计示例 .81习题 3.86第 4 章 子 程 序 设 计 904.1 子 程 序 的 结 构 形 式 .904.1.1 子程序的定义 .904.1.2 子程序的调用和返回 .914.2 子 程 序 的 设 计 方 法 .974.2.1 现场保护和现场恢复 .974.2.2 主程序与子程序间的参数传递方法 .984.2.3 子程序的嵌套调用 .1044.2.4 子程序的说明文件 .1044.3 DOS 系 统 功 能 调

17、用 简 介 1044.3.1 外部设备 .1054.3.2 输入输出指令 .1054.3.3 常用的 DOS 系统功能调用 .1064.3.4 子程序设计示例 .112习题 4.117第 5 章 循 环 程 序 设 计 1195.1 循 环 程 序 的 结 构 形 式 .119 2 目 录5.2 循 环 程 序 的 控 制 方 法 .1215.2.1 计数控制法 .1215.2.2 条件控制法 .1255.2.3 逻辑尺控制法 .1285.3 多 重 循 环 .1315.4 循 环 程 序 设 计 示 例 .135 1 习题 5.139第 6 章 分 支 程 序 设 计 1436.1 双 分

18、支 程 序 的 设 计 .1436.1.1 分支程序的结构 .1436.1.2 双分支程序设计 .1446.2 多 分 支 程 序 设 计 .1466.2.1 地址表法多分支程序设计 .1466.2.2 转移表法多分支程序设计 .1506.2.3 逻辑分解法多分支程序设计 .1526.3 多 分 支 程 序 设 计 示 例 .155习题 6.160第 7 章 上 机 实 践 1627.1 汇 编 语 言 程 序 的 上 机 过 程 .1627.1.1 建立汇编语言的工作环境 .1627.1.2 编制源程序 .1637.1.3 汇编 .1637.1.4 连接 .1647.1.5 调试运行 .16

19、47.2 上 机 练 习 中 的 DOS 功能调用 .169习题 7.183 1 第 l 章 汇编语言基础知识汇编语言是一种符号语言,它不仅便于记忆,而且能够直接与计算机硬件对话。本章讲 述学习汇编语言之前应该具备的基础知识。首先假定你已经具有了二进制数的概念,即知道 有关数的进制问题,知道二进制数与十进制数之间如何转换,知道在计算机中为什么要引入 八进制和十六进制,知道二进制数与八进制数、十六进制数之间如何转换,等等。从这些知 识出发,本章将主要涉及以下 5 个 方 面 的 内 容 :(1) 在 计 算 机 中 , 有 符 号 数 是 以 补 码 的 形 式 、 字 符 是 以 ASCII

20、码 的 形 式 存 放 在 存 储 器 里 的 。 (2) 存 储 器 单 元 的 内 容 是 用 存 储 器 单 元 的 地 址 来 表 示 的 。(3) 在 字 长 为 16 位 的 计 算 机 中 , 是 通 过 对 存 储 器 地 址 分 段 的 方 法 , 用 “段 地 址 : 偏 移 地址”这种方式,表示 20 位的存储器地址的。(4) 介 绍 在 CPU 中 数 据 寄 存 器 、 段 寄 存 器 、 指 针 及 变 址 寄 存 器 的 功 能 , 以 及 它 们 在 编 写 汇编语言源程序时的用途。(5)介绍 8086/8088 的 寻 址 方 式 , 着 重 阐 明 与 数

21、据 有 关 的 7 种寻址方式。1.1 有 符 号 数 和 无 符 号 数1.1.1 有符号数的补码表示计算机中的数是用二进制来表示的,其正、负号也用二进制数来表示。一般用最高有效 位来表示数的符号,即用 0 表 示 正 号 , 用 1 表 示 负 号 。 把 一 个 数 的 符 号 加 以 数 值 化 , 称 这 样 的数为机器数。在计算机内,可以用不同的码制来表示一个机器数,常见的有原码、反码和 补码三种表示方法。但大多数计算机都采用补码表示法。在补码表示法中,正数 x 的 补 码 就 是 x 的 机 器 数 。 比 如 , 当 字 长 为 8 个二进制位时,用 最高位取值为 0 表示正

22、号, 后面七位表示数值, 就构成了正数 x 的补码。 这 样, +1补= 0000001, +127补 =01111111, +0补 =00000000, 如 图 1-1(a) 所 示 。负数 x 的补码由( 2 |x|)表 示。 比如, 当 字长为 8 个二进制位时 , 1 的补码应 该表示成( 281) (这里,1 是 1 的绝对值) ,即 2561=255。由于 255 用 8 个二进制位表示时,是 11111111, 因 此 , 1 补 =11111111 。 同 样 地 , 127 补 =28127=256127=10000001 。 这 样 , 128 补=28128=256128

23、=10000000, 0补 =28=00000000。 所以, 10000000 这个数, 在补码表示法中被 定 义 为 128。 如 图 1-1(b) 所 示 。 这 样 , 8 位 补 码 能 表 示 数 的 范 围 是 :1 1 1 1 1 1 1 10 0 0 0 0 0 0 11 0 0 0 0 0 0 10 1 1 1 1 1 1 11 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0汇编语言程序设计128运 N运 +127这个范围用 16 进 制 数 表 示 时 是 : 80H运 N运 7FH。+1 的补码:+127 的补码:+0 的补码:符

24、号位符号位符号位1 的补码:127 的补码:128 的补码:0 的补码:符号位符号位符号位符号位(a) 正数的补码 (b) 负数的补码图 1-1 字长为 8 个二进制位时数的补码表示类似地,当字长 n=16 时 , +1补 =0000000000000001, 1补 =1111111111111111。 由 此 可以看出, 将一个数的补码从 8 位扩 展到 16 位 (进而从 16 位 扩展到 32 位 ) 时, 只需将符号位 扩展便可。正数的符号位扩展应在前面补 0,负数的符号位扩展应在前面补 1。因此,16 位 补码能表示的数的范围应该是:32768运 N运 +32767用 16 进 制

25、数 表 示 时 是 : 8000H运 N运 7FFFH。 一 般 地 , n 位 补 码 能 表 示 的 数 的 范 围 是 :2n1运 N运 2n11表 1-1 列 出 了 当 n=8 和 n=16 时 , 以 补 码 形 式 表 示 的 数 的 范 围 。表 1-1 补码形式下数的表示范围十进制 二进制 十六进制 十进制 十六进制n=8 n=16+127 01111111 7F +32767 7FFF+126 01111110 7E +32766 7FFE +2 00000010 02 +2 0002+1 00000001 01 +1 00010 00000000 00 0 00001 1

26、1111111 FF 1 FFFF2 11111110 FE 2 FFFE 126 10000010 82 32766 8002127 10000001 81 32767 8001128 10000000 80 32768 8000例 1-1 求 117 和 117 的 8 位补码。解 : 117 是 一 个 正 数 , 它 的 数 值 用 7 个 二 进 制 位 表 示 时 , 应 是 1110101。 所 以 +117补=01110101, 如 图 1-2(a) 所 示 。 117补 =256117=139, 它 的 二 进 制 表 示 为 10001011, 所 以 , 117补 应 该

27、 是 10001011, 如 图 1-2(b) 所 示 。 2 1 0 0 0 1 0 1 1先求正数 117 的 补 码 为 : 01110101然 后 按 位 求 反 , 结 果 为 : 10001010最 后 末 位 加 1, 结 果 为 : 10001011可 以 看 出 , 10001011 正 好 就 是 117 的 补 码 。第 1 章 汇编语言基础知识符 号 位 符 号 位0 1 1 1 0 1 0 1(a) 117 的 补 码 形 式 (b) 117 的 补 码 形 式图 1-2 117 和 117 的补码形式求负数的补码,也可以用下述的简便方法:先写出与其绝对值相等的正数的

28、补码,然后 按位求反(1 变 0, 0 变 1) ,最后再在末位加 1。比 如,求 117 的补码,步骤是:对任何一个二进制数,按位求反后末位加 1 的运算称为求补运算。可以证明,以补码表 示的数具有以下性质:性质 1: +X补 求 补 运 算 X补 求 补 运 算 +X补性质 2: X+Y补 =X补 +Y补性质 3: XY补 =X补 Y补性质 1 表示 对一个正数的补码执行求补运算, 其结果恰是与其绝对值相同的负数的补码: 同 样 地 , 对 一 个 负 数 的 补 码 执 行 求 补 运 算 , 其 结 果 恰 是 与 其 绝 对 值 相 同 的 正 数 的 补 码 。 性 质 2 表 示

29、 两 个 数 和 的 补 码 , 等 于 这 两 个 数 补 码 的 和 。 性 质 3 表 示 两 个 数 差 的 补 码 , 等 于 这 两 个 数 补 码 的 差 。要从负数的补码中找到它所对应的十进制数,往往是利用性质 1 对负数的补码执行求补 运算,得到正数的补码后,再计算出所要求的十进制数。1.1.2 补码的加法和减法在计算机中采用补码表示数,会使计算机的加、减运算非常简便。对于加法,不必去判 断数的正负号,将符号位一起参加运算就可以得到正确的结果:对于减法,可将减数求补后 变成加法进行运算,同样得到正确的结果。下面举例说明。例 1-2 求 53。解:这是减法,根据上面所述,可将减

30、数3 求 补 后 , 做 加 法 运 算 , 即 :+5补 +3补5 5 的补码: 00 00 0 101 3 3 的补码: + 1 1 11 1 101 2 计 算 结 果 : 1 00000010 (+2 的补码)例 1-3 求 2532。解:+25补 +32补 +25补 +32补25 00011001 00011001 327 00100000 1 11111001+ 11100000 11111001 (7 的 补 码 ) 3 高 位 低 位补 码 值汇编语言程序设计1表示进位 (从最高有效位向高位的进位) , 1表示借位。 由于机器字长的限制, 这种 进位会自动丢失,借位会自动进行,

31、不会影响到运算结果的正确性。计算机自动把每次运算 所产生的进位或借位保存在特定的地方,以便于检查或由程序进行判断。注意:由于受计算机字长的限制,当补码的加、减运算所得的结果超出原字长的表示范 围时,即产生溢出,这时结果是错误的。例 1-4 求 98+117。解:+98补 +117补98 01100010+ 117 + 01110101215 11010111 (负 数 )这里,两个正数相加应是正数,但结果是负数,结果错。之所以会这样,是因为 215 已超出 8 位 数 补 码 的 表 示 范 围 : 128运 N运 +127。例 1-5 求 (20)+(117)解:20补 +117补20 11

32、101100+) 117 + 10001011137 1 01110111 (正 数 )这 里 , 两 个 负 数 相 加 应 是 负 数 , 但 结 果 是 正 数 , 结 果 错 。 之 所 以 会 这 样 , 是 因 为 137 已 超出 8 位 数 补 码 的 表 示 范 围 : 128运 N运 +127。运算结果超出规定字长的补码所能表示的范围,我们称其为溢出。补码的加、减运算产 生溢出时,结果都是错误的。注意:这种错误是因为受字长的限制所引起的,并不是加减运 算的法则不对。如果我们将例 1-4 中 表 示 数 的 位 数 扩 展 到 16 位,则有:0000000001100010

33、+ 0000000001110101 0000000011010111 (00D7H)正数 00D7H 正好是 215 的补码,结果是正确的。因此,当不能确定运算是否会产生溢出时,要 选 择 适 当 的 字 长 来 扩 大 数 的 表 示 范 围 , 以 保 证 运 算 结 果 正 确 。 比 如 , 如 果 一 个 字 长 是 16 位 , 那 么 也 可 以 用 两 个 字 长 (32 位 ) 来 表 示 一 个 较 大 的 数 , 称 其 为 双 字 长 数 或 双 精 度 数 , 其 格式如图 1-3 所示。15 14 0 15 0符 号 位图 1-3 32 位 双 精 度 数 的 格

34、 式其中高位字的最高有效位为符号位, 其余的 31 位 表示数值。 也就是说, 双精度数的低位 字是无符号数。 4 第 1 章 汇编语言基础知识1.1.3 无符号数在 某 些 情 况 下 , 如 果 要 处 理 的 数 全 是 正 数 , 那 么 再 保 留 符 号 位 就 没 有 意 义 。 如 果 利 用 它 , 就 可 以 改 变 所 表 示 数 的 范 围 。 把 最 高 位 也 当 作 数 值 处 理 , 这 种 数 称 为 无 符 号 数 。 8 位 无 符 号 数 表 示 的 范 围 是 : 0运 N运 255。 显 然 , 它 与 有 符 号 数 时 表 示 的 范 围 128

35、运 N运 127 不 同 了 。 不 难 看 出 , 16 位 无 符 号 数 的 表 示 范 围 应 该 是 : 0运 N运 65535, 用 十 六 进 制 数 表 示 时 为 : 0000H运N 运FFFFH。在计算机里,把 210=1024 称为 1K,把 1024K 称 为 1M(1 ) ,因此,很 容易得出: 216=26210=641024=64K(65536) , 220=210210=1024K=1M(1048576) 。用 十 六 进 制 数 表 示 : 1K=400H, 1M=100000H。 在计算机中, 存储器的地址是用无符号数表示的。 上面提及的 32 位双精度数

36、的低位字也是无符号数。把一个正数的最高位的 0 看成是正号,或把它看作是数值 0,这对于这个正数 的值不会产生什么影响。因此,在某些情况下,正数也可以当作无符号数来处理。两个无符 号数相加,如果最高位有进位,表示无符号数溢出。产生溢出,计算结果当然是不对的,引 起这个错误的原因,上面已经给出了解释。例如:160 无符号数 160: 10100000+ 117 无符号数 117: + 01110101 267 计算结果: 1 00010101(15)此时, 因为 267 已超 出 8 位无符号数表示的范围: 02 55。 同样 , 如果扩展到 16 位进行 运算, 则结果是正确的。在多数情况下,

37、对有符号数和无符号数的处理是不一样的。1.1.4 字符的 ASCII 码计算机从键盘接收的信息,以及显示或打印输出的信息,都是以字符方式输入输出的。 一个字符,在计算机内部用 8 个 二 进 制 位 来 表 示 , 其 中 低 7 位 是 该 字 符 对 应 的 编 码 值 , 最 高 位 用 作 校 验 。 目 前 , 最 常 用 的 一 种 字 符 编 码 称 为 字 符 的 ASCII 码 , 它 是 美 国 信 息 交 换 标 准 代 码 : American Standard Code for Information Interchange 的 缩 写 。 表 1-2 列 出 了 在

38、 汇 编 语 言 中 常用字符的 7 位 ASCII 码值(16 进 制数表示) 。表 1-2 常用字符的 7 位 ASCII 码(16 进制数表示)字符 ASCII 字符 ASCII 字符 ASCII 字符 ASCII响铃 07 0 30 A 41 a 61换行 0A 1 31 B 42 b 62回车 0D 空格 20 8 38 Y 5A y 7A$ 24 9 39 Z 5B z 7B图 1-4 给 出 了 字 符 A, a, 0 和 $的 ASCII 码值在内存中的表示形式。 5 1 0 0 0 0 0 141H1 1 0 0 0 0 161H0 1 1 0 0 0 030H0 1 0 0

39、 1 0 024H汇编语言程序设计A 的 ASCII 码 值 :检 验 位a 的 ASCII 码 值 :检 验 位0 的 ASCII 码 值 :检 验 位$的 ASCII 码 值 :检 验 位图 1-4 字符 A, a, 0 和$的 ASCII 码值在内存中的表示形式1.2 存 储 器Intel 8086/8088 是 两 种 第 三 代 微 处 理 器 。 本 书 的 汇 编 语 言 是 针 对 这 两 种 微 处 理 器 的 计 算 机编写的。这两种计算机的组成基本相同,由中央处理器 CPU、 存 储 器 和 输 入 输 出 子 系 统 3 个主要部分组成,通过系统总线连接在一起。系统总线

40、又称外部总线,包括数据总线、地址 总 线 和 控 制 总 线 。 8086 的外部数据总线是 16 位 , 8088 的 外 部 数 据 总 线 是 8 位,两者的区别 仅 此 而 已 。 它 们 的 地 址 总 线 都 是 20 位 , 可 访 问 (取 数 或 存 数 ) 内 存 储 器 的 最 大 容 量 都 是 1M 字 节 。 注 意 : 1M=1024K=220。1.2.1 存储单元的地址和内容在 计 算 机 中 , 每 8 个 二 进 制 位 组 成 一 个 字 节 , 每 个 二 进 制 位 给 予 一 个 编 号 , 位 编 号 如 下 图 所 示 。7 6 5 4 3 2

41、1 0字节有时又把位编号由低到高用 D0, D1, D2, D3, D4, D5, D6 和 D7 位 来 表 示 。 存储器是以字节为单位存取信息的,存储器中的一个字节称为一个单元。为了正确地存放和读取信息,每一个字节单元都有一个地址,称为存储器的地址。地址从 0 开始编号,顷 序地每次加 1。不难理解,地址是一个无符号整数。在书写单元的地址时,如果用 2 进制数 表示,肯定很长。因此,通常都用十六进制数来书写。由于:216=26210=641024=64K因此, 16 位二 进制数可表示 64K 个字 节单元的地址, 其地址编号的范围用十六进制数表示为: 0000H FFFFH一个存储单元

42、中存放的信息称为该存储单元的内容。图 1-5 所 示 为 存 储 器 里 存 放 信 息 的 情 况 。 0004H 单元存放的信息为 34H, 也 就 是 说 0004H 单 元 的 内 容 为 34H, 表 示 为 :(0004H)=34H前面已经提及, 一个字节含 8 个二进 制位。 在 16 位字长的计算机中, 大部分数据都是以 字为单位表示的。一个字由两个字节组成,位编号如下图所示。15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0字字 节 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0高 位 字 节 MSB 低 位 字 节 LSB 6 第 1

43、 章 汇编语言基础知识因此,一个字存入存储器时,要占用相继的两个存储单元。存放的原则是:低位字节存 入低地址单元, 高位字节存入高地址单元。 也就是说, 数据存放的次序和书写次序是相反的。 存储器中两个字节单元组成一个字单元, 字单元的地址采用它的低位字节单元的地址来表示。 若某个字单元的两个字节单元的地址是 X 和 X+1, 那 么 , 这 个 字 单 元 的 地 址 应 该 是 X,而不 是 X+1。 这 个 字 单 元 的 内 容 应 该 写 成 (X), 它 的 是 两 个 字 节 单 元 的 内 容 应 该 写 成 (X+1)(X), 而 不 是 (X)(X1)。如果把图 1-5 所

44、示的 0004H 0005H 两个字节单元视为一个字单元,要把 1234H 存放在 里面,那么在地址为 0004H 的单元里,存放的应该是低字节 34H: 地 址 为 0005H 的 单 元 里 , 存放的应该是高字节 12H。 这个字单元的地址应该是 0004H, 这个字单元的内容应该表示为:(0004H) =1234H内 存 储 器0000H0001H0002H0003H一 个 单 元 (字 节 )0004H0005H0006H0007H0 0 1 1 0 1 0 00 0 0 1 0 0 1 034H12H图 1-5 存 储 单 元 的 地 址 和 内 容由此可见,对于存储器,同一个地址

45、既可以看成是字节单元的地址,也可以看成是一个 字单元的地址。 一般来说, 字单元的地址可以是偶数, 也可以是奇数。 在 8086 处 理器的计算 机中 (16 位 外部数据总线 ) , 是以偶地址访问存储器的, 所以要取一个奇地址中的数据, CPU 要访问两次存储器。综上所述,下面 3 点 是 汇 编 语 言 的 基 础 , 必 须 牢 记 。 (1) 用 存 储 器 单 元 的 地 址 外 面 加 括 号 的 方 法 , 来 表 示 一 个 存 储 单 元 的 内 容 。 例 如 :(0004H)=34H, 或 (0004H)=1234H。(2)一个字 存入存储器要占用相继的两个存储单元,

46、存放时, 低位字节存入低地址单元, 高位字节存入高地址单元。(3)同一个存储单元的地址既可看成是字节单元的地址,又可看成是字单元的地址。字 单元的地址采用它的低字节单元的地址来表示。1.2.2 存储器地址的分段在 8086/8088 处理器的计算机中,内存储器的最大容量为 1M 字 节 。 由 于 :1M=1024K=220 7 汇编语言程序设计因此, 在 1M 字节的存储器中 , 每个存储器单元的地址应该用 20 个二进 制位来表示。 若用十 六进制数来表示这 1M 字节的地址范围,那么应该是 00000H FFFFFH。 这 就 是 说 , 每 个 存 储器单元有一个惟一的 20 位 地

47、址 , 称 为 该 存 储 器 单 元 的 物 理 地 址 。 CPU 是用物理地址对存 储器进行访问的。前 面 已 经 说 过 , 16 位 二 进 制 数 所 能 表 示 的 地 址 范 围 是 0000H FFFFH, 而 1M 字 节 的 存 储器地址范围是 00000H FFFFFH。 那 么 在 16 位字长的计算机中,用什么方法来表示 20 位 地址呢?这就要借助于存储器地址分段来解决。具体的做法如下。在 1M 字 节 的 内 存 地 址 范 围 内 , 从 00000H 地 址 开 始 , 每 16 个 字 节 划 分 成 为 一 小 段 。 那 么,在 00000H FFFF

48、FH 地址范围内,这样的小段总共有 64K 个。各小段的地址分布如下:00000H, 00001H, 00002H, , 0000EH, 0000FH00010H, 00011H, 00012H, , 0001EH, 0001FH00020H, 00021H, 00022H, , 0002EH, 0002FHFFFE0H, FFFE1H, FFFE2H, , FFFEEH, FFFEFH FFFF0H, FFFF1H, FFFF2H, , FFFFEH, FFFFFH其中,第一列的地址便是每个小段的首地址。分析这些首地址,可以看出它们有这样的共同 特点:十六进制数表示的地址中,最低一位是 0。

49、如果把它们展开成二进制表示,意味着这 些 20 位 地 址 中 的 最 低 4 个二进制位为 0000。编 写 汇 编 语 言 程 序 时 , 根 据 需 要 可 以 将 1M 字 节 的 地 址 分 为 若 干 个 段 , 规 定 每 个 段 的 起 始 地 址 必 须 从 任 意 一 小 段 的 首 地 址 开 始 , 每 个 段 的 大 小 可 达 64K。 注 意 : 64K 这 个 范 围 内 的 地 址 , 正 好 可 以 用 16 位 二 进 制 数 来 表 示 。 由 于 段 的 起 始 的 地 址 最 低 4 位 为 0, 于 是 可 以 用 一 个 字 来 存 放 它 的 高

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

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

道客多多©版权所有2020-2025营业执照举报