第1章 汇编语言介绍 1
1.1 机器语言与汇编语言 1
1.1.1 机器语言 1
1.1.2 机器指令 1
1.1.3 汇编语言 2
1.1.4 汇编语言指令 2
1.1.5 机器语言与汇编语言 2
1.2 处理器与协处理器 3
1.3 何时要使用汇编语言 4
1.4 操作系统(Operating Syseem) 4
1.5 你需要的软件 4
1.6 计算机的数制 5
1.6.1 位(Bit)和字节(Byte) 5
1.6.2 Binary Number 5
1.6.3 Hexadcimal Number 6
1.6.4 有符号数与无符号数 7
1.6.4.1 无符号数 7
1.6.4.2 有符号数 7
1.6.4.3 内存大小的计算 8
1.6.4.4 BCD 码 8
1.7 字符存储格式 8
1.7.1 ASCII 9
1.7.2 EBCDIC 9
第2章 硬件与软件概念 10
2.1 与汇编语言有关系密切的计算机硬件 10
2.2 CPU 寄存器 10
2.2.1 通用寄存器(General-Purpose Regisetr)、段寄存器(Segment Register)和其它寄存器 11
2.2.2 段寄存器 11
2.2.3 数据寄存器(又称通用寄存器) 12
2.2.4 特殊寄存器 13
2.2.5 标志寄存器(EFL) 13
2.3 系统软件与内存 15
2.4 段寻址 16
2.5 预处理符号 17
2.6 条件伪指令 19
2.6.1 条件编译伪指令 19
2.6.2 条件错误伪指令 20
第3章 汇编语言程序 21
3.1 编译流程 21
3.2 执行程序 22
3.3 程序结构 22
3.3.1 组织段 22
3.3.2 物理内存段(Physical Memory Segment) 23
3.3.3 逻辑段(Logical Segment) 23
3.4 使用简化段伪指令 23
3.5 定义内存模式 25
3.5.1 Small、Medium、Compact、Large和Huge模式 26
3.5.2 Tiny 模式 26
3.5.3 Flat 模式 26
3.6 设置 Stack Distance 27
3.7 指定处理器(Processor)和协处理器(Cioricessor) 27
3.8 建立Stack 27
3.9 建立数据(Datd)段 27
3.9.1 Near Dats Segment 28
3.9.2 Far Data Segment 28
3.10 建立Code 段 28
3.10.1 Near Code Segment 28
3.10.2 Far Code Sgement 28
3.11 使用.STARTUR 和.EXIT 去开始和结束CODE 29
3.12 MOV 指令 31
3.12.1 操作数的形式限制 31
3.12.2 直接寻址 32
3.12.3 PTR 运算符 33
3.12.4 Offset 运算符 34
3.12.5 SEG 运算符 34
3.12.6 XCHG 指令 34
3.13 PUSH 与POP 指令 35
第4章 地址与指针 36
4.1 段的地址 36
4.1.1 初始化缺省的段寄存器 36
4.1.2 指定和编译程序相关的段值 36
4.1.3 指定处理相关的段值 37
4.2 远程与远程地址 38
4.2.1 Near Code 38
4.2.2 Far Code 38
4.2.3 Near Data 39
4.2.4 Far Data 39
4.3 运算符(Operator) 40
4.4 操作数(Operand) 41
4.4.1 Regiseter 操作数 42
4.4.2 Immediate 操作数 42
4.4.3 OFFSET 运算符 42
4.4.4 SEG 运算符 42
4.4.5 Direct Memory 操作数 43
4.4.6 Indirect Memory 操作数 44
4.4.6.1.1 16位和32位寄存器间接操作数 44
4.4.6.2 16位寄存器间接操作数 46
4.4.6.3 32位寄存器间接操作数 47
4.5 程序堆栈 49
4.5.1 储存在堆栈的操作数 49
4.5.2 储存标志值至堆栈 50
4.5.3 存储在堆栈的寄存器值(80186~486 Only) 50
4.6 使用指针与地址存取数据 51
4.6.1 使用TYPEDEF 定义指针变量 51
4.6.2 使用ASSUME 定义寄存器型式 53
4.6.3 基本指针和地址运算 53
4.6.3.1 初始化指针变量 54
4.6.3.2 载入地址至寄存器 55
4.6.3.3 独立模式技巧 57
第5章 说明与使用数据类型 59
5.1 定义与使用简单数据类型 59
5.1.1 说明整型变量 59
5.1.2 配置整型变量的内存空间 59
5.1.3 数据初值 61
5.1.4 使用简单变量 61
5.2 定义和使用复杂数据类型 61
5.2.1 字符串和数组 61
5.2.2 结构与联合(structure and union) 64
5.2.3 记录(Record) 73
5.3 寻址未命名的项目 77
5.4 属性 77
5.5 运算符 78
5.6 LABEL 伪指令 79
5.7 EQU 伪指令 80
5.8 地址计数器:$和ORG 伪指令 81
5.9 变更命名规则 83
5.10 指定数字规则 83
第6章 基本字符输出、输入 84
6.1 中断 84
6.2 软硬件中断 85
6.3 INT 指令 85
6.4 中断向量表(Interrupt Vector Table) 85
6.5 BIOS 86
6.6 DOS 86
6.7 DOS Function Call 86
6.7.1 01H:由键盘输入-字符且显示屏幕上 87
6.7.2 02H: 输出字符至屏幕 87
6.7.3 05H:打印机输出 87
6.7.4 06H:控制台直接输出、输入 88
6.7.5 07H:控制台直接输入且没有回送 88
6.7.6 08H:控制台直接输入且没有回送 88
6.7.7 09H:字符串输出 89
6.7.8 0AH:字符串输入 89
6.7.9 0BH:键盘缓冲区状态 90
6.7.10 0CH:清除键盘缓冲区,并等待输入 90
6.8 扩展码(Extended Code) 90
6.9 ASCII 控制字符 92
6.10 宏(Macro) 92
6.10.1 宏过程(Macro Procedure) 93
6.10.2 建立宏过程 94
6.10.3 传参数给宏 94
6.10.4 指定需要或缺省的参数 95
6.11 显示方式(BIOS INT 10H) 100
6.11.1 显示方式 101
6.11.2 显示页 101
6.11.3 文本方式的字符显示 106
6.11.4 文本方式的字符对映方式 106
6.11.5 文本方式的字符属性 107
6.12 INCLUDE 指令 111
第7章 算术运算指令 114
7.1 加法运算指令 114
7.1.1 ADD、ADC和INC 指令 114
7.1.2 ADD和ADC 对标志的影响 115
7.1.3 INC 对标志的影响 117
7.2 减法运算指令 117
7.2.1 SUB、SBB和DEC 指令 117
7.2.2 NEG 指令 121
7.3 乘法运算指令 122
7.4 除法运算指令 124
7.5 CBW、CWD、CDQ和CWDE 指令 125
7.6 十进制数字 128
7.6.1 非压缩式BCD 数字 129
7.6.2 压缩式BCD 数字 132
7.7 逻辑指令 133
7.7.1 AND 指令 134
7.7.2 OR 指令 134
7.7.3 XOR 指令 135
7.7.4 NOT 指令 135
7.7.5 TEST 指令 136
7.8 移位和循环移位指令 137
7.8.1 SHL 指令 137
7.8.2 SHR 指令 138
7.8.3 SAL、SAR 指令 138
7.8.4 ROL 指令 139
7.8.5 ROR 指令 139
7.8.6 RCL 指令 140
7.8.7 RCR 指令 140
第8章 子程序 141
8.1 子程序介绍 141
8.2 定义子程序 142
8.2.1 PROC 与ENDP 伪指令 142
8.2.2 RET 指令 142
8.2.3 CALL 指令 142
8.3 Include 伪指令 145
8.4 建立宏程序库 146
8.5 EXTERN 和PUBLIC 伪指令 149
8.5.1 EXTERN 伪指令 149
8.5.2 PUBLIC 伪指令 150
8.5.3 参数传递 153
8.6 LIBRARY 153
8.6.1 独立子程序的描述及程序列表 154
8.6.2 区段说明 163
8.7 建立程序库 167
第9章 程序流程 173
9.1 转移 173
9.2 在代码段中的标记 173
9.3 标志寄存器 174
9.3.1 状态标志 175
9.3.2 修改状态标志指令:STC、CLC和CMC 176
9.3.3 控制标志 176
9.3.4 修改控制标志指令:STD、CLD、STI和CLI 176
9.4 条件转移指令 177
9.4.1 CMP 指令 178
9.4.2 以位指定为根据的转移 181
9.4.3 以零为根据的转移 181
9.4.4 转移扩展(jump-extending) 182
9.5 无条件转移指令:JMP 183
9.6 循环(LOOP) 184
9.7 IF伪指令 191
9.8 循环伪指令 192
9.8.1 .WHILE 循环 192
9.8.2 .REPEAT 循环 193
9.8.3 . BREAK 和.CONTINUE 伪指令 194
9.9 编写循环条件 195
9.9.1 运算式运算符 195
9.9.2 有符号与无符号操作数 196
9.9.3 条件运算式和计算方式 197
9.10 字符串处理 197
9.10.1 字符串指令全观 197
9.10.2 使用字符串指令 199
第10章 磁盘操作与文件处理 204
10.1 数据磁盘对映 204
10.1.1 逻辑扇区 205
10.1.2 磁盘格式 206
10.2 磁盘逻辑结构 207
10.2.1 根目录区 207
10.2.2 文件区 211
10.2.3 文件分配表(FAT) 211
10.3 驱动器的管理 213
10.3.1 0DH:磁盘重置 214
10.3.2 0EH:驱动器选择 214
10.3.3 19H:取得当前所使用的驱动器代码 214
10.3.4 1BH:取得预设的驱动器信息 214
10.3.5 1CH:取得指定驱动器信息 215
10.3.6 36H:取得磁盘剩余空间 215
10.4 DOS 目录管理 216
10.4.1 39H:建立子目录 216
10.4.2 3AH:删除子目录 217
10.4.3 3BH:改变当前的工作目录 217
10.4.4 41H:删除文件 218
10.4.5 43H:获取或设置文件属性 218
10.4.6 47H:获取当前的工作目录路径 219
10.4.7 4EH:寻找第一个符合条件的文件 220
10.4.8 4FH:寻找另一个符合条件的文件 221
10.4.9 1AH:设置磁盘传送地址(DTA) 221
10.4.10 PSP:(代码段前置区:Program Segment Prefix) 222
10.5 文件 225
10.5.1 3CH:建立文件及传回文件代号 226
10.5.2 3DH:打开文件 227
10.5.3 3EH:关闭文件 229
10.5.4 3FH:读取数据 229
10.5.5 40H:写入数据 230
10.5.6 42H:移动文件读写指针 231
附录A 安装 234
附录B LST、REF、MAP文件 240
附录C 完整段 251
附录D 中断 257
附录E MASM6.11 保留字 261