Assembly Language for x86 Processors - 汇编语言程序设计笔记
书籍信息
- 书名: Assembly Language for x86 Processors (Sixth Edition)
- 作者: Kip R. Irvine
- 出版社: Pearson Education
- ISBN: 978-0-13-602212-1
- 页数: 约549页(文本提取54914行)
- 原始路径:
/田浩然上传的资料/电子书/[汇编语言程序设计].(Assembly.Language.For.x86.Processors,.6ed),.Irvine.文字版.pdf
核心内容概览
本书是x86汇编语言编程的经典教材,从基础概念到高级应用,系统介绍了汇编语言程序设计。
第一卷:基础概念(第1-9章)
第1章:基本概念
- 汇编语言的价值:最接近机器语言的编程语言,提供对硬件的直接访问
- 学习目标:
- 理解计算机架构基本原理(针对x86处理器)
- 掌握布尔逻辑及其在编程和硬件中的应用
- 了解x86处理器如何管理内存(实模式、保护模式、虚拟模式)
- 理解高级语言编译器如何将语句翻译为汇编和机器码
- 学会在机器级调试程序
第2章:x86处理器架构
- 基本微计算机设计
- 指令执行周期
- x86处理器架构细节
- 内存管理(实地址模式、保护模式)
- 计算机系统组件(主板、视频输出、内存、I/O端口)
- 输入输出系统
第3章:汇编语言基础
- 基本元素:
- 整数常量(二进制、八进制、十进制、十六进制)
- 整数表达式及运算符优先级
- 实数常量(十进制和IEEE浮点格式)
- 字符常量和字符串常量
- 保留字(指令助记符、寄存器名、伪指令、属性、运算符)
- 数据定义:
- BYTE(字节)、SBYTE(有符号字节)
- WORD(字)、SWORD(有符号字)
- DWORD(双字)、SDWORD(有符号双字)
- QWORD(四字)
- TBYTE(packed BCD)
- 小端序存储
- 符号常量:= 赋值伪指令、EQU伪指令、TEXTEQU伪指令
第4章:数据传送、寻址和算术
- 数据传送指令:
- MOV(移动)、XCHG(交换)
- LAHF/SAHF(标志寄存器操作)
- 零扩展/符号扩展
- 算术指令:
- INC、DEC、ADD、SUB、NEG
- 实现算术表达式
- 标志位的影响
- 寻址方式:
- 直接内存操作数
- 间接寻址
- 索引操作数(含比例因子)
- 指针
- 操作符和伪指令:
- OFFSET、ALIGN、PTR、TYPE、LENGTHOF、SIZEOF、LABEL
第5章:过程(Procedures)
- 链接到外部库
- 栈操作基础(LIFO结构)
- 运行时栈:
- ESP(栈指针寄存器)
- PUSH和POP指令
- 栈帧(frame pointer = EBP)
- 过程定义:
- PROC/ENDP伪指令
- INVOKE伪指令(调用过程)
- 参数传递(通过栈)
- 局部变量
第6章:条件处理
- 比较指令:CMP、TEST
- 条件转移指令:JE/JZ、JNE/JNZ、JG/JGT、JL/JLT、JA/JNBE、JB/JNAE等
- LOOP指令
- 实现高级语言逻辑结构
- 有限状态机
第7章:整数算术
- 移位指令:SHL、SAR、ROL、ROR等
- 乘法指令:MUL、IMUL
- 除法指令:DIV、IDIV
- 扩展加法/减法:ADC、SBB
- ASCII和压缩BCD算术
第8章:高级过程
- 栈参数
- 局部变量
- 高级PROC和INVOKE伪指令
- 递归过程
第9章:字符串和数组
- 字符串原语(MOVS、CMPS、SCAS、LODS、STOS)
- 字符数组操作
- 整数数组排序和搜索
- 二维数组
第二卷:高级主题(第10-17章)
第10章:结构和宏
- 结构定义(STRUCT/ENDS)
- 宏定义(MACRO/ENDM)
- 条件汇编伪指令
- 重复块(REPEAT/UNTIL)
第11章:MS-Windows编程
- 保护模式内存管理
- 使用Windows API显示文本和颜色
- 动态内存分配
第12章:浮点处理和指令编码
- 浮点数二进制表示(IEEE 754)
- IA-32浮点单元(FPU)编程
- IA-32机器指令编码
第13章:高级语言接口
- 参数传递约定
- 内联汇编代码
- 汇编语言模块与C/C++程序链接
- C++编译器优化示例
第14章:16位MS-DOS编程
- 调用MS-DOS中断实现控制台和文件I/O
第15-17章(在线章节)
- 第15章:磁盘基础
- 第16章:BIOS级编程
- 第17章:专家级MS-DOS编程
关键概念总结
1. x86寄存器模型
通用寄存器:
- 32位:EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP
- 16位:AX、BX、CX、DX、SI、DI、SP、BP
- 8位:AH、AL、BH、BL、CH、CL、DH、DL
特殊寄存器:
- 段寄存器:CS、DS、SS、ES、FS、GS
- 指令指针:EIP
- 标志寄存器:EFLAGS
2. 数据表示
| 类型 | 范围 | 大小 |
|---|---|---|
| 无符号字节 | 0-255 | 1字节 |
| 有符号字节 | -128-127 | 1字节 |
| 无符号字 | 0-65,535 | 2字节 |
| 有符号字 | -32,768-32,767 | 2字节 |
| 无符号双字 | 0-4,294,967,295 | 4字节 |
| 有符号双字 | -2^31-2^31-1 | 4字节 |
| 无符号四字 | 0-2^64-1 | 8字节 |
| 有符号四字 | -2^63-2^63-1 | 8字节 |
3. 栈操作原则
- 栈是LIFO结构(后进先出)
- PUSH操作:ESP减4,将数据存入[ESP]
- POP操作:从[ESP]取出数据,ESP加4
- 调用过程时,返回地址自动压栈
- 过程局部变量通过栈帧访问(EBP-偏移量)
4. 寻址模式
| 模式 | 示例 | 说明 |
|---|---|---|
| 立即数 | mov eax, 10h | 数据直接包含在指令中 |
| 寄存器 | mov eax, ebx | 数据在寄存器中 |
| 直接内存 | mov eax, var | 变量地址在指令中 |
| 寄存器间接 | mov eax, [ebx] | 地址在寄存器中 |
| 基址+位移 | mov eax, [ebx+10h] | 寄存器+常数偏移 |
| 变址 | mov eax, [esi*4] | 寄存器*比例因子 |
| 基址+变址 | mov eax, [ebx+esi] | 两个寄存器相加 |
学习建议
- 前置知识:需要熟练掌握至少一门高级语言(Java、C、Python或C++)
- 实践重点:
- 使用MASM(Microsoft Macro Assembler)进行汇编
- 使用Visual Studio的调试器逐步执行程序
- 理解寄存器、内存和栈的变化
- 核心能力:
- 能够用汇编语言编写调试程序
- 理解高级语言编译后的机器级代码
- 能够优化关键代码段
与其他知识的关联
- 计算机组成原理 - 汇编语言是理解计算机工作原理的基础
- 操作系统 - 进程管理、系统调用都涉及汇编知识
- C++程序设计 - 第13章专门介绍汇编与C++的接口
- 编译器原理 - 理解汇编有助于理解代码优化和机器码生成
行动点
- 在本地安装Microsoft Visual Studio + MASM
- 按照书中示例逐一编写和调试程序
- 重点掌握第4-6章(数据传送、算术、条件处理)
- 尝试将简单的C程序编译为汇编,对比理解
- 完成书中的编程练习题
笔记生成日期:2026-09-04
提取方式:pdftotext文本提取(文本型PDF)