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-2551字节
有符号字节-128-1271字节
无符号字0-65,5352字节
有符号字-32,768-32,7672字节
无符号双字0-4,294,967,2954字节
有符号双字-2^31-2^31-14字节
无符号四字0-2^64-18字节
有符号四字-2^63-2^63-18字节

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]两个寄存器相加

学习建议

  1. 前置知识:需要熟练掌握至少一门高级语言(Java、C、Python或C++)
  2. 实践重点:
    • 使用MASM(Microsoft Macro Assembler)进行汇编
    • 使用Visual Studio的调试器逐步执行程序
    • 理解寄存器、内存和栈的变化
  3. 核心能力:
    • 能够用汇编语言编写调试程序
    • 理解高级语言编译后的机器级代码
    • 能够优化关键代码段

与其他知识的关联


行动点

  1. 在本地安装Microsoft Visual Studio + MASM
  2. 按照书中示例逐一编写和调试程序
  3. 重点掌握第4-6章(数据传送、算术、条件处理)
  4. 尝试将简单的C程序编译为汇编,对比理解
  5. 完成书中的编程练习题

笔记生成日期:2026-09-04
提取方式:pdftotext文本提取(文本型PDF)