汇编语言基础学习

汇编语言是一种最低级、最古老、不具有移植性的编程语言,它能够直接访问计算机硬件,所以执行效率极高,占用资源极少,一般用于嵌入式设备、驱动程序、实时应用、核心算法等。

汇编语言的缺点是开发周期特别长,实现一个简单的功能都非常麻烦,已经很少用来编写应用程序了。

这套汇编语言入门教程基于 Windows 32/64 位系统,讲解与 Intel 和 AMD 处理器相兼容的汇编语言程序设计,让大家认识机器的思维。

读者应该至少能够熟练使用一种高级程序设计语言,比如 Java、C、Python 或 C++ 等,直接学习汇编语言将非常吃力。

汇编语言基本概念简介
1.1 汇编语言是什么
1.2 汇编语言的应用
1.3 虚拟机是什么
1.4 汇编语言的数据表示
1.5 二进制整数
1.6 二进制加法运算
1.7 字节(byte)
1.8 十六进制整数
1.9 补码及进制转换
1.10 二进制减法运算
1.11 字符在计算机中是如何表示的
1.12 汇编语言布尔表达式
处理器架构
2.1 CPU处理器架构
2.2 32位x86处理器架构
2.3 x86-64处理器架构
2.4 x86计算机组件
汇编语言基础
3.1 第一个汇编语言程序
3.2 汇编语言常量
3.3 汇编语言保留字
3.4 汇编语言标识符
3.5 汇编语言伪指令
3.6 汇编语言指令
3.7 汇编语言整数加减法示例
3.8 汇编器
3.9 数据类型以及数据定义
3.10 等号伪指令
3.11 计算数组和字符串长度
3.12 EQU伪指令
3.13 TEXTEQU伪指令
数据操作相关运算符和指令
4.1 操作数类型
4.2 MOV指令
4.3 MOVZX和MOVSX指令
4.4 LAHF和SAHF指令
4.5 XCHG指令
4.6 直接偏移量操作数
4.7 汇编语言数据传送示例
4.8 加法和减法详解
4.9 OFFSET运算符
4.10 ALIGN伪指令
4.11 PTR运算符
4.12 TYPE运算符
4.13 LENGTHOF运算符
4.14 LABEL伪指令
4.15 间接寻址
4.16 JMP和LOOP指令
4.17 64位MOV指令
4.18 64位加法和减法
汇编语言过程
5.1 汇编语言堆栈简介
5.2 汇编语言运行时堆栈
5.3 PUSH和POP指令
5.4 PROC和ENDP伪指令
5.5 CALL和RET指令
5.6 过程调用嵌套
5.7 示例:整数数组求和
5.8 USES运算符
5.9 链接库简介
5.10 Irvine32链接库
5.11 Irvine32链接库过程详细说明
5.12 Irvine64链接库
汇编语言条件判断
6.1 布尔和比较指令简介
6.2 AND指令
6.3 OR指令
6.4 位向量(位映射)
6.5 XOR指令
6.6 NOT(反码)指令
6.7 TEST指令
6.8 CMP(比较)指令
6.9 置位和清除单个CPU标志位
6.10 64位模式下的布尔指令
6.11 条件跳转简介
6.12 条件跳转指令汇总
6.13 条件跳转应用及示例
6.14 LOOPZ和LOOPE指令
6.15 LOOPNZ和LOOPNE指令
6.16 使用汇编语言实现IF语句
6.17 使用汇编语言实现逻辑表达式
6.18 使用汇编语言实现WHILE循环
6.19 表驱动选择
6.20 有限状态机
6.21 条件控制流伪指令
6.22 .IF、.ELSE、.ELSEIF、.ENDIF伪指令
6.23 用.REPEAT和.WHILE实现循环
汇编语言整数运算
7.1 移位和循环移位指令简介
7.2 SHL(左移)指令
7.3 SHR(右移)指令
7.4 SAL和SAR指令
7.5 ROL(循环左移)指令
7.6 ROR(循环右移)指令
7.7 RCL和RCR指令
7.8 SHLD和SHRD指令
7.9 移位和循环移位的应用
7.10 MUL指令
7.11 IMUL指令
7.12 GetMseconds:测量程序执行时间
7.13 DIV指令
7.14 IDICV指令
7.15 使用汇编语言实现算术表达式
7.16 ADC指令
7.17 SBB指令
7.18 ASCII和非压缩十进制运算
7.19 AAA指令
7.20 AAS指令
7.21 AAM和AAD指令
7.22 压缩十进制运算简介
7.23 DAA指令
7.24 DAS指令
汇编语言高级过程
8.1 堆栈帧简介
8.2 寄存器参数的缺点
8.3 访问堆栈参数
8.4 常用32位编程调用规范
8.5 局部变量应用
8.6 引用参数简介
8.7 LEA指令
8.8 ENTER和LEAVE指令
8.9 LOCAL伪指令
8.10 Microsoft x64调用规范简介
8.11 递归及应用详解
8.12 INVOKE伪指令
8.13 ADDR运算符
8.14 PROC伪指令
8.15 PROTO伪指令
8.16 过程参数简介
8.17 WriteStackFrame过程
8.18 多模块程序简述
8.19 EXTERN伪指令
8.20 跨模块使用变量和标号
8.21 用Extern伪指令新建模块
8.22 用INVOKE和PROTO新建模块
8.23 使用USES运算符注意事项
8.24 向堆栈传递8位和16位参数
8.25 32位模式下传递64位参数
8.26 非双字局部变量
8.27 Java虚拟机工作原理
汇编语言字符串和数组
9.1 字符串基本指令简介
9.2 MOVSB、MOVSW和MOVSD指令
9.3 CMPSB、CMPSW和CMPSD指令
9.4 SCASB、SCASW和SCASD指令
9.5 STOSB、STOSW和STOSD指令
9.6 LODSB、LODSW和LODSD指令
9.7 Irvine32字符串过程
9.8 Irivne64字符串过程
9.9 二维数组简介
9.10 冒泡排序简述
9.11 对半查找简述
9.12 Java字符串处理
汇编语言结构和宏
10.1 STRUCT和ENDS伪指令
10.2 声明结构变量
10.3 TYPE和SIZEOF运算符
10.4 实例:显示系统时间
10.5 结构嵌套简述
10.6 联合的声明和使用
10.7 宏过程简述
10.8 MACRO和ENDM伪指令
10.9 宏的调用简述
10.10 宏的特性
10.11 Macro宏库详解
10.12 实例:封装器
10.13 条件汇编伪指令简述
10.14 IFB和IFNB伪指令
10.15 宏默认值设定及布尔表达式简述
10.16 IF、ELSE和DENDIF伪指令
10.17 IFIDN和IFIDNI伪指令
10.18 实例:矩阵行求和
10.19 &、<>、!、%运算符简述
10.20 宏函数
10.21 使用WHILE、REPEAT、FOR 和 FORC伪指令定义重复语句块
汇编语言MS-Windows编程
11.1 MS-Windows编程简述
11.2 Win32控制台函数简述
11.3 MessageBoxA函数
11.4 ReadConsole函数
11.5 GetLastError和FormatMessage函数
11.6 单字符输入简述
11.7 GetKeyState函数
11.8 WriteConsole和WriteConsoleOutputCharacter函数
11.9 CreateFile函数
11.10 CloseHandle函数
11.11 ReadFile函数
11.12 WriteFile函数
11.13 SetFilePointer函数
11.14 Irvine32链接库文件I/O
11.15 实例:文件I/O过程
11.16 控制台窗口操作
11.17 控制台光标设置函数简述
11.18 SetConsoleTextAttribute和WriteConsoleOutputAttribute函数
11.19 Win32时间与日期函数
11.20 64位Windows API使用简述
11.21 如何编写图形化的Windows应用程序
11.22 MessageBox函数
11.23 WinMain过程
11.24 WinProc过程
11.25 ErrorHandler过程
11.26 实例:Windows图形化程序
11.27 动态内存分配(堆分配)
11.28 实例:动态内存分配
11.29 x86存储管理简述
11.30 线性地址简述
11.31 页转换
浮点数处理与指令编码
12.1 IEEE二进制浮点数表示
12.2 阶码
12.3 规格化二进制浮点数
12.4 十进制小数转换为二进制实数
12.5 FPU寄存器栈
12.6 FPU舍入
12.7 浮点数异常与常用指令集
12.8 浮点数算术运算指令
12.9 FCOM指令
12.10 读写浮点数值
12.11 FWAIT(WAIT)指令
12.12 混合模式运算简述
12.13 异常的屏蔽与未屏蔽简述
12.14 x86指令编码简述
12.15 单字节指令与立即操作数简述
12.16 寄存器模式指令简述
12.17 处理器操作数大小前缀作用及意义
12.18 内存模式指令简述
高级语言接口
13.1 高级语言调用汇编语言的接口规范
13.2 .MODEL伪指令
13.3 查看C/C++编译器生成的汇编代码
13.4 __asm伪指令
13.5 实例:文件加密
13.6 C/C++调用汇编语言函数
13.7 汇编语言调用C/C++函数
13.8 实例:乘法表
13.9 汇编语言调用C/C++库函数

C/C++调用汇编语言实例:目录表程序