新書推薦:
《
股权控制战略:如何实现公司控制和有效激励(第2版)
》
售價:HK$
98.8
《
汉译名著·哲学经典十种
》
售價:HK$
761.2
《
成吉思汗传:看历代帝王将相谋略 修炼安身成事之根本
》
售價:HK$
61.6
《
爱丁堡古罗马史-罗马城的起源和共和国的崛起
》
售價:HK$
76.8
《
自伤自恋的精神分析
》
售價:HK$
52.8
《
大宋悬疑录:貔貅刑
》
售價:HK$
74.8
《
不被大风吹倒
》
售價:HK$
65.9
《
人生解忧:佛学入门四十讲
》
售價:HK$
107.8
|
內容簡介: |
本书是汇编语言课程的经典教材,系统介绍x86和Intel64处理器的汇编语言编程和架构。前9章为汇编语言的核心概念,包括:汇编语言基础,x86处理器架构,数据传送、寻址和算术运算,过程,条件处理,整数运算,高级过程,以及字符串和数组。本书为原书第7版,增加了部分实例程序的讨论,补充了更多的复习题和关键术语,介绍了64位编程;还有配套的网上资料,提供完整的程序清单、复习题答案和编程练习的解决方案。
|
目錄:
|
目录Assembly Language for x86 Processors, Seventh Edition出版者的话译者序前言第1章 基本概念 11.1 欢迎来到汇编语言的世界 11.1.1 读者可能会问的问题 21.1.2 汇编语言的应用 41.1.3 本节回顾 51.2 虚拟机概念 51.3 数据表示 71.3.1 二进制整数 71.3.2 二进制加法 81.3.3 整数存储大小 91.3.4 十六进制整数 101.3.5 十六进制加法 111.3.6 有符号二进制整数 121.3.7 二进制减法 131.3.8 字符存储 141.3.9 本节回顾 151.4 布尔表达式 161.4.1 布尔函数真值表 181.4.2 本节回顾 181.5 本章小结 191.6 关键术语 191.7 复习题和练习 201.7.1 简答题 201.7.2 算法基础 21第2章 x86处理器架构 232.1 一般概念 232.1.1 基本微机设计 232.1.2 指令执行周期 242.1.3 读取内存 252.1.4 加载并执行程序 262.1.5 本节回顾 262.2 32位x86处理器 272.2.1 操作模式 272.2.2 基本执行环境 272.2.3 x86内存管理 302.2.4 本节回顾 302.3 64位x86-64处理器 302.3.1 64位操作模式 312.3.2 基本64位执行环境 312.4 典型x86计算机组件 322.4.1 主板 322.4.2 内存 342.4.3 本节回顾 342.5 输入输出系统 342.5.1 IO访问层次 342.5.2 本节回顾 362.6 本章小结 362.7 关键术语 372.8 复习题 38第3章 汇编语言基础 393.1 基本语言元素 393.1.1 第一个汇编语言程序 393.1.2 整数常量 403.1.3 整型常量表达式 413.1.4 实数常量 413.1.5 字符常量 423.1.6 字符串常量 423.1.7 保留字 423.1.8 标识符 433.1.9 伪指令 433.1.10 指令 443.1.11 本节回顾 463.2 示例:整数加减法 463.2.1 AddTwo程序 463.2.2 运行和调试AddTwo程序 483.2.3 程序模板 523.2.4 本节回顾 523.3 汇编、链接和运行程序 533.3.1 汇编–链接–执行周期 533.3.2 列表文件 533.3.3 本节回顾 553.4 定义数据 553.4.1 内部数据类型 553.4.2 数据定义语句 553.4.3 向AddTwo程序添加一个变量 563.4.4 定义BYTE和SBYTE数据 573.4.5 定义WORD和SWORD数据 593.4.6 定义DWORD和SDWORD数据 593.4.7 定义QWORD数据 603.4.8 定义压缩BCD(TBYTE)数据 603.4.9 定义浮点类型 613.4.10 变量加法程序 613.4.11 小端顺序 623.4.12 声明未初始化数据 623.4.13 本节回顾 633.5 符号常量 633.5.1 等号伪指令 633.5.2 计算数组和字符串的大小 643.5.3 EQU伪指令 653.5.4 TEXTEQU伪指令 663.5.5 本节回顾 663.6 64位编程 673.7 本章小结 683.8 关键术语 693.8.1 术语 693.8.2 指令、运算符和伪指令 703.9 复习题和练习 703.9.1 简答题 703.9.2 算法基础 713.10 编程练习 71第4章 数据传送、寻址和算术运算 734.1 数据传送指令 734.1.1 引言 734.1.2 操作数类型 734.1.3 直接内存操作数 744.1.4 MOV指令 754.1.5 整数的全零符号扩展 764.1.6 LAHF和SAHF指令 774.1.7 XCHG指令 784.1.8 直接–偏移量操作数 784.1.9 示例程序(Moves) 794.1.10 本节回顾 804.2 加法和减法 814.2.1 INC和DEC指令 814.2.2 ADD指令 814.2.3 SUB指令 814.2.4 NEG指令 824.2.5 执行算术表达式 824.2.6 加减法影响的标志位 824.2.7 示例程序(AddSubTest) 854.2.8 本节回顾 864.3 与数据相关的运算符和伪指令 874.3.1 OFFSET运算符 874.3.2 ALIGN伪指令 884.3.3 PTR运算符 884.3.4 TYPE运算符 894.3.5 LENGTHOF运算符 894.3.6 SIZEOF运算符 904.3.7 LABEL伪指令 904.3.8 本节回顾 904.4 间接寻址 914.4.1 间接操作数 914.4.2 数组 914.4.3 变址操作数 924.4.4 指针 934.4.5 本节回顾 954.5 JMP和LOOP指令 954.5.1 JMP指令 964.5.2 LOOP指令 964.5.3 在Visual Studio调试器中显示数组 974.5.4 整数数组求和 984.5.5 复制字符串 984.5.6 本节回顾 994.6 64位编程 994.6.1 MOV指令 994.6.2 64位的SumArray程序 1004.6.3 加法和减法 1014.6.4 本节回顾 1024.7 本章小结 1024.8 关键术语 1044.8.1 术语 1044.8.2 指令、运算符和伪指令 1044.9 复习题和练习 1044.9.1 简答题 1044.9.2 算法基础 1064.10 编程练习 107第5章 过程 1085.1 堆栈操作 1085.1.1 运行时堆栈(32位模式) 1085.1.2 PUSH和POP指令 1105.1.3 本节回顾 1125.2 定义并使用过程 1125.2.1 PROC伪指令 1125.2.2 CALL和RET指令 1145.2.3 过程调用嵌套 1155.2.4 向过程传递寄存器参数 1165.2.5 示例:整数数组求和 1165.2.6 保存和恢复寄存器 1185.2.7 本节回顾 1195.3 链接到外部库 1195.3.1 背景知识 1195.3.2 本节回顾 1205.4 Irvine32链接库 1205.4.1 创建库的动机 1205.4.2 概述 1225.4.3 过程详细说明 1235.4.4 库测试程序 1335.4.5 本节回顾 1395.5 64位汇编编程 1395.5.1 Irvine64链接库 1395.5.2 调用64位子程序 1405.5.3 x64调用规范 1405.5.4 调用过程示例 1415.6 本章小结 1425.7 关键术语 1435.7.1 术语 1435.7.2 指令、运算符和伪指令 1435.8 复习题和练习 1435.8.1 简答题 1435.8.2 算法基础 1465.9 编程练习 146第6章 条件处理 1486.1 条件分支 1486.2 布尔和比较指令 1486.2.1 CPU状态标志 1496.2.2 AND指令 1496.2.3 OR指令 1506.2.4 位映射集 1516.2.5 XOR指令 1526.2.6 NOT指令 1536.2.7 TEST指令 1536.2.8 CMP指令 1546.2.9 置位和清除单个CPU标志位 1556.2.10 64位模式下的布尔指令 1556.2.11 本节回顾 1566.3 条件跳转 1566.3.1 条件结构 1566.3.2 Jcond指令 1566.3.3 条件跳转指令类型 1576.3.4 条件跳转应用 1596.3.5 本节回顾 1636.4 条件循环指令 1636.4.1 LOOPZ和LOOPE指令 1636.4.2 LOOPNZ和LOOPNE指令 1646.4.3 本节回顾 1646.5 条件结构 1646.5.1 块结构的IF语句 1656.5.2 复合表达式 1676.5.3 WHILE循环 1686.5.4 表驱动选择 1696.5.5 本节回顾 1716.6 应用:有限状态机 1726.6.1 验证输入字符串 1726.6.2 验证有符号整数 1726.6.3 本节回顾 1766.7 条件控制流伪指令 1766.7.1 新建IF语句 1776.7.2 有符号数和无符号数的比较 1786.7.3 复合表达式 1796.7.4 用.REPEAT和.WHILE创建循环 1816.8 本章小结 1826.9 关键术语 1836.9.1 术语 1836.9.2 指令、运算符和伪指令 1846.10 复习题和练习 1846.10.1 简答题 1846.10.2 算法基础 1866.11 编程练习 1876.11.1 测试代码的建议 1876.11.2 习题 188第7章 整数运算 1917.1 移位和循环移位指令 1917.1.1 逻辑移位和算术移位 1917.1.2 SHL指令 1927.1.3 SHR指令 1937.1.4 SAL和SAR指令 1937.1.5 ROL指令 1947.1.6 ROR指令 1957.1.7 RCL和RCR指令 1957.1.8 有符号数溢出 1967.1.9 SHLDSHRD指令 1967.1.10 本节回顾 1987.2 移位和循环移位的应用 1987.2.1 多个双字的移位 1987.2.2 二进制乘法 1997.2.3 显示二进制位 2007.2.4 提取文件日期字段 2007.2.5 本节回顾 2017.3 乘法和除法指令 2017.3.1 MUL指令 2017.3.2 IMUL指令 2037.3.3 测量程序执行时间 2057.3.4 DIV指令 2077.3.5 有符号数除法 2087.3.6 实现算术表达式 2117.3.7 本节回顾 2127.4 扩展加减法 2127.4.1 ADC指令 2127.4.2 扩展加法示例 2137.4.3 SBB指令 2157.4.4 本节回顾 2157.5 ASCII和非压缩十进制运算 2167.5.1 AAA指令 2177.5.2 AAS指令 2187.5.3 AAM指令 2187.5.4 AAD指令 2197.5.5 本节回顾 2197.6 压缩十进制运算 2197.6.1 DAA指令 2207.6.2 DAS指令 2207.6.3 本节回顾 2217.7 本章小结 2217.8 关键术语 2227.8.1 术语 2227.8.2 指令、运算符和伪指令 2227.9 复习题和练习 2227.9.1 简答题 2227.9.2 算法基础 2247.10 编程练习 225第8章 高级过程 2278.1 引言 2278.2 堆栈帧 2278.2.1 堆栈参数 2278.2.2 寄存器参数的缺点 2288.2.3 访问堆栈参数 2308.2.4 32位调用规范 2328.2.5 局部变量 2338.2.6 引用参数 2358.2.7 LEA指令 2358.2.8 ENTER和LEAVE指令 2368.2.9 LOCAL伪指令 2388.2.10 Microsoft x64调用规范 2398.2.11 本节回顾 2398.3 递归 2398.3.1 递归求和 2408.3.2 计算阶乘 2418.3.3 本节回顾 2468.4 INVOKE、ADDR、PROC和PROTO 2468.4.1 INVOKE伪指令 2468.4.2 ADDR运算符 2478.4.3 PROC伪指令 2478.4.4 PROTO伪指令 2508.4.5 参数类别 2538.4.6 示例:交换两个整数 2538.4.7 调试提示 2548.4.8 WriteStackFrame过程 2558.4.9 本节回顾 2568.5 新建多模块程序 2568.5.1 隐藏和导出过程名 2568.5.2 调用外部过程 2578.5.3 跨模块使用变量和标号 2588.5.4 示例:ArraySum程序 2598.5.5 用Extern新建模块 2598.5.6 用INVOKE和PROTO新建模块 2628.5.7 本节回顾 2658.6 参数的高级用法(可选主题) 2658.6.1 受USES运算符影响的堆栈 2658.6.2 向堆栈传递8位和16位参数 2668.6.3 传递64位参数 2678.6.4 非双字局部变量 2688.7 Java字节码(可选主题) 2698.7.1 Java虚拟机 2698.7.2 指令集 2708.7.3 Java反汇编示例 2718.7.4 示例:条件分支 2738.8 本章小结 2748.9 关键术语 2758.9.1 术语 2758.9.2 指令、运算符和伪指令 2768.10 复习题和练习 2768.10.1 简答题 2768.10.2 算法基础 2768.11 编程练习 277第9章 字符串和数组 2799.1 引言 2799.2 字符串基本指令 2799.2.1 MOVSB、MOVSW和MOVSD 2809.2.2 CMPSB、CMPSW和CMPSD 2809.2.3 SCASB、SCASW和SCASD 2819.2.4 STOSB、STOSW和STOSD 2829.2.5 LODSB、LODSW和LODSD 2829.2.6 本节回顾 2829.3 部分字符串过程 2839.3.1 Str_compare过程 2839.3.2 Str_length过程 2849.3.3 Str_copy过程 2849.3.4 Str_trim过程 2859.3.5 Str_ucase过程 2879.3.6 字符串库演示程序 2889.3.7 Irivne64库中的字符串过程 2899.3.8 本节回顾 2919.4 二维数组 2919.4.1 行列顺序 2919.4.2 基址–变址操作数 2929.4.3 基址–变址–偏移量操作数 2949.4.4 64位模式下的基址–变址操作数 2949.4.5 本节回顾 2959.5 整数数组的检索和排序 2959.5.1 冒泡排序 2959.5.2 对半查找 2979.5.3 本节回顾 3029.6 Java字节码:字符串处理(可选主题) 3029.7 本章小结 3039.8 关键术语和指令 3049.9 复习题和练习 3049.9.1 简答题 3049.9.2 算法基础 3059.10 编程练习 305第10章 结构和宏 30810.1 结构 30810.1.1 定义结构 30810.1.2 声明结构变量 30910.1.3 引用结构变量 31010.1.4 示例:显示系统时间 31310.1.5 结构包含结构 31510.1.6 示例:醉汉行走 31510.1.7 声明和使用联合 31810.1.8 本节回顾 32010.2 宏 32010.2.1 概述 32010.2.2 定义宏 32110.2.3 调用宏 32210.2.4 其他宏特性 32310.2.5 使用本书的宏库(仅32位模式) 32610.2.6 示例程序:封装器 33210.2.7 本节回顾 33310.3 条件汇编伪指令 33310.3.1 检查缺失的参数 33310.3.2 默认参数初始值设定 33410.3.3 布尔表达式 33510.3.4 IF、ELSE和ENDIF伪指令 33510.3.5 IFIDN和IFIDNI伪指令 33610.3.6 示例:矩阵行求和 33610.3.7 特殊运算符 33910.3.8 宏函数 34210.3.9 本节回顾 34310.4 定义重复语句块 34410.4.1 WHILE伪指令 34410.4.2 REPEAT伪指令 34410.4.3 FOR伪指令 34510.4.4 FORC伪指令 34510.4.5 示例:链表 34610.4.6 本节回顾 34710.5 本章小结 34810.6 关键术语 34910.6.1 术语 34910.6.2 运算符和伪指令 34910.7 复习题和练习 34910.7.1 简答题 34910.7.2 算法基础 35010.8 编程练习 351第11章 MS-Windows编程 35411.1 Win32控制台编程 35411.1.1 背景知识 35411.1.2 Win32控制台函数 35711.1.3 显示消息框 35911.1.4 控制台输入 36111.1.5 控制台输出 36611.1.6 读写文件 36811.1.7 Irvine32链接库的文件IO 37111.1.8 测试文件IO过程 37311.1.9 控制台窗口操作 37511.1.10 控制光标 37811.1.11 控制文本颜色 37911.1.12 时间与日期函数 38011.1.13 使用64位Windows API 38311.1.14 本节回顾 38411.2 编写图形化的Windows应用程序 38411.2.1 必要的结构 38511.2.2 MessageBox函数 38611.2.3 WinMain过程 38711.2.4 WinProc过程 38711.2.5 ErrorHandler过程 38811.2.6 程序清单 38811.2.7 本节回顾 39111.3 动态内存分配 39111.3.1 HeapTest程序 39411.3.2 本节回顾 39711.4 x86存储管理 39711.4.1 线性地址 39811.4.2 页转换 40011.4.3 本节回顾 40111.5 本章小结 40211.6 关键术语 40311.7 复习题和练习 40311.7.1 简答题 40311.7.2 算法基础 40411.8 编程练习 404第12章 浮点数处理与指令编码 40612.1 浮点数二进制表示 40612.1.1 IEEE二进制浮点数表示 40612.1.2 阶码 40712.1.3 规格化二进制浮点数 40712.1.4 新建IEEE表示 40812.1.5 十进制小数转换为二进制实数 40912.1.6 本节回顾 41112.2 浮点单元 41112.2.1 FPU寄存器栈 41112.2.2 舍入 41312.2.3 浮点数异常 41412.2.4 浮点数指令集 41412.2.5 算术运算指令 41612.2.6 比较浮点数值 41912.2.7 读写浮点数值 42212.2.8 异常同步 42312.2.9 代码示例 42312.2.10 混合模式运算 42512.2.11 屏蔽与未屏蔽异常 42612.2.12 本节回顾 42712.3 x86指令编码 42712.3.1 指令格式 42712.3.2 单字节指令 42812.3.3 立即数送寄存器 42812.3.4 寄存器模式指令 42912.3.5 处理器操作数大小前缀 42912.3.6 内存模式指令 43012.3.7 本节回顾 43212.4 本章小结 43212.5 关键术语 43312.6 复习题和练习 43412.6.1 简答题 43412.6.2 算法基础 43412.7 编程练习 435第13章 高级语言接口 43813.1 引言 43813.1.1 通用规范 43813.1.2 .MODEL伪指令 43913.1.3 检查编译器生成的代码 44113.1.4 本节回顾 44413.2 内嵌汇编代码 44413.2.1 Visual C++中的__asm伪指令 44413.2.2 文件加密示例 44713.2.3 本节回顾 44913.3 32位汇编程序与CC++的链接 44913.3.1 IndexOf示例 45013.3.2 调用C和C++函数 45313.3.3 乘法表示例 45413.3.4 调用C库函数 45713.3.5 目录表程序 45913.3.6 本节回顾 46113.4 本章小结 46113.5 关键术语 46213.6 复习题 46213.7 编程练习 462附录A MASM参考知识 464附录B x86指令集 483附录C “本节回顾”问题答案 510索引 527
|
|