《INTEL汇编语言程序设计 第5版》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:(美)KIP R.IRVINE著;温玉杰 梅广宇 罗云彬等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2007
  • ISBN:9787121043994
  • 页数:660 页
图书介绍:本书全面细致地讲述了汇编语言程序设计的各个方面。从微处理器体系结构、工作机制到指令集;从最基本的编译器链器的使用到高级过程、结构和宏的使用;从用纯汇编编写程序到用C/C++等最新编译器与汇编的混合接口编程;从16位实模式下BIOS、DOS实模式文本及图形程序设计到32位保护模式的Windows程序设计;从磁盘基础知识到Intel指令编码、浮点运算等相关知识都做了深入而细致的讲解。

第1章 基本概念 1

1.1 欢迎来到汇编语言的世界 1

1.1.1 一些精彩的提问 2

1.1.2 汇编语言应用程序 4

1.1.3 本节习题 5

1.2 虚拟机的概念 5

1.2.1 PC汇编编译器的历史 7

1.2.2 本节习题 7

1.3 数据的表示方法 8

1.3.1 二进制数 8

1.3.2 二进制加法 10

1.3.3 整数存储的尺寸 10

1.3.4 十六进制整数 11

1.3.5 有符号整数 12

1.3.6 字符的存储 14

1.3.7 本节习题 16

1.4 布尔运算 17

1.4.1 布尔函数的真值表 19

1.4.2 本节习题 20

1.5 本章小结 20

第2章 IA-32处理器体系结构 22

2.1 基本概念 22

2.1.1 微机的基本结构 22

2.1.2 指令执行周期 23

2.1.3 内存的读取 26

2.1.4 程序是如何运行的 27

2.1.5 本节习题 29

2.2 IA-32处理器体系结构 29

2.2.1 操作模式 29

2.2.2 基本执行环境 30

2.2.3 浮点单元 32

2.2.4 Intel微处理器的历史 33

2.2.5 本节习题 34

2.3 IA-32的内存管理 35

2.3.1 实地址模式 35

2.3.2 保护模式 37

2.3.3 本节习题 39

2.4 IA-32微机的构成 39

2.4.1 主板 39

2.4.2 视频输出 40

2.4.3 存储器 41

2.4.4 输入输出接口 41

2.4.5 本节习题 42

2.5 输入输出系统 42

2.5.1 所有这一切是如何工作的 42

2.5.2 本节习题 44

2.6 本章小结 45

第3章 汇编语言基础 47

3.1 汇编语言的基本元素 47

3.1.1 整数常量 47

3.1.2 整数表达式 48

3.1.3 实数常量 48

3.1.4 字符常量 49

3.1.5 字符串常量 49

3.1.6 保留字 49

3.1.7 标识符 49

3.1.8 伪指令 50

3.1.9 指令 50

3.1.10 NOP(空操作)指令 52

3.1.11 本节习题 53

3.2 例子:整数相加减 53

3.2.1 AddSub的另一个版本 55

3.2.2 程序模板 56

3.2.3 本节习题 56

3.3 汇编、链接和运行程序 57

3.3.1 汇编-链接-执行 57

3.3.2 本节习题 59

3.4 定义数据 59

3.4.1 内部数据类型 59

3.4.2 数据定义语句 59

3.4.3 定义BYTE和SBYTE数据 60

3.4.4 定义WORD和SWORD数据 62

3.4.5 定义DWORD和SDWORD数据 62

3.4.6 定义QWORD数据 63

3.4.7 定义TBYTE数据 63

3.4.8 定义实数 63

3.4.9 小尾顺序 64

3.4.10 为AddSub程序添加变量 64

3.4.11 未初始化数据的声明 65

3.4.12 本节习题 65

3.5 符号常量 66

3.5.1 等号伪指令 66

3.5.2 计算数组和字符串的大小 67

3.5.3 EQU伪指令 68

3.5.4 TEXTEQU伪指令 68

3.5.5 本节习题 69

3.6 实地址模式程序设计(可选) 69

3.6.1 基本的修改 69

3.7 本章小结 70

3.8 编程练习 71

第4章 数据传送、寻址和算术运算 72

4.1 数据传送指令 72

4.1.1 简介 72

4.1.2 操作数类型 72

4.1.3 直接内存操作数 73

4.1.4 MOV指令 73

4.1.5 整数的零/符号扩展 74

