汇编语言入门教程:汇编语言程序设计指南(精讲版)
汇编语言是一种最低级、最古老、不具有移植性的编程语言,它能够直接访问计算机硬件,所以执行效率极高,占用资源极少,一般用于嵌入式设备、驱动程序、实时应用、核心算法等。
汇编语言的缺点是开发周期特别长,实现一个简单的功能都非常麻烦,已经很少用来编写应用程序了。
这套汇编语言入门教程基于 Windows 32/64 位系统,讲解与 Intel 和 AMD 处理器相兼容的汇编语言程序设计,让大家认识机器的思维。
读者应该至少能够熟练使用一种高级程序设计语言,比如 Java、C、Python 或 C++ 等,直接学习汇编语言将非常吃力。
优质学习资源推荐:汇编语言入门教程简明版(阮一峰博客)
- 第1章 汇编语言基本概念简介
- 1.汇编语言是什么
- 2.汇编语言的应用
- 3.虚拟机是什么
- 4.汇编语言的数据表示
- 5.二进制整数
- 6.二进制加法运算
- 7.字节(byte)
- 8.十六进制整数
- 9.补码及进制转换
- 10.二进制减法运算
- 11.字符在计算机中是如何表示的
- 12.汇编语言布尔表达式
- 第2章 x86处理器架构
- 1.CPU处理器架构
- 2.32位x86处理器架构
- 3.x86-64处理器架构
- 4.x86计算机组件
- 5.I/O输入输出系统
- 第3章 汇编语言基础
- 1.第一个汇编语言程序
- 2.汇编语言常量
- 3.汇编语言保留字
- 4.汇编语言标识符
- 5.汇编语言伪指令
- 6.汇编语言指令
- 7.汇编语言整数加减法示例
- 8.汇编器
- 9.数据类型以及数据定义
- 10.等号伪指令
- 11.计算数组和字符串长度
- 12.EQU伪指令
- 13.TEXTEQU伪指令
- 14.汇编语言64位编程
- 第4章 数据操作相关运算符和指令
- 1.操作数类型
- 2.MOV指令
- 3.MOVZX和MOVSX指令
- 4.LAHF和SAHF指令
- 5.XCHG指令
- 6.直接偏移量操作数
- 7.汇编语言数据传送示例
- 8.加法和减法详解
- 9.OFFSET运算符
- 10.ALIGN伪指令
- 11.PTR运算符
- 12.TYPE运算符
- 13.LENGTHOF运算符
- 14.LABEL伪指令
- 15.间接寻址
- 16.JMP和LOOP指令
- 17.64位MOV指令
- 18.64位加法和减法
- 第5章 汇编语言过程
- 1.汇编语言堆栈简介
- 2.汇编语言运行时堆栈
- 3.PUSH和POP指令
- 4.PROC和ENDP伪指令
- 5.CALL和RET指令
- 6.过程调用嵌套
- 7.示例:整数数组求和
- 8.USES运算符
- 9.链接库简介
- 10.Irvine32链接库
- 11.Irvine32链接库过程详细说明
- 12.Irvine64链接库
- 第6章 汇编语言条件判断
- 1.布尔和比较指令简介
- 2.AND指令
- 3.OR指令
- 4.位向量(位映射)
- 5.XOR指令
- 6.NOT(反码)指令
- 7.TEST指令
- 8.CMP(比较)指令
- 9.置位和清除单个CPU标志位
- 10.64位模式下的布尔指令
- 11.条件跳转简介
- 12.条件跳转指令汇总
- 13.条件跳转应用及示例
- 14.LOOPZ和LOOPE指令
- 15.LOOPNZ和LOOPNE指令
- 16.使用汇编语言实现IF语句
- 17.使用汇编语言实现逻辑表达式
- 18.使用汇编语言实现WHILE循环
- 19.表驱动选择
- 20.有限状态机
- 21.条件控制流伪指令
- 22..IF、.ELSE、.ELSEIF、.ENDIF伪指令
- 23.用.REPEAT和.WHILE实现循环
- 第7章 汇编语言整数运算
- 1.移位和循环移位指令简介
- 2.SHL(左移)指令
- 3.SHR(右移)指令
- 4.SAL和SAR指令
- 5.ROL(循环左移)指令
- 6.ROR(循环右移)指令
- 7.RCL和RCR指令
- 8.SHLD和SHRD指令
- 9.移位和循环移位的应用
- 10.MUL指令
- 11.IMUL指令
- 12.GetMseconds:测量程序执行时间
- 13.DIV指令
- 14.IDICV指令
- 15.使用汇编语言实现算术表达式
- 16.ADC指令
- 17.SBB指令
- 18.ASCII和非压缩十进制运算
- 19.AAA指令
- 20.AAS指令
- 21.AAM和AAD指令
- 22.压缩十进制运算简介
- 23.DAA指令
- 24.DAS指令
- 第8章 汇编语言高级过程
- 1.堆栈帧简介
- 2.寄存器参数的缺点
- 3.访问堆栈参数
- 4.常用32位编程调用规范
- 5.局部变量应用
- 6.引用参数简介
- 7.LEA指令
- 8.ENTER和LEAVE指令
- 9.LOCAL伪指令
- 10.Microsoft x64调用规范简介
- 11.递归及应用详解
- 12.INVOKE伪指令
- 13.ADDR运算符
- 14.PROC伪指令
- 15.PROTO伪指令
- 16.过程参数简介
- 17.WriteStackFrame过程
- 18.多模块程序简述
- 19.EXTERN伪指令
- 20.跨模块使用变量和标号
- 21.用Extern伪指令新建模块
- 22.用INVOKE和PROTO新建模块
- 23.使用USES运算符注意事项
- 24.向堆栈传递8位和16位参数
- 25.32位模式下传递64位参数
- 26.非双字局部变量
- 27.Java虚拟机工作原理
- 第9章 汇编语言字符串和数组
- 1.字符串基本指令简介
- 2.MOVSB、MOVSW和MOVSD指令
- 3.CMPSB、CMPSW和CMPSD指令
- 4.SCASB、SCASW和SCASD指令
- 5.STOSB、STOSW和STOSD指令
- 6.LODSB、LODSW和LODSD指令
- 7.Irvine32字符串过程
- 8.Irivne64字符串过程
- 9.二维数组简介
- 10.冒泡排序简述
- 11.对半查找简述
- 12.Java字符串处理
- 第10章 汇编语言结构和宏
- 1.STRUCT和ENDS伪指令
- 2.声明结构变量
- 3.TYPE和SIZEOF运算符
- 4.实例:显示系统时间
- 5.结构嵌套简述
- 6.联合的声明和使用
- 7.宏过程简述
- 8.MACRO和ENDM伪指令
- 9.宏的调用简述
- 10.宏的特性
- 11.Macro宏库详解
- 12.实例:封装器
- 13.条件汇编伪指令简述
- 14.IFB和IFNB伪指令
- 15.宏默认值设定及布尔表达式简述
- 16.IF、ELSE和DENDIF伪指令
- 17.IFIDN和IFIDNI伪指令
- 18.实例:矩阵行求和
- 19.&、<>、!、%运算符简述
- 20.宏函数
- 21.使用WHILE、REPEAT、FOR 和 FORC伪指令定义重复语句块
- 第11章 汇编语言MS-Windows编程
- 1.MS-Windows编程简述
- 2.Win32控制台函数简述
- 3.MessageBoxA函数
- 4.ReadConsole函数
- 5.GetLastError和FormatMessage函数
- 6.单字符输入简述
- 7.GetKeyState函数
- 8.WriteConsole和WriteConsoleOutputCharacter函数
- 9.CreateFile函数
- 10.CloseHandle函数
- 11.ReadFile函数
- 12.WriteFile函数
- 13.SetFilePointer函数
- 14.Irvine32链接库文件I/O
- 15.实例:文件I/O过程
- 16.控制台窗口操作
- 17.控制台光标设置函数简述
- 18.SetConsoleTextAttribute和WriteConsoleOutputAttribute函数
- 19.Win32时间与日期函数
- 20.64位Windows API使用简述
- 21.如何编写图形化的Windows应用程序
- 22.MessageBox函数
- 23.WinMain过程
- 24.WinProc过程
- 25.ErrorHandler过程
- 26.实例:Windows图形化程序
- 27.动态内存分配(堆分配)
- 28.实例:动态内存分配
- 29.x86存储管理简述
- 30.线性地址简述
- 31.页转换
- 第12章 浮点数处理与指令编码
- 1.IEEE二进制浮点数表示
- 2.阶码
- 3.规格化二进制浮点数
- 4.十进制小数转换为二进制实数
- 5.FPU寄存器栈
- 6.FPU舍入
- 7.浮点数异常与常用指令集
- 8.浮点数算术运算指令
- 9.FCOM指令
- 10.读写浮点数值
- 11.FWAIT(WAIT)指令
- 12.混合模式运算简述
- 13.异常的屏蔽与未屏蔽简述
- 14.x86指令编码简述
- 15.单字节指令与立即操作数简述
- 16.寄存器模式指令简述
- 17.处理器操作数大小前缀作用及意义
- 18.内存模式指令简述
- 第13章 高级语言接口
- 1.高级语言调用汇编语言的接口规范
- 2..MODEL伪指令
- 3.查看C/C++编译器生成的汇编代码
- 4.__asm伪指令
- 5.实例:文件加密
- 6.C/C++调用汇编语言函数
- 7.汇编语言调用C/C++函数
- 8.实例:乘法表
- 9.汇编语言调用C/C++库函数
- 10.实例:目录表程序