前言 1
序言 2
第一章 微处理器概述 5
1.1 从程序员的观点来看微处理器 5
1.2 内部寄存器 5
1.3 寻址方式 8
第二章 汇编程序的使用 9
2.1 汇编语言指令 9
2.2 汇编语言伪指令 10
2.3 运算符 13
2.5 开发汇编语言程序 16
2.4 汇编语言程序的类型 16
2.6 目标程序库 23
2.7 目标库的批处理文件 24
第三章 微处理器指令集 25
3.1 数据传送指令 29
3.2 算术运算指令 33
3.3 位操作指令 38
3.4 控制转移指令 44
3.5 串指令 48
3.6 中断指令 52
3.7 处理器控制指令 53
3.8 80186/286高级指令 54
3.9 80286/386的保护方式指令 56
第四章 程序模块 57
4.1 主模块 57
4.2 副模块 57
4.3 这些模块的用法 58
第五章 存储器操作 59
5.1 用一个字节值填满一个存储块(FILLMEMB) 59
5.2 用一个字值填满一个存储块(FILLMEMW) 60
5.3 移动字节块(MOVBLOCK) 62
5.4 比较字节块(COMPMEMB) 63
5.5 比较字块(COMPMEMW) 65
5.6 在一个存储块中查找一个字节(FINDBYTE) 66
5.7 在一个存储块中查找一个字值(FINDWORD) 68
5.8 对一些不带符号的字取平均值(AVERAGEU) 69
5.9 对一些带符号的字取平均值(AVERAGES) 71
第六章 32位二进制算术运算 73
6.1 将32位数装入寄存器 73
6.2 不带符号的二进制加法(ADDU32) 74
6.3 不带符号的二进制减法(SUBU32) 75
6.4 不带符号的二进制乘法(MULU32) 76
6.5 不带符号的二进制比较(COMPU32) 78
6.6 平方根(SQRT32) 79
6.7 带符号的二进制加法(ADDS32) 81
6.8 带符号的二进制减法(SUBS32) 83
6.9 带符号的二进制乘法(MULS32) 86
6.10 带符号的二进制比较(COMPS32) 87
第七章 16位十进制运算 90
7.1 输入BCD数 90
7.2 非压缩的十进制加法(ADDUD16) 90
7.3 非压缩的十进制减法(SUBUD16) 92
7.4 非压缩的十进制乘法(MULUD16) 93
7.5 非压缩的十进制除法(DIVUD16) 95
7.6 将16位二进制转换成压缩的BCD(B2BCDW) 97
7.7 将16位压缩的BCD转换成二进制(BCDW2B) 99
7.8 压缩的十进制加法(ADDPD16) 100
7.9 压缩的十进制减法(SUBPD16) 101
7.10 压缩的十进制乘法(MULPD16) 103
7.11 压缩的十进制除法(DIVPD16) 106
第八章 32位移位和旋转操作 108
8.1 左移(SAL32) 108
8.2 算术右移(SAR32) 110
8.3 逻辑右移(SHR32) 111
8.4 左旋转(ROL32) 112
8.5 右旋转(ROR32) 113
8.6 带进位左旋转(RCL32) 115
8.7 带进位右旋转(RCR32) 116
第九章 代码转换 118
9.1 二进制转换成压缩的BCD(BIN2BCD) 118
9.2 压缩的BCD转换成二进制(BCD2BIN) 119
9.3 二进制转换成十六进制ASCⅡ(BIN2ASC) 120
9.4 十六进制ASCⅡ转换成二进制(ASC2BIN) 121
9.5 不带符号的二进制转换成ASCⅡ字符串(UBIN2$) 122
9.6 带符号的二进制转换成ASCⅡ字符串(SBIN2$) 125
9.7 ASCⅡ十进制字符串转换成不带符号的二进制($2UBIN) 128
9.8 ASCⅡ十进制字符串转换成带符号的二进制($2SBIN) 130
第十章 串操作 133
10.1 将一个串加到另一个串后面(APPEND$) 133
10.2 将一个串插入到另一个串中(INSERT$) 135
10.3 在一个串中查找一个子串(FINDSUB$) 137
10.4 从一个串中删除一个子串(DELSUB$) 139
10.5 在一个串中拷贝一个子串(COPYSUB$) 141
10.6 在一个串中移动一个子串(MOVESUB$) 143
第十一章 无序表的操作 146
11.1 不带符号的字节表的求和(SUMUB) 146
11.2 带符号的字节表的求和(SUMSB) 148
11.3 不带符号的字节表中的最大和最小值(MAXMINU) 149
11.4 带符号的字节表中的最大和最小值(MAXMINS) 151
11.5 向无序表中添加一个字节(ADDB2UL) 152
11.6 从无序表中删除一个字节(DELB2UL) 153
第十二章 排序 156
12.1 气泡排序 156
12.2 不带符号的字节表按升序排序(BUBBLEBA) 158
12.3 不带符号的字表按升序排序(BUBBLEWA) 160
13.2 在升序表中查找一个字节值(FINDBA) 162
13.1 对分查找 162
第十三章 有序表的操作 162
13.3 在升序表中查找一个字值(FINDWA) 165
13.4 在升序表中插入一个字节值(INSBA) 167
13.5 在升序表中插入一个字值(INSWA) 169
13.6 从升序表中删除一个字节值(DELBA) 171
13.7 从升序表中删除一个字值(DELWA) 173
第十四章 通用输入与输出子程序 176
14.1 ASCⅡ 176
14.3 标准输入和输出设备 177
14.4 显示一个串(LIST$) 177
14.2 ASCⅡ的汇编程序表示法 177
14.5 读一个串(GET$) 179
14.6 显示一个字符(LISTCHR) 180
14.7 打印一个字符(PRINTCHR) 181
14.8 读一个字符(GETCHR) 182
14.9 读一个字符并回送(GETCHRE) 184
14.10 送一个字符到串行端口(SENDCSER) 186
14.11 从串行端口读一个字符(GETCSER) 187
14.12 扬声器发声(BEEP) 188
15.1 取时间(GETTIME) 190
第十五章 时间与日期操作 190
15.2 设置时间(SETTIME) 191
15.3 产生延迟(DELAY) 194
15.4 取日期(GETDATE) 196
15.5 设置日期(SETDATE) 197
第十六章 IBM PC专用的输入与输出 199
16.1 取IBM PC的型号(GETPCMOD) 199
16.2 读光标位置(READCURS) 200
16.3 移动光标(MOVECURS) 201
16.4 清除屏幕(CLEARS) 202
16.5 通过扬声器发出音响(SOUND) 203
16.6 通过扬声器演奏乐曲(PLAY) 206
17.1 取默认磁盘驱动器(GETDRIVE) 209
第十七章 磁盘驱动器操作 209
17.2 设置默认磁盘驱动器(SETDRIVE) 210
17.3 取检验开关状态(GETVERIF) 211
17.4 设置/复位检验开关(SETVERIF) 212
17.5 取磁盘自由空间(DSKSPACE) 213
第十八章 子目录操作 215
18.1 显示出错信息(SHOWERR) 215
18.2 取当前目录(GETDIR) 218
18.3 读路径名(GETPATH) 219
18.4 建立一个子目录(MAKEDIR) 221
18.5 取消一个子目录(REMDIR) 222
18.6 改变当前目录(CHGDIR) 223
第十九章 磁盘文件操作 225
19.1 属性 225
19.2 更改文件名(RENFILE) 226
19.3 删除一个文件(DELFILE) 227
19.4 读取文件方式(GETMODE) 229
19.5 改变文件方式(CHMODE) 230
19.6 查找第一个匹配文件(FINDF) 232
19.7 查找下一个匹配文件(FINDNXTF) 234
19.8 设置一个文件的写保护(PROTF) 236
19.9 取消一个文件的写保护(UNPROTF) 239
19.10 设置一个文件的隐含属性(HIDEF) 240
19.11 取消一个文件的隐含属性(UNHIDEF) 243
第二十章 磁盘输入与输出 246
20.1 在BASIC中数据文件的操作 246
20.2 在汇编语言中数据文件的操作 246
20.3 文件柄 247
20.4 建立一个文件(NEWFILE) 248
20.5 打开一个文件(OPENFILE) 249
20.6 关闭一个文件(CLOSFILE) 251
20.7 移动文件指针(MOVEPTR) 252
20.8 写一个文件(WRITFILE) 254
20.9 读一个文件(READFILE) 256
20.10 腾空一个文件(EMPTYF) 258
第二十一章 其它子程序 261
21.1 取DOS的版本号(GETDOSV) 261
21.2 读中断向量(GETINTV) 262
21.3 改变中断向量(SETINTV) 263
21.4 检查数学协处理器(MATHCHIP) 265
附录 267
A.十六进制/十进制转换 267
B.ASCⅡ字符集 269
C.指令系统一览表 271