4.1.6 LAHF和SAHF指令 76

4.1.7 XCHG指令 76

4.1.8 直接偏移操作数 77

4.1.9 例子程序(数据传送) 78

4.1.10 本节习题 78

4.2 加法和减法 79

4.2.1 INC和DEC指令 79

4.2.2 ADD指令 80

4.2.3 SUB指令 80

4.2.4 NEG指令 81

4.2.5 实现算术表达式 81

4.2.6 加法和减法影响的标志 81

4.2.7 例子程序(AddSub3) 85

4.2.8 本节习题 86

4.3 和数据相关的操作符和伪指令 86

4.3.1 OFFSET操作符 87

4.3.2 ALIGN伪指令 87

4.3.3 PTR操作符 88

4.3.4 TYPE操作符 89

4.3.5 LENGTHOF操作符 89

4.3.6 SIZEOF操作符 89

4.3.7 LABEL伪指令 90

4.3.8 本节习题 90

4.4 间接寻址 91

4.4.1 间接操作数 91

4.4.2 数组 92

4.4.3 变址操作数 93

4.4.4 指针 94

4.4.5 本节习题 95

4.5 JMP和LOOP指令 96

4.5.1 JMP指令 96

4.5.2 LOOP指令 97

4.5.3 整数数组求和 98

4.5.4 复制字符串 99

4.5.5 本节习题 99

4.6 本章小结 100

4.7 编程练习 101

第5章 过程 103

5.1 简介 103

5.2 与外部库链接 103

5.2.1 背景知识 103

5.2.2 本节习题 104

5.3 本书附带的链接库 104

5.3.1 概述 104

5.3.2 过程的描述 106

5.3.3 库测试程序 116

5.3.4 本节习题 119

5.4 堆栈操作 119

5.4.1 运行时栈 120

5.4.2 PUSH和POP指令 122

5.4.3 本节习题 124

5.5 过程的定义和使用 124

5.5.1 PROC伪指令 125

5.5.2 CALL和RET指令 126

5.5.3 例子:对整数数组求和 129

5.5.4 流程图 129

5.5.5 保存和恢复寄存器 130

5.5.6 本节习题 132

5.6 使用过程进行程序设计 132

5.6.1 整数求和程序(设计) 132

5.6.2 整数求和程序的实现 134

5.6.3 本节习题 136

5.7 本章小结 136

5.8 编程练习 137

第6章 条件处理 139

6.1 简介 139

6.2 布尔和比较指令 139

6.2.1 CPU的状态标志 140

6.2.2 AND指令 140

6.2.3 OR指令 141

6.2.4 XOR指令 142

6.2.5 NOT指令 143

6.2.6 TEST指令 143

6.2.7 CMP指令 144

6.2.8 设置和清除单个CPU状态标志 145

6.2.9 本节习题 145

6.3 条件跳转 146

6.3.1 条件结构 146

6.3.2 条件跳转(Jcond)指令 146

6.3.3 条件跳转指令的类型 147

6.3.4 条件跳转的应用 151

6.3.5 位测试指令(可选) 154

6.3.6 本节习题 156

6.4 条件循环指令 156

6.4.1 LOOPZ和LOOPE指令 156

6.4.2 LOOPNZ和LOOPNE指令 157

6.4.3 本节习题 157

6.5 条件结构 158

6.5.1 IF块结构语句 158

6.5.2 复合表达式 160

6.5.3 WHILE循环 161

6.5.4 以表格驱动的分支选择 163

6.5.5 本节习题 165

6.6 应用:有限状态机 166

6.6.1 输入字符串的验证 166

6.6.2 有符号整数的验证 167

6.6.3 本节习题 170

6.7 决策伪指令 170

6.7.1 有符号比较和无符号比较 171

6.7.2 复合表达式 172

6.7.3 .REPEAT和.WHILE伪指令 174

6.8 本章小结 175

6.9 编程练习 176

第7章 整数算术指令 179

7.1 简介 179

7.2 移位和循环移位指令 179

7.2.1 逻辑移位和算术移位 180

7.2.2 SHL指令 180

7.2.3 SHR指令 181

7.2.4 SAL和SAR指令 182

7.2.5 ROL指令 182

7.2.6 ROR指令 183

7.2.7 RCL和RCR指令 183

7.2.8 符号溢出 184

7.2.9 SHLD/SHRD指令 184

