内容简介 1
0.1 硬件和软件需求 1
0.2 本书内容 2
0.3 符号约定 2
第一章 安装Turbo Assembler 3
1.1 安装Turbo Assembler 3
第二章 Turbo Assembler程序设计入门 4
2.1 编写第一个Turbo Assembler用户程序 4
2.1.1 汇编第一个程序 5
2.1.2 链接第一个程序 6
2.1.3 运行第一个用户程序 6
2.1.4 发生了什么? 6
2.2 修改第一个Turbo Assembler程序 7
2.2.1 将输出送往打印机 8
2.3 编写第二个Turbo Assembler用户程序 9
2.3.1 运行Reverse.asm 10
第三章 命令行参考 12
3.1 在DOS中启动Turbo Assembler 12
3.2 命令行选择项 14
第四章 Turbo Assembler的扩充与改进 25
4.1 DPMI支持 25
4.2 扩展的命令行语法 25
4.3 GLOBAL指令 25
4.4 PUBLICDLL指令 25
4.5 COMM指令 26
4.6 局部符号 26
4.7 条件转移的扩展 26
4.8 Ideal方式 30
4.9 UNION指令与STRUC嵌套 30
4.10 EMUL和NOEMUL指令 31
4.11 明确的段重载 31
4.12 常量段 31
4.13 扩展的CALL指令 32
4.14 扩展的PUSH和POP指令 32
4.15 语言指定的扩展 32
4.16 新版的LOOP和JCXZ指令 32
4.17 控制列表文件的内容与格式 34
4.17.1 行列表选择伪指令 34
4.17.2 列表格式控制伪指令 36
4.18 可选的指令 38
4.19 预定义变量 38
4.20 MASM 5.0和MASM 5.1的改进 38
4.21 改进的SHL和SHR处理 49
4.22 多遍汇编的兼容性 49
第五章 Turbo Assembler与Borland C++的接口 50
5.1 在Borland C++中使用嵌入式汇编 50
5.1.1 嵌入式汇编如何工作 52
5.1.2 嵌入式汇编语句的格式 58
5.1.3 嵌入式汇编示例 61
5.1.4 嵌入式汇编的限制 64
5.1.5 嵌入式汇编码相对于纯C++代码的缺点 68
5.2 在Borland C++中调用Turbo Assembler函数 69
5.2.1 Borland C++与Turbo Assembler的接口框架 70
5.2.2 Turbo Assembler与Borland C++的交互性 85
5.2.3 从Borland C++中调用Turbo Assembler函数 93
5.2.4 用汇编语言编写C++成员函数 96
5.2.5 Pascal调用约定 99
5.3 在Turbo Assembler中调用Borland C++ 100
5.3.1 链入C的启动码 100
5.3.2 确保已正确设置了段 101
5.3.3 执行调用 101
5.3.4 在Turbo Assembler调用Borland C++函数 102
第六章 Turbo Assembler与Turbo Pascal的接口 105
6.1 Turbo Pascal内存映象 105
6.1.1 Turbo Pascal内存映象 105
6.1.2 堆管理程序 106
6.2 Turbo Pascal中寄存器的用法 110
6.3 近调用还是远调用 110
6.4 与Turbo Pascal共享信息 110
6.4.1 编译伪指令和外部子程序 111
6.4.2 PUBLIC伪指令:使Turbo Pascal可利用Turbo Assembler的信息 111
6.4.3 EXTRN伪指令:使Turbo Assembler可利用Turbo Pascal的信息 112
6.4.4 使用段定位 115
6.4.5 无效代码的消除 115
6.5 Turbo Pascal参数传递约定 116
6.5.1 值参 116
6.5.2 变量参数 117
6.5.3 栈的维护 117
6.5.4 存取参数 117
6.6 Turbo Pascal中的函数结果 120
6.6.1 标量函数结果 120
6.6.2 实型函数结果 120
6.6.3 8087函数结果 120
6.6.4 串函数结果 120
6.6.5 指针函数结果 121
6.7 为局部数据分配空间 121
6.7.1 分配私有静态存贮区 121
6.7.2 分配动态存贮区 121
6.8 由Turbo Pascal调用汇编语言子程的例子 122
6.8.1 适用16进制转换子程序 123
6.8.2 交换两个变量 126
6.8.3 扫描DOS环境 129
第七章 Turbo Assembler中的Ideal模式 134
7.1 什么是Ideal模式? 134
7.2 为什么要使用Ideal模式? 134
7.3 进入了退出Ideal模式 135
7.4 MASM模式与Ideal模式之间的区别 136
7.4.1 Ideal模式下的标记符 136
7.4.2 正文等价符和数字等价符(EQU和=伪指令) 138
7.4.3 表达式和操作数 138
7.4.4 算符 140
7.4.5 伪指令 143
7.4.6 段和段组 146
7.4.7 定义近代码标号或远代码标号 148
7.4.8 外部符号、公用符号和全程符号 149
7.4.9 其它方面的区别 149
7.5 MASM模式与Ideal模式下程序设计的对比 151
7.5.1 MASM模式下的程序示例 151
7.5.2 Ideal模式下的程序示例 152
7.5.3 对MASM模式和Ideal模式的剖析 154
第八章 预定义符号 156
第九章 操作符 161
9.1 算述精度 161
9.1.1 操作符优先级 161
第十章 伪指令集 187
第十一章 Turbo Assembler与Turbo Basic的接口 270
11.1 传递参数 270
11.1.1 不在当前数据段的变量 272
11.1.2 什么类型的调用? 272
11.2 弹出堆栈 273
11.3 为Turbo Basic创建一个汇编程序 273
11.4 调用一个在线汇编子程序 274
11.5 在内存中安装一个Turbo Basic子程序 275
11.5.1 隐藏串 276
11.5.2 绝对调用(CALL ABSOLUTE) 277
11.6 调用中断 279
11.7 样本程序 281
第十二章 Turbo Assemble与Turbo Prolog的接口 284
12.1 声明外部谓词 284
12.2 调用约定参数 284
12.2.1 命名约定 285
12.3 写汇编语言谓词 285
12.3.1 实现double谓词 288
12.4 用多量流模式实现谓词 290
12.5 从汇编函数调用Turbo Prolog谓词 292
12.5.1 表和函子 294
附录A Turbo Assembler语法概要 298
A.1 词法 298
A.2 MASM方式下的表达式语法 300
A.3 Ideal方式下的表达式语法 302
附录B 兼容性问题 305
B.1 一遍与两遍汇编 305
B.2 环境变量 306
B.3 MicroSoft二进制浮点数格式 306
B.4 Turbo Assembler Quirks方式 306
B.4.1 字节移入/出段寄存器 306
B.4.2 对远程标号或过程出错的近程转移 306
B.4.3 使用=和EQU伪指令时类型信息的丢失 307
B.4.4 段调整检查 307
B.4.5 带符号立即数的算术和逻辑命令 307
B.4.6 MASM 5.1特性 308
B.4.7 Masm 5.1/Quirks方式的特性 308
B.5 QASM的兼容性 309
附录C 实用程序 310
C.1 MAKE:程序管理器 310
C.1.1 MAKE是怎样工作的? 310
C.1.2 启动MAKE 311
C.1.3 MAKE的一种简单运用 313
C.1.4 制作makefile文件 314
C.1.5 makefile文件的组成 315
C.1.6 命令表 316
C.1.7 指令 326
C.1.8 MAKE错误信息 331
C.2 TLIB:Turbo库管理程序 335
C.2.1 为什么使用目标模块库 335
C.2.2 TLIB命令行 335
C.2.3 使用应答文件 337
C.2.4 建立一个扩展目录:/E选择 338
C.2.5 设置页大小:/P选项 338
C.2.6 高级操作:/C选项 338
C.2.7 例子 339
C.3 TLINK(连接程序) 339
C.3.1 调用TLINK 340
C.3.2 TLINK选项 346
C.3.3 模块定义文件 352
C.3.4 模块定义引用 354
C.3.5 TLINK信息 358
C.4 TOUCH实用程序 367
C.5 GREP:一种文件查找实用程序 367
C.5.1 GREP选择项 367
C.5.2 查找串 367
C.5.3 文件说明 370
C.5.4 带说明的例子 370
C.6 OBJXREF:目标模块交叉引用实用程序 372
C.6.1 OBJXREF命令行 373
C.6.2 应答文件 374
C.6.3 OBJXREF报告样本 375
C.6.4 使用OBJXREF的例子 379
C.6.5 OBJXREF出错信息和警告 380
C.7 TCREF:源模块交叉引用实用程序 381
C.7.1 应答文件 381
C.7.2 与TLINK的兼容 381
附录D 出错信息 383
D.1 信息性信息 383
D.2 警告和出错信息 383
D.3 致命错误信息 400