图书介绍
汇编语言编程艺术PDF|Epub|txt|kindle电子书版本网盘下载
![汇编语言编程艺术](https://www.shukui.net/cover/58/33133026.jpg)
- (美)Randall Hyde著;陈曙晖翻译 著
- 出版社: 北京:清华大学出版社
- ISBN:7302090572
- 出版时间:2005
- 标注页数:776页
- 文件大小:54MB
- 文件页数:794页
- 主题词:汇编语言
PDF下载
下载说明
汇编语言编程艺术PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
目录1
第1章 进入汇编语言的世界1
1.1 本章概述1
1.2 HLA程序的结构1
1.3 运行第一个HLA程序3
1.4 基本的HLA数据声明4
1.5 布尔值6
1.6 字符值6
1.7 Intel 80x86处理器简介7
1.8 基本的机器指令11
1.9 基本的HLA控制结构15
1.9.1 HLA语句中的布尔表达式15
1.9.2 HLA的IF..THEN..ELSEIF..ELSE..ENDIF语句17
1.9.3 布尔表达式中的逻辑与、逻辑或以及逻辑非19
1.9.4 WHILE..ENDWHILE语句21
1.9.5 FOR..ENDFOR语句21
1.9.6 REPEAT..UNTIL语句22
1.9.7 BREAK和BREAKIF语句23
1.9.8 FOREVER..ENDFOR语句23
1.9.9 TRY..EXCEPTION..ENDTRY语句24
1.10 HLA标准库入门27
1.10.1 STDIO模块中的预定义常量28
1.10.2 标准输入与标准输出29
1.10.3 stdout.newln例程29
1.10.4 stdout.putiX例程29
1.10.5 stdout.putiXSize例程30
1.10.6 stdout.put例程31
1.10.7 stdin.getc例程32
1.10.8 stdin.getiX例程34
1.10.9 stdin.readLn与stdin.flushInput例程35
1.10.10 stdin.get例程36
1.11 关于TRY..ENDTRY的其他细节36
1.11.1 TRY..ENDTRY嵌套语句37
1.11.2 TRY..ENDTRY语句中不受保护的子句39
1.11.3 TRY..ENDTRY语句中的ANYEXCEPTION子句42
1.11.4 寄存器与TRY..ENDTRY语句42
1.12 高级汇编语言与低级汇编语言的比较44
1.13 更多信息45
2.2.1 回顾十进制系统46
2.2 数字系统46
2.1 本章概述46
第2章 数据表示46
2.2.2 二进制数字系统47
2.2.3 二进制格式48
2.3 十六进制数字系统49
2.4 数据结构51
2.4.1 位51
2.4.2 半字节51
2.4.3 字节52
2.4.4 字53
2.4.5 双字54
2.4.6 四字与长字55
2.5 二进制数与十六进制数的算术运算56
2.6 关于数字及其表示法56
2.7 位逻辑运算59
2.8 二进制数和位串的逻辑运算61
2.9 有符号数和无符号数63
2.10 符号扩展、零扩展、压缩和饱和67
2.11 移位和循环移位71
2.12 位域和压缩数据75
2.13 浮点运算简介79
2.13.1 IEEE浮点格式82
2.13.2 HLA为浮点数值提供的支持85
2.14 BCD数据表示88
2.15 字符89
2.15.1 ASCII字符译码89
2.15.2 HLA对ASCII字符提供的支持92
2.17 更多信息96
2.16 Unicode字符集96
第3章 存储器的访问与结构97
3.1 本章概述97
3.2 80x86的寻址方式97
3.2.1 80x86寄存器寻址方式97
3.2.2 80x86的32位存储器寻址方式98
3.3 运行时存储器的结构104
3.3.1 代码段105
3.3.2 静态段106
3.3.3 只读数据段107
3.3.4 存储段108
3.3.5 @NOSTORAGE属性108
3.3.6 Var段109
3.3.7 程序中声明段的结构110
3.4 HLA如何为变量分配内存111
3.5 HLA对数据对齐的支持112
3.6 地址表达式115
3.7 类型强制转换117
3.8 寄存器类型强制转换119
3.9 栈段与PUSH及POP指令120
3.9.1 基本的PUSH指令120
3.9.2 基本的POP指令121
3.9.3 用PUSH和POP指令来保护寄存器123
3.9.4 栈的LIFO数据结构123
3.9.5 其他的PUSH和POP指令125
3.9.6 不使用出栈而从栈内移除数据127
3.9.7 访问已入栈而未出栈的数据129
3.10 动态内存分配和堆段130
3.11 INC和DEC指令134
3.12 获取存储器对象的地址134
3.13 更多信息135
第4章 常量、变量与数据类型136
4.1 本章概述136
4.2 一些额外的指令:INTMUL、BOUND、INTO136
4.3 TBYTE数据类型141
4.4 HLA常量和数值声明141
4.4.1 常量类型145
4.4.2 字符串和字符字面常量145
4.4.3 CONST段中的字符串常量与文本常量147
4.4.4 常量表达式149
4.4.6 HLA的VAL段151
4.4.5 HLA程序中的多个CONST段以及它们的顺序151
4.4.7 在程序中的任意位置修改VAL对象152
4.5 HLA的TYPE段153
4.6 ENUM和HLA枚举数据类型154
4.7 指针数据类型155
4.7.1 在汇编语言中使用指针156
4.7.2 在HLA中声明指针157
4.7.3 指针常量和指针常量表达式158
4.7.4 指针变量和动态内存分配159
4.7.5 指针的常见问题160
4.8 HLA标准库CHARS.HHF模型164
4.9 复合数据类型166
4.10 字符串167
4.11 HLA字符串169
4.12 访问字符串中的某个字符175
4.13 HLA字符串模块和其他与字符串相关的例程177
4.14 存储器内转换188
4.15 字符集190
4.16 在HLA中实现字符集190
4.17 HLA字符集常量和字符集表达式192
4.18 HLA HLL布尔表达式中的IN操作符193
4.19 HLA标准库对字符集的支持194
4.20 在HLA程序中使用字符集197
4.21 数组198
4.22 在HLA程序中声明数组199
4.23 HLA数组常量200
4.24 访问一维数组的元素201
4.25 多维数组204
4.25.1 以行为主排列205
4.25.2 以列为主排列208
4.26 多维数组的存储空间分配209
4.27 汇编语言中多维数组元素的访问211
4.28 大数组和MASM(只适用于Windows程序员)212
4.29 记录212
4.30 记录常量215
4.31 记录数组216
4.32 数组/记录作为记录字段217
4.33 控制记录中的字段偏移量220
4.34 对齐记录中的字段221
4.35 记录指针223
4.36 联合224
4.37 匿名联合226
4.38 变量类型227
4.39 联合常量228
4.40 命名空间229
4.41 汇编语言中的动态数组232
4.42 HLA标准库数组支持234
4.43 更多信息237
第5章 过程与单元238
5.1 本章概述238
5.2 过程238
5.3 机器状态的保存240
5.4 过程的提前返回244
5.5 局部变量245
5.7 参数250
5.6 其他局部和全局符号类型250
5.7.1 值传递251
5.7.2 引用传递254
5.8 函数和函数的结果257
5.8.1 返回函数结果257
5.8.2 HLA的指令合成258
5.8.3 HLA过程的@RETURNS选项260
5.9 递归262
5.10 过程的向前引用266
5.11 过程的底层实现与CALL指令267
5.12 过程与堆栈269
5.13 活动记录272
5.14 标准入口序列275
5.15 标准出口序列276
5.16 自动(局部)变量的底层实现277
5.17 参数的底层实现279
5.17.1 在寄存器中传递参数279
5.17.2 在代码流中传递参数281
5.17.3 在堆栈中传递参数284
5.18 过程指针304
5.19 过程参数307
5.20 无类型的引用参数308
5.21 管理大型程序309
5.22 #INCLUDE伪指令310
5.23 忽略重复的#INCLUDE操作311
5.24 单元与EXTERNAL伪指令312
5.24.1 伪指令EXTERNAL的行为316
5.24.2 HLA 中的头文件317
5.25 命名空间的污染319
5.26 更多信息321
第6章 算术运算322
6.1 本章概述322
6.2 80x86的整数运算指令322
6.2.1 MUL和IMUL指令322
6.2.2 DIV和IDIV指令325
6.2.3 CMP指令327
6.2.4 SETcc指令331
6.2.5 TEST指令333
6.3 算术表达式334
6.3.1 简单赋值语句335
6.3.2 简单表达式336
6.3.3 复杂表达式338
6.3.4 可交换运算符342
6.4 逻辑(布尔)表达式343
6.5 机器特征与运算技巧345
6.5.1 不使用MUL、IMUL或INTMUL的乘法346
6.5.2 不使用DIV或IDIV的除法347
6.5.3 使用AND实现模N计数器347
6.5.4 疏忽使用机器特性348
6.6 浮点运算348
6.6.1 FPU寄存器348
6.6.2 FPU的数据类型355
6.6.4 FPU的数据转移指令356
6.6.3 FPU的指令集356
6.6.5 换算指令358
6.6.6 算术运算指令360
6.6.7 比较指令365
6.6.8 常量指令367
6.6.9 超越指令367
6.6.10 其他指令369
6.6.11 整数操作370
6.7 浮点表达式到汇编语言的转换370
6.7.1 算术表达式到后缀表示法的转换372
6.7.2 把后缀表达式转换成汇编语言373
6.8.1 函数stdin.getf和fileio.getf375
6.8.2 HLA数学库中的三角函数375
6.8 HLA标准库对浮点算术运算的支持375
6.8.3 HLA数学库中的指数函数和对数函数376
6.9 算术运算小结377
第7章 低级控制结构378
7.1 本章概述378
7.2 低级控制结构378
7.3 语句标号378
7.4 无条件控制转移(JMP)380
7.5 条件跳转指令383
7.6 “中级”控制结构:JT和JF386
7.7 使用汇编语言实现通用控制结构386
7.8 选择386
7.8.1 IF..THEN..ELSE序列388
7.8.2 将HLA的IF语句翻译成纯汇编语言语句391
7.8.3 使用完全布尔求值实现复杂的IF语句396
7.8.4 “短路”布尔求值397
7.8.5 “短路”布尔求值与完全布尔求值399
7.8.6 汇编语言中IF语句的高效实现401
7.8.7 SWITCH/CASE语句405
7.9 状态机和间接跳转415
7.10 “面条式”代码418
7.11 循环418
7.11.1 WHILE循环419
7.11.2 REPEAT..UNTIL循环420
7.11.3 FOREVER..ENDFOR循环421
7.11.4 FOR循环422
7.11.5 BREAK和CONTINUE语句423
7.11.6 寄存器的使用与循环427
7.12 性能提高428
7.12.1 将结束条件判断放在循环结尾429
7.12.2 反向执行循环431
7.12.3 循环不变计算432
7.12.4 循环展开433
7.12.5 归纳变量434
7.13 HLA中的混合控制结构435
7.14 更多信息437
第8章 文件438
8.1 本章概述438
8.2 文件组织438
8.2.1 作为记录列表的文件438
8.2.2 二进制文件与文本文件的比较440
8.3 顺序文件442
8.4 随机访问文件449
8.5 ISAM文件453
8.6 截断文件456
8.7 更多信息458
第9章 高级算术运算459
9.1 本章概述459
9.2 多精度操作459
9.2.1 扩充精度操作的HLA标准库支持459
9.2.2 多精度加法操作462
9.2.3 多精度减法操作464
9.2.4 扩充精度比较操作465
9.2.5 扩充精度乘法操作470
9.2.6 扩充精度除法操作473
9.2.7 扩充精度NEG操作482
9.2.8 扩充精度AND操作483
9.2.9 扩充精度OR操作484
9.2.10 扩充精度XOR操作484
9.2.11 扩充精度NOT操作485
9.2.12 扩充精度移位操作485
9.2.13 扩充精度循环操作488
9.2.14 扩充精度I/O489
9.3 对不同长度的操作数进行操作509
9.4 十进制算术运算510
9.4.1 文字BCD常量512
9.4.2 80x86的DAA指令和DAS指令512
9.4.3 80x86 AAA、AAS、AAM和AAD指令514
9.4.4 使用FPU的压缩十进制算术操作515
9.5.1 通过表查找进行函数计算517
9.5 表517
9.5.2 域调节521
9.5.3 产生表522
9.5.4 表查找的性能526
9.6 更多信息526
第10章 宏与HLA编译时语言527
10.1 本章概述527
10.2 编译时语言527
10.3 #PRINT和#ERROR语句528
10.4 编译时常量和变量530
10.5 编译时表达式和操作符530
10.6.1 类型转换编译时函数533
10.6 编译时函数533
10.6.2 数字编译时函数535
10.6.3 字符分类编译时函数535
10.6.4 编译时字符串函数535
10.6.5 编译时模式匹配函数536
10.6.6 编译时符号信息537
10.6.7 其他编译时函数538
10.6.8 编译时TEXT对象的类型转换539
10.7 条件编译(编译时决定)540
10.8 重复编译(编译时循环)544
10.9 宏(编译时过程)547
10.9.1 标准宏548
10.9.2 宏的参数550
10.9.3 宏中的局部符号556
10.9.4 作为编译时过程的宏559
10.9.5 使用宏模拟函数重载559
10.10 编写编译时“程序”565
10.10.1 在编译时构造数据表565
10.10.2 循环展开570
10.11 在不同的源文件中使用宏571
10.12 更多信息571
第11章 位操作573
11.1 本章概述573
11.2 位数据573
11.3 位操作指令574
11.4 作为位累加器的进位标志位581
11.5 位串的压缩与解压缩581
11.6 接合位组与分布位串584
11.7 压缩的位串数组586
11.8 搜索位588
11.9 位的计数590
11.10 倒置位串593
11.11 合并位串595
11.12 提取位串596
11.13 搜索位模式598
11.14 HLA标准库的位模块599
11.15 更多信息600
第12章 字符串指令602
12.1 本章概述602
12.2 80x86字符串指令602
12.2.2 REP/REPE/REPZ和REPNZ/REPNE前缀603
12.2.1 字符串指令的操作过程603
12.2.3 方向标志位604
12.2.4 MOVS指令606
12.2.5 CMPS指令611
12.2.6 SCAS指令614
12.2.7 STOS指令615
12.2.8 LODS指令615
12.2.9 从LODS和STOS构建复杂的字符串函数616
12.3 80x86字符串指令的性能617
12.4 更多信息617
第13章 MMX指令集618
13.1 本章概述618
13.2 判断CPU是否支持MMX指令集618
13.3.1 MMX寄存器619
13.3 MMX编程环境619
13.3.2 MMX数据类型621
13.4 设计MMX指令集的目的622
13.5 饱和算法和回转模式622
13.6 MMX指令操作数623
13.7 MMX技术指令625
13.7.1 MMX数据传递指令625
13.7.2 MMX转换指令625
13.7.3 MMX压缩算术指令630
13.7.4 MMX逻辑指令632
13.7.5 MMX比较指令634
13.7.6 MMX移位指令637
13.7.7 EMMS指令639
13.8 MMX编程方案640
13.9 更多信息650
第14章 类与对象651
14.1 本章概述651
14.2 通用原则651
14.3 HLA中的类653
14.4 对象656
14.5 继承657
14.6 重载658
14.7 虚拟方法与静态过程659
14.8 编写类方法和过程661
14.9 对象实现665
14.9.1 虚拟方法表668
14.9.2 带继承的对象表达式669
14.10 构造函数和对象初始化673
14.10.1 构造函数中的动态对象分配674
14.10.2 构造函数和继承676
14.10.3 构造函数的参数和过程重载680
14.11 析构函数680
14.12 HLA的“_initialize_”和“_finalize_”字符串681
14.13 抽象方法687
14.14 运行时类型信息(RTTI)690
14.15 调用基类的方法691
14.16 更多信息692
15.2.1 在HLA程序中内嵌(MASM/Gas)汇编代码693
15.2 在同一程序中混合使用HLA和MASM/Gas代码693
第15章 混合语言编程693
15.1 本章概述693
15.2.2 链接MASM/Gas汇编模块和HLA模块696
15.3 使用Delphi/Kylix和HLA编程700
15.3.1 链接HLA模块与Delphi/Kylix程序701
15.3.2 寄存器保存704
15.3.3 函数的结果705
15.3.4 调用惯例711
15.3.5 Kylix中的值传递、引用传递、CONST参数和OUT参数717
15.3.6 Delphi/Kylix和HLA之间对应的标量数据类型718
15.3.7 在Delphi/Kylix和HLA代码之间传递字符串数据720
15.3.8 在HLA和Kylix之间传递记录数据722
15.3.9 在Delphi/Kylix和HLA之间传递集合数据726
15.3.11 从HLA代码中引用Delphi/Kylix对象727
15.3.10 在HLA和Delphi/Kylix之间传递数组数据727
15.4 使用C/C++和HLA编程730
15.4.1 链接HLA模块和C/C++程序731
15.4.2 寄存器保存734
15.4.3 函数结果734
15.4.4 调用惯例734
15.4.5 C/C++中的值传递和引用传递738
15.4.6 C/C++和HLA之间的标量数据类型一致性738
15.4.7 在C/C++和HLA代码之间传递字符串数据740
15.4.8 在HLA和C/C++之间传递记录/结构数据740
15.4.9 在HLA和C/C++之间传递数组数据742
15.5 更多信息742
附录A ASCII字符集743
附录B 80x86指令集747