7.2.10 本节习题 185

7.3 移位和循环移位的应用 186

7.3.1 多双字移位 186

7.3.2 二进制乘法 187

7.3.3 显示二进制数的数据位 187

7.3.4 分离MS-DOS文件的各个日期域 188

7.3.5 本节习题 188

7.4 乘法和除法指令 189

7.4.1 MUL指令 189

7.4.2 IMUL指令 190

7.4.3 乘法操作的基准(性能)测试 192

7.4.4 DIV指令 192

7.4.5 有符号整数除法 193

7.4.6 算术表达式的实现 195

7.4.7 本节习题 196

7.5 扩展加法和减法 197

7.5.1 ADC指令 197

7.5.2 扩展加法的例子 198

7.5.3 SBB指令 199

7.5.4 本节习题 199

7.6 ASCII和未压缩十进制算术指令 200

7.6.1 AAA指令 201

7.6.2 AAS指令 202

7.6.3 AAM指令 202

7.6.4 AAD指令 203

7.6.5 本节习题 203

7.7 压缩十进制算术指令 203

7.7.1 DAA指令 204

7.7.2 DAS指令 205

7.7.3 本节习题 205

7.8 本章小结 205

7.9 编程练习 206

第8章 高级过程 208

8.1 简介 208

8.2 堆栈框架 208

8.2.1 堆栈参数 209

8.2.2 局部变量 216

8.2.3 ENTER和LEAVE指令 219

8.2.4 LOCAL伪指令 220

8.2.5 过程WriteStackFrame 223

8.2.6 本节习题 224

8.3 递归 225

8.3.1 递归求和 225

8.3.2 计算阶乘 226

8.3.3 本节习题 228

8.4 .MODEL伪指令 229

8.4.1 语言选项关键字 229

8.4.2 本节习题 231

8.5 INVOKE,ADDR,PROC和PROTO(可选) 231

8.5.1 INVOKE伪指令 231

8.5.2 ADDR操作符 232

8.5.3 PROC伪指令 232

8.5.4 PROTO伪指令 235

8.5.5 参数分类 237

8.5.6 例子:交换两个整数 238

8.5.7 调试疑难提示 239

8.5.8 本节习题 239

8.6 创建多模块程序 240

8.6.1 过程名的隐藏和导出 240

8.6.2 调用外部过程 241

8.6.3 跨越模块的边界使用变量和符号 241

8.6.4 例子:ArraySum程序 242

8.6.5 使用ENTERN创建模块 243

8.6.6 使用INVOKE和PROTO创建模块 246

8.6.7 本节习题 248

8.7 本章小结 248

8.8 编程练习 249

第9章 字符串和数组 251

9.1 简介 251

9.2 基本字符串操作指令 251

9.2.1 MOVSB,MOVSW和MOVSD指令 252

9.2.2 CMPSB,CMPSW和CMPSD指令 253

9.2.3 SCASB,SCASW和SCASD指令 255

9.2.4 STOSB,STOSW和STOSD指令 255

9.2.5 LODSB,LODSW和LODSD指令 256

9.2.6 本节习题 256

9.3 精选的字符串过程 257

9.3.1 Str_compare过程 257

9.3.2 Str_length过程 258

9.3.3 Str_copy过程 258

9.3.4 Str_trim过程 259

9.3.5 Str_ucase过程 260

9.3.6 字符串库演示程序 261

9.3.7 本节习题 263

9.4 二维数组 263

9.4.1 行和列的顺序 263

9.4.2 基址变址操作数 263

9.4.3 相对基址变址操作数 265

9.4.4 本节习题 266

9.5 整数数组的查找和排序 266

9.5.1 冒泡排序法 266

9.5.2 二分查找 268

9.5.3 本节习题 274

9.6 本章小结 274

9.7 编程练习 275

第10章 结构和宏 279

10.1 结构 279

10.1.1 定义结构 279

10.1.2 声明结构变量 281

10.1.3 引用结构变量 282

10.1.4 例子:显示系统时间 284

10.1.5 结构的嵌套 286

10.1.6 例子:醉汉走路 286

10.1.7 联合的声明和使用 289

10.1.8 本节习题 291

10.2 宏 292

10.2.1 概述 292

10.2.2 宏的定义 292

10.2.3 宏的调用 293

10.2.4 宏的其他特性 294

10.2.5 使用本书附带的宏库 297

