登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入   新用戶註冊
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2024年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / 物流,時效:出貨後2-4日

2025年02月出版新書

2025年01月出版新書

2024年12月出版新書

2024年11月出版新書

2024年10月出版新書

2024年09月出版新書

2024年08月出版新書

2024年07月出版新書

2024年06月出版新書

2024年05月出版新書

2024年04月出版新書

2024年03月出版新書

2024年02月出版新書

2024年01月出版新書

『簡體書』汇编语言:基于x86处理器(英文版·原书第8版)

書城自編碼: 3612297
分類: 簡體書→大陸圖書→教材研究生/本科/专科教材
作者: [美]基普·欧文[Kip,R.Irvine]
國際書號(ISBN): 9787111672111
出版社: 机械工业出版社
出版日期: 2021-03-01

頁數/字數: /
書度/開本: 16开 釘裝: 平装

售價:NT$ 864

我要買

share:

** 我創建的書架 **
未登入.



內容簡介:
本课程通过自顶向下的程序设计演示和解释,教授学生如何在机器层面上编写和调试程序,并将有效的设计技巧应用于多种程序设计课程。这种方法简化并消除了学生在学习更高级的计算机体系结构和操作系统课程之前需要掌握的概念。
關於作者:
基普R. 欧文(Kip R. Irvine)拥有迈阿密大学计算机科学硕士、音乐艺术博士学位,现为佛罗里达国际大学高级讲师,教授计算机相关的课程。著有多本编程教材,被翻译成多国语言,涵盖的主题如汇编语言、C、Visual Basic和COBOL。
目錄
第1章 基本概念 1
1.1 欢迎来到汇编语言的世界 1
1.1.1 读者可能会问的问题 2
1.1.2 汇编语言的应用 5
1.1.3 本节回顾 6
1.2 虚拟机概念 7
1.2.1 本节回顾 9
1.3 数据表示 10
1.3.1 二进制整数 10
1.3.2 二进制加法 12
1.3.3 整数存储大小 13
1.3.4 十六进制整数 14
1.3.5 十六进制加法 16
1.3.6 有符号的二进制整数 16
1.3.7 二进制减法 19
1.3.8 字符存储 20
1.3.9 二进制编码的十进制(BCD)数 22
1.3.10 本节回顾 22
1.4 布尔表达式 23
1.4.1 布尔函数的真值表 26
1.4.2 本节回顾 27
1.5 本章小结 27
1.6 关键术语 28
1.7 复习题和练习 29
1.7.1 简答题 29
1.7.2 算法题 31
第2章 x86处理器架构 33
2.1 一般概念 34
2.1.1 基本微机设计 34
2.1.2 指令执行周期 35
2.1.3 读取内存 36
2.1.4 加载并执行程序 37
2.1.5 本节回顾 38
2.2 32位x86处理器 39
2.2.1 操作模式 39
2.2.2 基本执行环境 39
2.2.3 x86内存管理 43
2.2.4 本节回顾 44
2.3 64位x86-64处理器 44
2.3.1 64位操作模式 45
2.3.2 基本的64位执行环境 45
2.3.3 本节回顾 46
2.4 典型x86计算机的组件 47
2.4.1 母板 47
2.4.2 内存 49
2.4.3 本节回顾 49
2.5 输入输出系统 50
2.5.1 IO访问层次 50
2.5.2 本节回顾 52
2.6 本章小结 53
2.7 关键术语 54
2.8 复习题 55
第3章 汇编语言基础 57
3.1 基本语言元素 58
3.1.1 第一个汇编语言程序 58
3.1.2 整数字面量 59
3.1.3 常整数表达式 60
3.1.4 实数字面量 61
3.1.5 字符字面量 61
3.1.6 字符串字面量 62
3.1.7 保留字 62
3.1.8 标识符 62
3.1.9 伪指令 63
3.1.10 指令 63
3.1.11 本节回顾 67
3.2 示例:整数加减法 67
3.2.1 AddTwo程序 67
3.2.2 运行和调试AddTwo程序 69
3.2.3 程序模板 73
3.2.4 本节回顾 74
3.3 汇编、链接和运行程序 75
3.3.1 汇编链接执行周期 75
3.3.2 列表文件 76
3.3.3 本节回顾 78
3.4 定义数据 78
3.4.1 内部数据类型 78
3.4.2 数据定义语句 79
3.4.3 向AddTwo程序添加一个变量 80
3.4.4 定义BYTE和SBYTE数据 81
3.4.5 定义WORD和SWORD数据 83
3.4.6 定义DWORD和SDWORD数据 84
3.4.7 定义QWORD数据 84
3.4.8 定义压缩的BCD(TBYTE)数据 85
3.4.9 定义浮点类型 85
3.4.10 变量相加程序 86
3.4.11 小端序 87
3.4.12 声明未初始化数据 88
3.4.13 本节回顾 88
3.5 符号常量 90
3.5.1 等号伪指令 90
3.5.2 计算数组和字符串的大小 91
3.5.3 EQU伪指令 92
3.5.4 TEXTEQU伪指令 93
3.5.5 本节回顾 94
3.6 64位编程介绍 95
3.7 本章小结 96
3.8 关键术语 98
3.8.1 术语 98
3.8.2 指令、操作符及伪指令 98
3.9 复习题和练习 99
3.9.1 简答题 99
3.9.2 算法题 100
3.10 编程练习 100
第4章 数据传送、寻址及算术运算 102
4.1 数据传送指令 103
4.1.1 引言 103
4.1.2 操作数类型 103
4.1.3 直接内存操作数 103
4.1.4 MOV指令 105
4.1.5 整数的零符号扩展 106
4.1.6 LAHF和SAHF指令 108
4.1.7 XCHG指令 109
4.1.8 直接偏移量操作数 109
4.1.9 传送数据的示例 110
4.1.10 本节回顾 113
4.2 加法和减法 114
4.2.1 INC和DEC指令 114
4.2.2 ADD指令 114
4.2.3 SUB指令 115
4.2.4 NEG指令 115
4.2.5 实现算术表达式 115
4.2.6 加减法影响的标志 116
4.2.7 示例程序(AddSubTest) 120
4.2.8 本节回顾 121
4.3 与数据相关的操作符和伪指令 122
4.3.1 OFFSET操作符 122
4.3.2 ALIGN伪指令 123
4.3.3 PTR操作符 124
4.3.4 TYPE操作符 125
4.3.5 LENGTHOF操作符 125
4.3.6 SIZEOF操作符 126
4.3.7 LABEL伪指令 126
4.3.8 本节回顾 127
4.4 间接寻址 127
4.4.1 间接操作数 127
4.4.2 数组 128
4.4.3 变址操作数 129
4.4.4 指针 131
4.4.5 本节回顾 132
4.5 JMP和LOOP指令 134
4.5.1 JMP指令 134
4.5.2 LOOP指令 135
4.5.3 在Visual Studio调试器中显示数组 136
4.5.4 整数数组求和 137
4.5.5 复制字符串 138
4.5.6 本节回顾 139
4.6 64位编程 140
4.6.1 MOV指令 140
4.6.2 64位版本的SumArray程序 141
4.6.3 加法和减法 142
4.6.4 本节回顾 143
4.7 本章小结 144
4.8 关键术语 145
4.8.1 术语 145
4.8.2 指令、操作符及伪指令 145
4.9 复习题和练习 146
4.9.1 简答题 146
4.9.2 算法题 148
4.10 编程练习 149
第5章 过程 151
5.1 堆栈操作 152
5.1.1 运行时堆栈(32位模式) 152
5.1.2 PUSH和POP指令 154
5.1.3 本节回顾 157
5.2 定义和使用过程 158
5.2.1 PROC伪指令 158
5.2.2 CALL和RET指令 160
5.2.3 嵌套过程调用 161
5.2.4 向过程传递寄存器参数 163
5.2.5 示例:整数数组求和 163
5.2.6 保存和恢复寄存器 165
5.2.7 本节回顾 166
5.3 链接到外部库 167
5.3.1 背景信息 167
5.3.2 本节回顾 168
5.4 Irvine32库 169
5.4.1 创建库的动机 169
5.4.2 Win32控制台窗口 171
5.4.3 各个过程的描述 172
5.4.4 库测试程序 184
5.4.5 本节回顾 192
5.5 64位汇编编程 193
5.5.1 Irvine64库 193
5.5.2 调用64位子例程 194
5.5.3 x64调用规约 195
5.5.4 调用过程的示例程序 195
5.5.5 本节回顾 197
5.6 本章小结 198
5.7 关键术语 199
5.7.1 术语 199
5.7.2 指令、操作符及伪指令 199
5.8 复习题和练习 199
5.8.1 简答题 199
5.8.2 算法题 202
5.9 编程练习 203
第6章 条件处理 205
6.1 布尔和比较指令 206
6.1.1 CPU状态标志 206
6.1.2 AND指令 207
6.1.3 OR指令 208
6.1.4 位映射集 209
6.1.5 XOR指令 211
6.1.6 NOT指令 212
6.1.7 TEST指令 212
6.1.8 CMP指令 213
6.1.9 置位和清零各个CPU标志 214
6.1.10 64位模式下的布尔指令 214
6.1.11 本节回顾 215
6.2 条件跳转 216
6.2.1 条件结构 216
6.2.2 Jcond指令 217
6.2.3 条件跳转指令的类型 217
6.2.4 条件跳转应用 221
6.2.5 本节回顾 225
6.3 条件循环指令 226
6.3.1 LOOPZ和LOOPE指令 226
6.3.2 LOOPNZ和LOOPNE指令 226
6.3.3 本节回顾 227
6.4 条件结构 228
6.4.1 块结构的IF语句 228
6.4.2 复合表达式 233
6.4.3 WHILE循环 234
6.4.4 表驱动的选择 237
6.4.5 本节回顾 239
6.5 应用:有限状态机 240
6.5.1 验证输入字符串 240
6.5.2 验证有符号整数 241
6.5.3 本节回顾 245
6.6 条件控制流伪指令(可选主题) 246
6.6.1 创建IF语句 246
6.6.2 有符号数和无符号数的比较 249
6.6.3 复合表达式 250
6.6.4 用.REPEAT和.WHILE创建循环 253
6.7 本章小结 254
6.8 关键术语 255
6.8.1 术语 255
6.8.2 指令、操作符及伪指令 255
6.9 复习题和练习 256
6.9.1 简答题 256
6.9.2 算法题 258
6.10 编程练习 259
6.10.1 对代码测试的建议 259
6.10.2 习题描述 260
第7章 整数算术运算 263
7.1 移位和循环移位指令 264
7.1.1 逻辑移位和算术移位 264
7.1.2 SHL指令 265
7.1.3 SHR指令 266
7.1.4 SAL和SAR指令 267
7.1.5 ROL指令 268
7.1.6 ROR指令 269
7.1.7 RCL和RCR指令 269
7.1.8 有符号数溢出 270
7.1.9 SHLDSHRD指令 270
7.1.10 本节回顾 270
7.2 移位和循环移位的应用 274
7.2.1 多个双字的移位 274
7.2.2 通过移位做乘法 275
7.2.3 显示二进制位 276
7.2.4 提取文件日期字段 276
7.2.5 本节回顾 277
7.3 乘法和除法指令 279
7.3.1 无符号整数乘法(MUL) 279
7.3.2 有符号整数乘法(IMUL) 281
7.3.3 测量程序执行时间 284
7.3.4 无符号整数除法(DIV) 286
7.3.5 有符号整数除法(IDIV) 288
7.3.6 实现算术表达式 292
7.3.7 本节回顾 294
7.4 扩展的加减法 295
7.4.1 ADC指令 295
7.4.2 扩展加法的示例 296
7.4.3 SBB指令 298
7.4.4 本节回顾 299
7.5 ASCII和非压缩十进制算术运算 299
7.5.1 AAA指令 300
7.5.2 AAS指令 302
7.5.3 AAM指令 303
7.5.4 AAD指令 303
7.5.5 本节回顾 303
7.6 压缩十进制算术运算 304
7.6.1 DAA指令 305
7.6.2 DAS指令 306
7.6.3 本节回顾 306
7.7 本章小结 307
7.8 关键术语 308
7.8.1 术语 308
7.8.2 指令、操作符及伪指令 308
7.9 复习题和练习 308
7.9.1 简答题 308
7.9.2 算法题 310
7.10 编程练习 311
第8章 高级过程 314
8.1 引言 315
8.2 堆栈帧 315
8.2.1 堆栈参数 315
8.2.2 寄存器参数的缺点 316
8.2.3 访问堆栈参数 318
8.2.4 32位调用规约 321
8.2.5 局部变量 323
8.2.6 引用参数 324
8.2.7 LEA指令 326
8.2.8 ENTER和LEAVE指令 326
8.2.9 LOCAL伪指令 328
8.2.10 Microsoft x64调用规约 329
8.2.11 本节回顾 330
8.3 递归 331
8.3.1 递归求和 331
8.3.2 计算阶乘 333
8.3.3 本节回顾 339
8.4 INVOKE、ADDR、PROC及PROTO 340
8.4.1 INVOKE伪指令 340
8.4.2 ADDR操作符 341
8.4.3 PROC伪指令 342
8.4.4 PROTO伪指令 345
8.4.5 参数分类 348
8.4.6 示例:交换两个整数 349
8.4.7 调试提示 350
8.4.8 WriteStackFrame过程 351
8.4.9 本节回顾 352
8.5 创建多模块程序 352
8.5.1 隐藏和导出过程名 352
8.5.2 调用外部过程 353
8.5.3 跨模块使用变量和符号 354
8.5.4 示例:ArraySum程序 355
8.5.5 用Extern创建模块 356
8.5.6 用INVOKE和PROTO创建模块 359
8.5.7 本节回顾 362
8.6 参数的高级用法(可选主题) 363
8.6.1 受USES操作符影响的堆栈 363
8.6.2 向堆栈传递8位和16位参数 364
8.6.3 传递64位参数 366
8.6.4 非双字局部变量 366
8.7 Java字节码(可选主题) 369
8.7.1 Java虚拟机 369
8.7.2 指令集 370
8.7.3 Java反汇编示例 371
8.7.4 示例:条件分支 374
8.8 本章小结 376
8.9 关键术语 377
8.9.1 术语 377
8.9.2 指令、操作符及伪指令 377
8.10 复习题和练习 377
8.10.1 简答题 377
8.10.2 算法题 378
8.11 编程练习 378
第9章 字符串和数组 381
9.1 引言 381
9.2 字符串原语指令 382
9.2.1 MOVSB、MOVSW及MOVSD 383
9.2.2 CMPSB、CMPSW及CMPSD 384
9.2.3 SCASB、SCASW及SCASD 385
9.2.4 STOSB、STOSW及STOSD 385
9.2.5 LODSB、LODSW及LODSD 385
9.2.6 本节回顾 386
9.3 若干字符串过程 387
9.3.1 Str_compare过程 388
9.3.2 Str_length过程 389
9.3.3 Str_copy过程 389
9.3.4 Str_trim过程 390
9.3.5 Str_ucase过程 393
9.3.6 字符串库演示程序 393
9.3.7 Irvine64库中的字符串过程 395
9.3.8 本节回顾 398
9.4 二维数组 399
9.4.1 行列顺序 399
9.4.2 基址变址操作数 399
9.4.3 基址变址位移操作数 401
9.4.4 64位模式下的基址变址操作数 402
9.4.5 本节回顾 403
9.5 整数数组的查找和排序 404
9.5.1 冒泡排序 404
9.5.2 对半查找 406
9.5.3 本节回顾 412
9.6 Java字节码:字符串处理(可选主题) 413
9.7 本章小结 414
9.8 关键术语和指令 415
9.9 复习题和练习 415
9.9.1 简答题 415
9.9.2 算法题 416
9.10 编程练习 416
第10章 结构和宏 421
10.1 结构 421
10.1.1 定义结构 422
10.1.2 声明结构对象 424
10.1.3 引用结构对象 425
10.1.4 示例:显示系统时间 428
10.1.5 结构包含结构 430
10.1.6 示例:醉汉行走 430
10.1.7 声明和使用联合 434
10.1.8 本节回顾 436
10.2 宏 437
10.2.1 概述 437
10.2.2 定义宏 438
10.2.3 调用宏 439
10.2.4 其他宏特性 440
10.2.5 使用本书的宏库(仅32位模式) 444
10.2.6 示例程序:封装器 451
10.2.7 本节回顾 452
10.3 条件汇编伪指令 453
10.3.1 检查缺失的参数 454
10.3.2 默认的参数初始化值 455
10.3.3 布尔表达式 456
10.3.4 IF、ELSE及ENDIF伪指令 456
10.3.5 IFIDN和IFIDNI伪指令 457
10.3.6 示例:矩阵行求和 458
10.3.7 特殊操作符 461
10.3.8 宏函数 464
10.3.9 本节回顾 466
10.4 定义重复语句块 467
10.4.1 WHILE伪指令 467
10.4.2 REPEAT伪指令 468
10.4.3 FOR伪指令 468
10.4.4 FORC伪指令 469
10.4.5 示例:链表 470
10.4.6 本节回顾 471
10.5 本章小结 473
10.6 关键术语 474
10.6.1 术语 474
10.6.2 操作符及伪指令 474
10.7 复习题和练习 475
10.7.1 简答题 475
10.7.2 算法题 475
10.8 编程练习 477
第11章 MS-Windows编程 480
11.1 Win32控制台编程 480
11.1.1 背景信息 481
11.1.2 Win32控制台函数 485
11.1.3 显示消息框 487
11.1.4 控制台输入 490
11.1.5 控制台输出 496
11.1.6 读写文件 498
11.1.7 Irvine32库中的文件IO 502
11.1.8 测试文件IO过程 504
11.1.9 控制台窗口操作 507
11.1.10 控制光标 510
11.1.11 控制文本颜色 511
11.1.12 时间和日期函数 513
11.1.13 使用64位Windows API 517
11.1.14 本节回顾 518
11.2 编写图形化的Windows应用程序 519
11.2.1 必要的结构 519
11.2.2 MessageBox函数 521
11.2.3 WinMain过程 521
11.2.4 WinProc过程 522
11.2.5 ErrorHandler过程 523
11.2.6 程序清单 523
11.2.7 本节回顾 527
11.3 动态内存分配 528
11.3.1 HeapTest程序 531
11.3
內容試閱
本书介绍x86和Intel64处理器的汇编语言编程与架构,适合作为下述几类大学课程的教材:
汇编语言编程
计算机系统基础
计算机体系结构基础
学生使用Intel或AMD处理器,用Microsoft宏汇编器(Microsoft Macro Assembler,MASM)编程,并运行在Microsoft Windows的最新版本上。尽管本书的初衷是作为大学生的编程教材,但它也是计算机体系结构课程的有效补充。本书广受欢迎,前几个版本已被翻译成多种语言。
重点主题。本版本所包含的下列主题可以自然过渡到计算机体系结构、操作系统及编写编译器的后续课程:
虚拟机概念
指令集架构
基本布尔运算
指令执行周期
内存访问和握手
中断和轮询
基于硬件的IO
浮点数的二进制表示
下列主题则专门针对x86和Intel64架构:
受保护的内存和分页
实地址模式下的内存分段
16位中断处理
MS-DOS和BIOS系统调用(中断)
浮点单元架构和编程
指令编码
本书中的某些例子还适用于计算机科学课程体系中的后续课程:
查找与排序算法
高级语言结构
有限状态机
代码优化示例
第8版的新内容
这个版本代表了本书向交互式电子教科书的过渡。我们对此非常兴奋,因为读者第一次能够针对复习题、代码动画、教程视频以及多输入习题进行实验和互动。
各章中的本节回顾都已改写成交互式问题,可以对读者的答案给出即时反馈。同时,新增加和删除了一些问题,并修改了很多问题。
代码动画使得读者能单步执行程序代码,并查看变量值和代码注释。读者再也不必在程序代码与下一页上的文本解释之间来回跳跃。
教材中插入了适时的教程视频的链接,这样读者就能得到关于教材中相关主题的辅导。以前,对于这些呈现为清单的整套视频,读者需要单独购买订阅才能访问。在本版本中,视频是免费的。
多输入习题允许用户浏览程序清单,并在代码旁边的方框内插入变量值。读者可接收到即时、彩色的反馈,有机会进行尝试,直至所有输入值都正确。
关键术语的超文本定义贯穿了全教材,这些定义都连接到一个在线的词汇表。
简而言之,我们提取了本书的精华内容(经过很多版本的精雕细琢),并将其置入交互式电子教科书中。
本书关注的首要目标仍然是教授学生编写并调试机器级程序。它不能代替计算机体系结构的完整教材,但它确实能在一个对学生讲授计算机如何工作的环境中给予学生编写软件的第一手经验。我们认为,理论联系实际能让学生更好地掌握知识。在工程课程中,学生构建原型;而在计算机体系结构课程中,学生应编写机器级程序。在这两种情况下,学生都能获得难忘的经验,从而有信心在任何OS面向机器的环境中工作。
保护模式编程是从第1章到第13章的重中之重。由此,学生就能创建32位和64位程序,并运行于最新版本的Microsoft Windows下。其余三章是传统的章节,讲述了16位编程。这些章包含BIOS编程、MS-DOS服务、键盘和鼠标输入、磁盘存储基础、视频编程以及图形处理。
子例程库。本书为学生提供了三个版本的子例程库,用于基本输入输出、模拟、定时以及其他有用的任务。Irvine32和Irvine64库运行于保护模式。16位版本的库(Irvine16.lib)运行于实地址模式,且只用于第14~16章。这些库的完整源代码可见于配套的网站。链接库是为了使用方便,而不是阻止学生自行对输入输出编程。我们鼓励学生创建自己的库。
所含软件和示例。所有示例程序均采用运行于写作本书时最新的Microsoft Visual Studio中的Microsoft Macro Assembler进行了测试。此外,我们还提供了批处理文件,使得学生可在Windows命令提示符下汇编和运行应用程序。本书的信息更新与勘误可参见配套的网站,其中包括一些额外的编程项目,教师可以在各章结束时布置给学生。
总体目标
本书的以下目标旨在拓展学生对汇编语言相关主题的兴趣和知识:
Intel和AMD处理器的架构及编程。
实地址模式和保护模式编程。
汇编语言伪指令、宏、操作符以及程序结构。
编程方法,展示如何使用汇编语言来创建系统级软件工具和应用程序。
计算机硬件操作。
汇编语言程序、操作系统以及其他应用程序之间的交互作用。
我们的目标之一是帮助学生以机器级的思维方式来处理编程问题。将CPU视为交互工具,学习尽可能直接地监控其操作是很重要的。调试器是程序员最好的朋友,它不仅可以捕捉错误,还可以用作讲授CPU和操作系统的教学工具。我们鼓励学生探究高级语言表面之下的内部机制,要让他们意识到大多数编程语言都被设计为可移植的,因而也独立于其宿主机。除了简短的示例外,本书还包含几百个可运行的程序,用来演示书中讲述的指令和思想。本书末尾有一些参考资料,比如MS-DOS中断和指令助记符指南。
背景知识要求。读者应能自如地使用至少一种高级语言进行编程,比如Python、Java、C或C。本书有一章涉及C接口,因此,如果手边有编译器就会非常有帮助。本书不仅已经用于计算机科学和管理信息系统专业的课堂,而且还已用于其他工程课程。
特色

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 台灣用户 | 香港/海外用户
megBook.com.tw
Copyright (C) 2013 - 2025 (香港)大書城有限公司 All Rights Reserved.