注册 登录 进入教材巡展
#
  • #

出版时间:2022-06

出版社:机械工业出版社

以下为《汇编语言:基于x86处理器(原书第8版)》的配套数字资源,这些资源在您购买图书后将免费附送给您:
试读
  • 机械工业出版社
  • 9787111690436
  • 1-1
  • 431531
  • 46257658-8
  • 平装
  • 16开
  • 2022-06
  • 939
  • 592
  • 工学
  • 计算机科学与技术
  • 计算机科学与技术
  • 本科
内容简介
本书专门为Intel/Windows/DOS平台编写,对汇编语言进行了完整且详细的研究和讲解,教授读者在机器级编写和调试程序。第1~9章包含汇编语言的基本概念、x86处理器架构、汇编语言基础、过程等核心概念,后续章节讲解了结构和宏、MS-Windows编程、浮点数处理和指令编码等内容。本书不仅可作为汇编语言课程的教材,还可以作为计算机系统基础和体系结构基础方面的教材,符合国内所提倡的系统观教学理念。书中不仅讲授具体问题的解决方案,而且注重帮助学生举一反三,综合应用,学到的编程理念能顺利应用于其他编程的课程中。
目录
译者序
前言
关于作者
相关码表
第1章 基本概念 1
1.1 欢迎来到汇编语言的世界 1
1.1.1 读者可能会问的问题 2
1.1.2 汇编语言的应用 4
1.1.3 本节回顾 5
1.2 虚拟机概念 5
1.2.1 本节回顾 6
1.3 数据表示 7
1.3.1 二进制整数 7
1.3.2 二进制加法 9
1.3.3 整数存储大小 9
1.3.4 十六进制整数 10
1.3.5 十六进制加法 11
1.3.6 有符号二进制整数 12
1.3.7 二进制减法 14
1.3.8 字符存储 14
1.3.9 二进制编码的十进制数 16
1.3.10 本节回顾 16
1.4 布尔表达式 17
1.4.1 布尔函数的真值表 18
1.4.2 本节回顾 19
1.5 本章小结 20
1.6 关键术语 20
1.7 复习题和练习 21
1.7.1 简答题 21
1.7.2 算法题 22
第2章 x86处理器架构 23
2.1 一般概念 23
2.1.1 基本微机设计 23
2.1.2 指令执行周期 24
2.1.3 读取内存 25
2.1.4 加载并执行程序 26
2.1.5 本节回顾 27
2.2 32位x86处理器 27
2.2.1 操作模式 27
2.2.2 基本执行环境 28
2.2.3 x86内存管理 30
2.2.4 本节回顾 31
2.3 64位x86-64处理器 31
2.3.1 64位操作模式 32
2.3.2 基本的64位执行环境 32
2.3.3 本节回顾 33
2.4 典型x86计算机的组件 33
2.4.1 母板 33
2.4.2 内存 35
2.4.3 本节回顾 35
2.5 输入/输出系统 36
2.5.1 I/O访问层次 36
2.5.2 本节回顾 38
2.6 本章小结 38
2.7 关键术语 39
2.8 复习题 40
第3章 汇编语言基础 41
3.1 基本语言元素 41
3.1.1 第一个汇编语言程序 41
3.1.2 整数字面量 42
3.1.3 常整数表达式 43
3.1.4 实数字面量 43
3.1.5 字符字面量 44
3.1.6 字符串字面量 44
3.1.7 保留字 44
3.1.8 标识符 45
3.1.9 伪指令 45
3.1.10 指令 46
3.1.11 本节回顾 48
3.2 示例:整数加减法 48
3.2.1 AddTwo程序 48
3.2.2 运行和调试AddTwo程序 50
3.2.3 程序模板 54
3.2.4 本节回顾 54
3.3 汇编、链接和运行程序 55
3.3.1 汇编–链接–执行周期 55
3.3.2 列表文件 55
3.3.3 本节回顾 57
3.4 定义数据 57
3.4.1 内部数据类型 57
3.4.2 数据定义语句 58
3.4.3 向AddTwo程序添加一个变量 58
3.4.4 定义BYTE和SBYTE数据 59
3.4.5 定义WORD和SWORD数据 61
3.4.6 定义DWORD和SDWORD数据 61
3.4.7 定义QWORD数据 62
3.4.8 定义压缩的BCD(TBYTE)数据 62
3.4.9 定义浮点类型 62
3.4.10 变量相加程序 63
3.4.11 小端序 64
3.4.12 声明未初始化数据 64
3.4.13 本节回顾 65
3.5 符号常量 65
3.5.1 等号伪指令 66
3.5.2 计算数组和字符串的大小 67
3.5.3 EQU伪指令 68
3.5.4 TEXTEQU伪指令 68
3.5.5 本节回顾 69
3.6 64位编程介绍 70
3.7 本章小结 71
3.8 关键术语 72
3.8.1 术语 72
3.8.2 指令、操作符及伪指令 72
3.9 复习题和练习 73
3.9.1 简答题 73
3.9.2 算法题 73
3.10 编程练习 74
第4章 数据传送、寻址及算术运算 75
4.1 数据传送指令 75
4.1.1 引言 75
4.1.2 操作数类型 75
4.1.3 直接内存操作数 76
4.1.4 MOV指令 77
4.1.5 整数的零/符号扩展 78
4.1.6 LAHF和SAHF指令 79
4.1.7 XCHG指令 80
4.1.8 直接–偏移量操作数 80
4.1.9 传送数据的示例 81
4.1.10 本节回顾 83
4.2 加法和减法 84
4.2.1 INC和DEC指令 84
4.2.2 ADD指令 84
4.2.3 SUB指令 85
4.2.4 NEG指令 85
4.2.5 实现算术表达式 85
4.2.6 加减法影响的标志 86
4.2.7 示例程序(AddSubTest) 88
4.2.8 本节回顾 89
4.3 与数据相关的操作符和伪指令 90
4.3.1 OFFSET操作符 90
4.3.2 ALIGN伪指令 91
4.3.3 PTR操作符 92
4.3.4 TYPE操作符 92
4.3.5 LENGTHOF操作符 93
4.3.6 SIZEOF操作符 93
4.3.7 LABEL伪指令 94
4.3.8 本节回顾 94
4.4 间接寻址 94
4.4.1 间接操作数 94
4.4.2 数组 95
4.4.3 变址操作数 96
4.4.4 指针 97
4.4.5 本节回顾 99
4.5 JMP和LOOP指令 100
4.5.1 JMP指令 100
4.5.2 LOOP指令 101
4.5.3 在Visual Studio调试器中显示数组 102
4.5.4 整数数组求和 103
4.5.5 复制字符串 103
4.5.6 本节回顾 104
4.6 64位编程 105
4.6.1 MOV指令 105
4.6.2 64位版本的SumArray程序 105
4.6.3 加法和减法 106
4.6.4 本节回顾 107
4.7 本章小结 107
4.8 关键术语 109
4.8.1 术语 109
4.8.2 指令、操作符及伪指令 109
4.9 复习题和练习 109
4.9.1 简答题 109
4.9.2 算法题 111
4.10 编程练习 112
第5章 过程 113
5.1 堆栈操作 113
5.1.1 运行时堆栈(32位模式) 113
5.1.2 PUSH和POP指令 115
5.1.3 本节回顾 118
5.2 定义和使用过程 118
5.2.1 PROC伪指令 118
5.2.2 CALL和RET指令 120
5.2.3 嵌套过程调用 120
5.2.4 向过程传递寄存器参数 121
5.2.5 示例:整数数组求和 122
5.2.6 保存和恢复寄存器 123
5.2.7 本节回顾 124
5.3 链接到外部库 124
5.3.1 背景信息 125
5.3.2 本节回顾 125
5.4 Irvine32库 126
5.4.1 创建库的动机 126
5.4.2 Win32控制台窗口 127
5.4.3 各个过程的描述 128
5.4.4 库测试程序 138
5.4.5 本节回顾 144
5.5 64位汇编编程 145
5.5.1 Irvine64库 145
5.5.2 调用64位子例程 145
5.5.3 x64调用规约 146
5.5.4 调用过程的示例程序 146
5.5.5 本节回顾 147
5.6 本章小结 148
5.7 关键术语 149
5.7.1 术语 149
5.7.2 指令、操作符及伪指令 149
5.8 复习题和练习 149
5.8.1 简答题 149
5.8.2 算法题 151
5.9 编程练习 152
第6章 条件处理 154
6.1 布尔和比较指令 154
6.1.1 CPU状态标志 154
6.1.2 AND指令 155
6.1.3 OR指令 156
6.1.4 位映射集 157
6.1.5 XOR指令 158
6.1.6 NOT指令 159
6.1.7 TEST指令 159
6.1.8 CMP指令 160
6.1.9 置位和清零各个CPU标志 161
6.1.10 64位模式下的布尔指令 161
6.1.11 本节回顾 161
6.2 条件跳转 162
6.2.1 条件结构 162
6.2.2 Jcond指令 162
6.2.3 条件跳转指令的类型 163
6.2.4 条件跳转应用 166
6.2.5 本节回顾 169
6.3 条件循环指令 170
6.3.1 LOOPZ和LOOPE指令 170
6.3.2 LOOPNZ和LOOPNE指令 170
6.3.3 本节回顾 171
6.4 条件结构 171
6.4.1 块结构的IF语句 171
6.4.2 复合表达式 175
6.4.3 WHILE循环 176
6.4.4 表驱动的选择 178
6.4.5 本节回顾 180
6.5 应用:有限状态机 181
6.5.1 验证输入字符串 181
6.5.2 验证有符号整数 182
6.5.3 本节回顾 185
6.6 条件控制流伪指令(可选主题) 186
6.6.1 创建IF语句 186
6.6.2 有符号数和无符号数的比较 188
6.6.3 复合表达式 189
6.6.4 用.REPEAT和.WHILE创建循环 191
6.7 本章小结 192
6.8 关键术语 193
6.8.1 术语 193
6.8.2 指令、操作符及伪指令 193
6.9 复习题和练习 194
6.9.1 简答题 194
6.9.2 算法题 195
6.10 编程练习 196
6.10.1 对代码测试的建议 196
6.10.2 习题描述 197
第7章 整数算术运算 200
7.1 移位和循环移位指令 200
7.1.1 逻辑移位和算术移位 200
7.1.2 SHL指令 201
7.1.3 SHR指令 202
7.1.4 SAL和SAR指令 202
7.1.5 ROL指令 203
7.1.6 ROR指令 204
7.1.7 RCL和RCR指令 204
7.1.8 有符号数溢出 205
7.1.9 SHLD/SHRD指令 205
7.1.10 本节回顾 207
7.2 移位和循环移位的应用 207
7.2.1 多个双字的移位 208
7.2.2 通过移位做乘法 208
7.2.3 显示二进制位 209
7.2.4 提取文件日期字段 210
7.2.5 本节回顾 210
7.3 乘法和除法指令 212
7.3.1 无符号整数乘法(MUL) 212
7.3.2 有符号整数乘法(IMUL) 213
7.3.3 测量程序执行时间 216
7.3.4 无符号整数除法(DIV) 217
7.3.5 有符号整数除法(IDIV) 219
7.3.6 实现算术表达式 222
7.3.7 本节回顾 224
7.4 扩展的加减法 225
7.4.1 ADC指令 225
7.4.2 扩展加法的示例 225
7.4.3 SBB指令 227
7.4.4 本节回顾 228
7.5 ASCII和非压缩十进制算术运算 228
7.5.1 AAA指令 229
7.5.2 AAS指令 230
7.5.3 AAM指令 231
7.5.4 AAD指令 231
7.5.5 本节回顾 231
7.6 压缩十进制的算术运算 232
7.6.1 DAA指令 232
7.6.2 DAS指令 233
7.6.3 本节回顾 233
7.7 本章小结 234
7.8 关键术语 235
7.8.1 术语 235
7.8.2 指令、操作符及伪指令 235
7.9 复习题和练习 235
7.9.1 简答题 235
7.9.2 算法题 237
7.10 编程练习 237
第8章 高级过程 240
8.1 引言 240
8.2 堆栈帧 240
8.2.1 堆栈参数 240
8.2.2 寄存器参数的缺点 241
8.2.3 访问堆栈参数 243
8.2.4 32位调用规约 245
8.2.5 局部变量 246
8.2.6 引用参数 247
8.2.7 LEA指令 248
8.2.8 ENTER和LEAVE指令 249
8.2.9 LOCAL伪指令 250
8.2.10 Microsoft x64调用规约 251
8.2.11 本节回顾 252
8.3 递归 252
8.3.1 递归求和 253
8.3.2 计算阶乘 254
8.3.3 本节回顾 258
8.4 INVOKE、ADDR、PROC及PROTO 259
8.4.1 INVOKE伪指令 259
8.4.2 ADDR操作符 260
8.4.3 PROC伪指令 260
8.4.4 PROTO伪指令 263
8.4.5 参数分类 266
8.4.6 示例:交换两个整数 266
8.4.7 调试提示 267
8.4.8 WriteStackFrame过程 267
8.4.9 本节回顾 268
8.5 创建多模块程序 269
8.5.1 隐藏和导出过程名 269
8.5.2 调用外部过程 269
8.5.3 跨模块使用变量和符号 270
8.5.4 示例:ArraySum程序 271
8.5.5 用Extern创建模块 271
8.5.6 用INVOKE和PROTO创建模块 274
8.5.7 本节回顾 277
8.6 参数的高级用法(可选主题) 277
8.6.1 受USES操作符影响的堆栈 277
8.6.2 向堆栈传递8位和16位参数 278
8.6.3 传递64位参数 279
8.6.4 非双字局部变量 280
8.7 Java字节码(可选主题) 281
8.7.1 Java虚拟机 281
8.7.2 指令集 282
8.7.3 Java反汇编示例 283
8.7.4 示例:条件分支 285
8.8 本章小结 287
8.9 关键术语 288
8.9.1 术语 288
8.9.2 指令、操作符及伪指令 288
8.10 复习题和练习 288
8.10.1 简答题 288
8.10.2 算法题 289
8.11 编程练习 289
第9章 字符串和数组 291
9.1 引言 291
9.2 字符串原语指令 291
9.2.1 MOVSB、MOVSW及MOVSD 292
9.2.2 CMPSB、CMPSW及CMPSD 293
9.2.3 SCASB、SCASW及SCASD 293
9.2.4 STOSB、STOSW及STOSD 294
9.2.5 LODSB、LODSW及LODSD 294
9.2.6 本节回顾 294
9.3 若干字符串过程 295
9.3.1 Str_compare过程 295
9.3.2 Str_length过程 296
9.3.3 Str_copy过程 297
9.3.4 Str_trim过程 297
9.3.5 Str_ucase过程 299
9.3.6 字符串库演示程序 300
9.3.7 Irvine64库中的字符串过程 301
9.3.8 本节回顾 304
9.4 二维数组 304
9.4.1 行列顺序 304
9.4.2 基址–变址操作数 305
9.4.3 基址–变址–位移操作数 306
9.4.4 64位模式下的基址–变址操作数 307
9.4.5 本节回顾 308
9.5 整数数组的查找和排序 308
9.5.1 冒泡排序 309
9.5.2 对半查找 310
9.5.3 本节回顾 315
9.6 Java字节码:字符串处理(可选主题) 315
9.7 本章小结 316
9.8 关键术语和指令 317
9.9 复习题和练习 317
9.9.1 简答题 317
9.9.2 算法题 318
9.10 编程练习 318
第10章 结构和宏 322
10.1 结构 322
10.1.1 定义结构 322
10.1.2 声明结构对象 323
10.1.3 引用结构对象 324
10.1.4 示例:显示系统时间 327
10.1.5 结构包含结构 329
10.1.6 示例:醉汉行走 329
10.1.7 声明和使用联合 332
10.1.8 本节回顾 334
10.2 宏 334
10.2.1 概述 334
10.2.2 定义宏 335
10.2.3 调用宏 336
10.2.4 其他宏特性 337
10.2.5 使用本书的宏库(仅32位模式) 340
10.2.6 示例程序:封装器 345
10.2.7 本节回顾 346
10.3 条件汇编伪指令 347
10.3.1 检查缺失的参数 347
10.3.2 默认参数初始化值 348
10.3.3 布尔表达式 348
10.3.4 IF、ELSE及ENDIF伪指令 349
10.3.5 IFIDN和IFIDNI伪指令 349
10.3.6 示例:矩阵行求和 350
10.3.7 特殊操作符 353
10.3.8 宏函数 356
10.3.9 本节回顾 357
10.4 定义重复语句块 357
10.4.1 WHILE伪指令 358
10.4.2 REPEAT伪指令 358
10.4.3 FOR伪指令 358
10.4.4 FORC伪指令 359
10.4.5 示例:链表 360
10.4.6 本节回顾 361
10.5 本章小结 362
10.6 关键术语 363
10.6.1 术语 363
10.6.2 操作符及伪指令 363
10.7 复习题和练习 364
10.7.1 简答题 364
10.7.2 算法题 364
10.8 编程练习 366
第11章 MS-Windows编程 368
11.1 Win32控制台编程 368
11.1.1 背景信息 368
11.1.2 Win32控制台函数 371
11.1.3 显示消息框 373
11.1.4 控制台输入 375
11.1.5 控制台输出 380
11.1.6 读写文件 382
11.1.7 Irvine32库中的文件I/O 385
11.1.8 测试文件I/O过程 386
11.1.9 控制台窗口操作 389
11.1.10 控制光标 392
11.1.11 控制文本颜色 392
11.1.12 时间和日期函数 394
11.1.13 使用64位Windows API 397
11.1.14 本节回顾 398
11.2 编写图形化的Windows应用程序 398
11.2.1 必要的结构 399
11.2.2 MessageBox函数 400
11.2.3 WinMain过程 400
11.2.4 WinProc过程 401
11.2.5 ErrorHandler过程 401
11.2.6 程序清单 402
11.2.7 本节回顾 405
11.3 动态内存分配 405
11.3.1 HeapTest程序 408
11.3.2 本节回顾 411
11.4 32位x86存储管理 411
11.4.1 线性地址 412
11.4.2 页转换 414
11.4.3 本节回顾 416
11.5 本章小结 416
11.6 关键术语 417
11.7 复习题和练习 417
11.7.1 简答题 417
11.7.2 算法题 418
11.8 编程练习 418
第12章 浮点数处理和指令编码 420
12.1 浮点数的二进制表示 420
12.1.1 IEEE二进制浮点数表示 420
12.1.2 阶数 421
12.1.3 规格化二进制浮点数 422
12.1.4 创建IEEE表示 422
12.1.5 将十进制分数转换为二进制实数 424
12.1.6 本节回顾 425
12.2 浮点单元 425
12.2.1 FPU寄存器栈 426
12.2.2 舍入 428
12.2.3 浮点异常 429
12.2.4 浮点指令集 429
12.2.5 算术运算指令 432
12.2.6 比较浮点数值 435
12.2.7 读写浮点数值 437
12.2.8 异常同步 438
12.2.9 代码示例 439
12.2.10 混合模式算术运算 440
12.2.11 屏蔽和非屏蔽异常 441
12.2.12 本节回顾 442
12.3 x86指令编码 443
12.3.1 指令格式 443
12.3.2 单字节指令 444
12.3.3 将立即数送入寄存器 444
12.3.4 寄存器模式指令 445
12.3.5 处理器操作数大小前缀 446
12.3.6 内存模式指令 446
12.3.7 本节回顾 448
12.4 本章小结 449
12.5 关键术语 450
12.6 复习题和练习 450
12.6.1 简答题 450
12.6.2 算法题 451
12.7 编程练习 452
第13章 高级语言接口 454
13.1 引言 454
13.1.1 通用规约 454
13.1.2 .MODEL伪指令 455
13.1.3 检查编译器生成的代码 457
13.1.4 本节回顾 460
13.2 内联汇编代码 461
13.2.1 Visual C++中的_?_asm伪指令 461
13.2.2 文件加密示例 463
13.2.3 本节回顾 465
13.3 将32位汇编语言代码链接到C/C++ 466
13.3.1 IndexOf示例 466
13.3.2 调用C和C++函数 469
13.3.3 乘法表的示例 471
13.3.4 本节回顾 474
13.4 本章小结 474
13.5 关键术语 474
13.6 复习题 474
13.7 编程练习 475
第14章 16位MS-DOS编程 476
14.1 MS-DOS和IBM-PC 476
14.1.1 内存组织 476
14.1.2 重定向输入/输出 478
14.1.3 软件中断 478
14.1.4 INT指令 478
14.1.5 16位程序的代码编写 479
14.1.6 本节回顾 481
14.2 MS-DOS功能调用(INT 21h) 481
14.2.1 若干输出功能 482
14.2.2 Hello World程序示例 483
14.2.3 若干输入功能 484
14.2.4 日期/时间功能 487
14.2.5 本节回顾 490
14.3 标准的MS-DOS文件I/O服务 490
14.3.1 创建或打开文件(716Ch) 491
14.3.2 关闭文件句柄(3Eh) 492
14.3.3 移动文件指针(42h) 493
14.3.4 获取文件创建日期和时间 493
14.3.5 若干库过程 494
14.3.6 示例:读取和复制一个文本文件 495
14.3.7 读取MS-DOS命令的尾部 496
14.3.8 示例:创建二进制文件 498
14.3.9 本节回顾 501
14.4 本章小结 501
14.5 关键术语 503
14.6 编程练习 503
第15章 磁盘基础知识 505
15.1 磁盘存储系统 505
15.1.1 磁道、柱面及扇区 505
15.1.2 磁盘分区(卷) 506
15.1.3 本节回顾 507
15.2 文件系统 508
15.2.1 FAT12 508
15.2.2 FAT16 509
15.2.3 FAT32 509
15.2.4 NTFS 509
15.2.5 主磁盘区 510
15.2.6 本节回顾 510
15.3 磁盘目录 511
15.3.1 MS-DOS目录结构 512
15.3.2 MS-Windows中的长文件名 513
15.3.3 文件分配表 515
15.3.4 本节回顾 515
15.4 读写磁盘扇区 515
15.4.1 扇区显示程序 517
15.4.2 本节回顾 520
15.5 系统级文件功能 520
15.5.1 获取磁盘空闲空间(7303h) 520
15.5.2 创建子目录(39h) 523
15.5.3 删除子目录(3Ah) 523
15.5.4 设置当前目录(3Bh) 523
15.5.5 获取当前目录(47h) 524
15.5.6 获取和设置文件属性(7143h) 524
15.5.7 本节回顾 525
15.6 本章小结 525
15.7 关键术语 526
15.8 编程练习 526
第16章 BIOS级编程 528
16.1 引言 528
16.1.1 BIOS数据区 528
16.2 使用INT 16h进行键盘输入 529
16.2.1 键盘如何工作 530
16.2.2 INT 16h功能 530
16.2.3 本节回顾 534
16.3 使用INT 10h进行视频编程 534
16.3.1 基本背景 534
16.3.2 控制颜色 536
16.3.3 INT 10h视频功能 537
16.3.4 库过程示例 546
16.3.5 本节回顾 547
16.4 使用INT 10h绘制图形 547
16.4.1 INT 10h与像素有关的功能 548
16.4.2 程序DrawLine 548
16.4.3 笛卡尔坐标程序 550
16.4.4 将笛卡尔坐标转换为屏幕坐标 552
16.4.5 本节回顾 552
16.5 内存映射的图形 553
16.5.1 模式13h:320×200,256色 553
16.5.2 内存映射图形程序 554
16.5.3 本节回顾 556
16.6 鼠标编程 557
16.6.1 鼠标INT 33h功能 557
16.6.2 鼠标跟踪程序 561
16.6.3 本节回顾 565
16.7 本章小结 565
16.8 编程练习 566
网络资源
附录A MASM参考知识
附录B x86指令集
附录C BIOS和MS-DOS中断
附录D “本节回顾”的问题答案(第14~16章)
词汇表
Baidu
map