10.2.6 例子程序:封装 302

10.2.7 本节习题 303

10.3 条件汇编伪指令 304

10.3.1 检查缺少的参数 305

10.3.2 默认的参数初始化值 306

10.3.3 布尔表达式 306

10.3.4 IF,ELSE和ENDIF伪指令 306

10.3.5 IFIDN和IFIDNI伪指令 307

10.3.6 例子:对矩阵行求和 308

10.3.7 特殊操作符 310

10.3.8 宏函数 313

10.3.9 本节习题 314

10.4 定义重复块 315

10.4.1 WHILE伪指令 315

10.4.2 REPEAT伪指令 316

10.4.3 FOR伪指令 316

10.4.4 FORC伪指令 317

10.4.5 例子:链表 318

10.4.6 本节习题 319

10.5 本章小结 320

10.6 编程练习 320

第11章 MS-Windows程序设计 323

11.1 Win32控制台编程 323

11.1.1 背景知识 324

11.1.2 Win32控制台函数 327

11.1.3 显示消息框 328

11.1.4 控制台输入 330

11.1.5 控制台输出 335

11.1.6 文件的读写 337

11.1.7 Irvine32库的文件I/O过程 341

11.1.8 测试文件I/O过程 342

11.1.9 控制台窗口的操作 345

11.1.10 光标的控制 348

11.1.11 文本颜色的控制 348

11.1.12 时间和日期函数 350

11.1.13 本节习题 353

11.2 编写Windows图形界面应用程序 354

11.2.1 必须了解的数据结构 354

11.2.2 MessageBox函数 356

11.2.3 WinMain过程 356

11.2.4 WinProc过程 356

11.2.5 ErrorHandler过程 357

11.2.6 程序清单 357

11.2.7 本节习题 361

11.3 动态内存分配 362

11.3.1 堆测试程序 364

11.3.2 本节习题 367

11.4 IA-32内存管理 367

11.4.1 线性地址 368

11.4.2 页面地址转换 371

11.4.3 本节习题 372

11.5 本章小结 373

11.6 编程练习 374

第12章 高级语言接口 376

12.1 简介 376

12.1.1 约定 376

12.1.2 本节习题 377

12.2 内联汇编代码 377

12.2.1 Microsoft Visual C++中的__asm伪指令 377

12.2.2 文件加密的例子 380

12.2.3 本节习题 382

12.3 在保护模式下与C++程序链接 383

12.3.1 使用汇编语言优化C++代码 383

12.3.2 调用C和C++函数 388

12.3.3 乘法表的例子 390

12.3.4 调用C库函数 393

12.3.5 目录列表程序 395

12.3.6 本节习题 396

12.4 在实地址模式下与C/C++程序链接 396

12.4.1 与Borland C++程序链接 397

12.4.2 例子:ReadSector 397

12.4.3 例子:大随机整数 401

12.4.4 本节习题 402

12.5 本章小结 402

12.6 编程练习 403

第13章 16位MS-DOS程序设计 405

13.1 MS-DOS和IBM-PC 405

13.1.1 内存组织 405

13.1.2 重定向输入输出 407

13.1.3 软件中断 407

13.1.4 INT指令 408

13.1.5 16位程序的编写 409

13.1.6 本节习题 409

13.2 MS-DOS功能调用(INT 21h) 410

13.2.1 精选的输出功能调用 411

13.2.2 例子程序:Hello World 413

13.2.3 精选的输入功能调用 414

13.2.4 日期/时间功能调用 417

13.2.5 本节习题 420

13.3 标准MS-DOS文件I/O服务 420

13.3.1 创建或打开文件(716Ch) 421

13.3.2 关闭文件句柄(3Eh) 423

13.3.3 移动文件指针(42h) 423

13.3.4 获取文件创建的日期和时间 423

13.3.5 精选的库例程 424

13.3.6 例子:读取并复制文本文件 425

13.3.7 读取MS-DOS命令行 427

13.3.8 例子:创建二进制文件 429

13.3.9 本节习题 432

13.4 本章小结 432

13.5 练习题 433

第14章 磁盘基础知识 435

14.1 磁盘存储系统 435

14.1.1 磁道、柱面和扇区 436

14.1.2 磁盘分区(卷) 437

14.1.3 本节习题 438

14.2 文件系统 438

14.2.1 FAT12 439

14.2.2 FAT16 440

14.2.3 FAT32 440

14.2.4 NTFS 440

14.2.5 磁盘的基本区域 441

14.2.6 本节习题 442

14.3 磁盘目录 442

14.3.1 MS-DOS目录结构 443

14.3.2 MS-Windows中的长文件名 445

14.3.3 文件分配表(FAT) 446

14.3.4 本节习题 447

14.4 读写磁盘扇区(7305h) 447

14.4.1 扇区显示程序 448

14.4.2 本节习题 452

14.5 系统级文件功能调用 452

14.5.1 获取磁盘剩余空间(7303h) 453

14.5.2 创建子目录(39h) 455

14.5.3 删除子目录(3Ah) 455

14.5.4 设置当前目录(3Bh) 456

14.5.5 获取当前目录(47h) 456

14.5.6 获取/设置文件属性(7143h) 456

14.5.7 本节习题 457

14.6 本章小结 457

14.7 编程练习 458

第15章 BIOS程序设计 460

15.1 简介 460

15.1.1 BIOS数据区 460

15.2 INT 16h键盘中断 461

15.2.1 键盘是如何工作的 462

15.2.2 INT 16h功能调用 462

15.2.3 本节习题 467

15.3 INT 10h视频程序设计 467

15.3.1 背景知识 467

15.3.2 色彩的控制 469

15.3.3 INT 10h视频功能调用 470

15.3.4 库过程中的例子 479

15.3.5 本节习题 480

15.4 使用INT 10h绘图 481

15.4.1 和像素相关的INT 10h功能调用 481

15.4.2 画线程序 482

15.4.3 笛卡儿坐标程序 483

15.4.4 把笛卡儿坐标转换为屏幕坐标 486

15.4.5 本节习题 486

15.5 内存映射图形 487

15.5.1 模式13h:320×200,256色 487

15.5.2 内存映射图形程序 488

15.5.3 本节习题 491

15.6 鼠标程序设计 491

15.6.1 鼠标INT 33h功能调用 491

15.6.2 鼠标跟踪程序 495

15.6.3 本节习题 499

15.7 本章小结 500

15.8 练习题 501

第16章 高级MS-DOS程序设计 503

16.1 简介 503

16.2 定义段 503

16.2.1 简化段定义伪指令 504

16.2.2 显式段定义 505

16.2.3 段超越前缀 508

16.2.4 段的组合 508

16.2.5 本节习题 510

16.3 程序的运行时结构 510

16.3.1 程序段前缀 511

16.3.2 COM程序 511

16.3.3 EXE程序 513

16.3.4 本节习题 514

16.4 中断处理 514

16.4.1 硬件中断 515

16.4.2 中断控制指令 517

16.4.3 编写中断处理例程 517

16.4.4 内存驻留程序 519

16.4.5 应用:程序No_Reset 520

16.4.6 本节习题 523

16.5 使用I/O端口控制硬件 523

16.5.1 输入输出端口 524

16.5.2 PC声音程序 524

16.6 本章小结 525

第17章 浮点处理和指令编码 527

17.1 浮点二进制表示 527

17.1.1 IEEE二进制浮点数的表示 527

17.1.2 指数 529

17.1.3 二进制浮点数的正规化 529

17.1.4 IEEE表示法 529

17.1.5 把十进制分数转换为二进制实数 531

17.1.6 本节习题 532

17.2 浮点单元 533

17.2.1 浮点寄存器栈 533

17.2.2 近似 535

17.2.3 浮点异常 536

17.2.4 浮点指令集 537

17.2.5 算术运算指令 539

17.2.6 浮点值的比较 542

17.2.7 读写浮点值 545

17.2.8 异常的同步 546

17.2.9 代码示例 547

17.2.10 混合模式算术运算 548

17.2.11 屏蔽和未屏蔽的异常 549

17.2.12 本节习题 550

17.3 Intel指令编码 551

17.3.1 IA-32指令的格式 551

17.3.2 单字节指令 552

17.3.3 立即操作数送寄存器 552

17.3.4 寄存器模式指令 553

17.3.5 IA-32的操作数尺寸前缀 554

17.3.6 内存模式指令 555

17.3.7 本节习题 557

17.4 本章小结 558

17.5 编程练习 559

附录A MASM参考手册 562

附录B IA-32指令集 582

附录C BIOS和MS-DOS中断 611

附录D 习题答案 619