《汇编语言的编程艺术》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:(美)海德著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2011
  • ISBN:9787302263739
  • 页数:582 页
图书介绍:本书介绍如何编辑、编译和运行HLA程序,如何声明和使用常量、标量变量、指针、数组、结构和命名空间,如何转换数学表达式,如何转换高级控制结构。

第1章 进入汇编语言的世界 1

1.1 HLA程序的结构 1

1.2运行第一个HLA程序 3

1.3基本的HLA数据声明 4

1.4布尔值 6

1.5字符值 6

1.6 Intel 80x86 CPU系列简介 6

1.7存储子系统 9

1.8基本的机器指令 11

1.9基本的HLA控制结构 14

1.9.1 HLA语句中的布尔表达式 14

1.9.2 HLA中的if…then…elseif…else…endif语句 16

1.9.3布尔表达式中的逻辑与、逻辑或以及逻辑非 18

1.9.4 while…endwhile语句 20

1.9.5 for…endfor语句 20

1.9.6 repeat…until语句 21

1.9.7 break和breakif语句 22

1.9.8 forever…endfor语句 22

1.9.9 try…exception…endtty语句 23

1.10 HLA标准库入门 26

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例程 29

1.10.6 stdout.put例程 31

1.10.7 stdin.getc例程 32

1.10.8 stdin.getiX例程 33

1.10.9 stdin.readLn和stdin.flushInput例程 34

1.10.10 stdin.get例程 35

1.11关于try…endtry的其他细节 35

1.11.1 try…endtry嵌套语句 36

1.11.2 try…endtry语句中不受保护的子句 38

1.11.3 try…endtry语句中的anyexception子句 40

1.11.4寄存器与try…endtry语句 41

1.12高级汇编语言与低级汇编语言的比较 42

1.13更多信息 43

第2章 数据表示 45

2.1数字系统 45

2.1.1回顾十进制系统 45

2.1.2二进制数字系统 46

2.1.3二进制格式 47

2.2十六进制数字系统 47

2.3数据结构 49

2.3.1位 49

2.3.2半字节 50

2.3.3字节 51

2.3.4字 52

2.3.5双字 53

2.3.6四字和长字 53

2.4二进制数和十六进制数的算术运算 54

2.5关于数字及其表示 55

2.6位逻辑运算 57

2.7二进制数和位串的逻辑运算 59

2.8有符号数和无符号数 61

2.9符号扩展、零扩展、压缩和饱和 65

2.10移位和循环移位 68

2.11位域和压缩数据 72

2.12浮点运算简介 76

2.12.1 IEEE浮点格式 79

2.12.2 HLA为浮点数值提供的支持 81

2.13 BCD数据表示 84

2.14字符 85

2.14.1 ASCII字符编码 85

2.14.2 HLA对ASCII字符提供的支持 88

2.15 Unicode字符集 91

2.16更多信息 92

第3章 存储器的访问与结构 93

3.1 80x86的寻址方式 93

3.1.1 80x86寄存器寻址方式 94

3.1.2 80x86的32位存储器寻址方式 94

3.2运行时存储器的结构 100

3.2.1代码段 101

3.2.2静态段 102

3.2.3只读数据段 103

3.2.4存储段 103

3.2.5 @nostorag e属性 104

3.2.6 var段 104

3.2.7程序中声明段的结构 105

3.3 HLA如何为变量分配内存 106

3.4 HLA对数据对齐的支持 107

3.5地址表达式 109

3.6类型强制转换 111

3.7寄存器类型强制转换 113

3.8栈段与push和pop指令 114

3.8.1基本的push指令 114

3.8.2基本的pop指令 115

3.8.3用push和PoP指令保护寄存器 116

3.9栈的LIFO数据结构 117

3.9.1其他的push和pop指令 118

3.9.2不使用出栈而从栈内移除数据 119

3.10访问已入栈而未出栈的数据 120

3.11动态内存分配和堆段 122

3.12 inc和dec指令 125

3.13获取存储器对象的地址 125

3.14更多信息 126

第4章 常量、变量与数据类型 127

4.1一些额外的指令:intmul、bound、 into 127

4.2 HLA常量和数值声明 131

4.2.1常量类型 134

4.2.2字符串和字符字面常量 135

4.2.3 const段中的字符串常量与文本常量 137

4.2.4常量表达式 138

4.2.5 HLA程序中的多个const段以及它们的顺序 140

4.2.6 HLA的val段 140

4.2.7在程序中的任意位置修改val对象 141

4.3 HLA的type段 142

4.4 enum和HLA枚举数据类型 143

4.5指针数据类型 144

4.5.1在汇编语言中使用指针 145

4.5.2在HLA中声明指针 146

4.5.3指针常量和指针常量表达式 146

4.5.4指针变量和动态内存分配 147

4.5.5指针的常见问题 147

4.6复合数据类型 151

4.7字符串 151

4.8 HLA字符串 154

4.9访问字符串中的字符 159

4.10 HLA字符串模块和其他与字符串相关的例程 160

4.11存储器内的转换 170

4.12字符集 171

4.13在HLA中实现字符集 172

4.14 HLA字符集常量和字符集表达式 173

4.15 HLA标准库对字符集的支持 175

4.16在HLA程序中使用字符集 177

4.17数组 178

4.18在HLA程序中声明数组 179

4.19 HLA数组常量 180

4.20访问一维数组的元素 181

4.21数组排序 182

4.22多维数组 183

4.22.1以行为主排列 184

4.22.2以列为主排列 187

4.23多维数组的存储空间分配 187

4.24汇编语言中多维数组元素的访问 189

4.25记录 190

4.26记录常量 192

4.27记录数组 193

4.28数组/记录作为记录字段 194

4.29对齐记录中的字段 197

4.30记录指针 198

4.31联合 200

4.32匿名联合 202

4.33变体类型 203

4.34命名空间 203

4.35汇编语言中的动态数组 206

4.36更多信息 208

第5章 过程和单元 209

5.1过程 209

5.2机器状态的保存 211

5.3过程的提前返回 215

5.4局部变量 215

5.5其他局部和全局符号类型 220

5.6参数 220

5.6.1值传递 221

5.6.2引用传递 224

5.7函数和函数的结果 226

5.7.1返回函数结果 227

5.7.2 HLA中的指令合成 227

5.7.3 HLA过程的@returns选项 229

5.8递归 231

5.9过程的向前引用 235

5.10 HLA v2.0的过程声明 236

5.11过程的底层实现与call指令 236

5.12过程与栈 238

5.13活动记录 240

5.14标准入口序列 242

5.15 标准出口序列 244

5.16自动(局部)变量的底层实现 245

5.17参数的底层实现 246

5.17.1在寄存器中传递参数 247

5.17.2在代码流中传递参数 249

5.17.3在栈中传递参数 251

5.18过程指针 269

5.19过程参数 272

5.20无类型的引用参数 273

5.21管理大型程序 274

5.22 #include伪指令 274

5.23忽略重复的#include操作 276

5.24单元与external伪指令 276

5.24.1伪指令external的行为 280

5.24.2 HLA中的头文件 281

5.25命名空间污染 282

5.26更多信息 284

第6章 算术运算 287

6.1 80x86的整数运算指令 287

6.1.1 mul和imul指令 287

6.1.2 div和idiv指令 290

6.1.3 cmp指令 292

6.1.4 setcc指令 296

6.1.5 test指令 298

6.2算术表达式 299

6.2.1简单赋值 300

6.2.2简单表达式 300

6.2.3复杂表达式 302

6.2.4可交换运算符 307

6.3逻辑(布尔)表达式 308

6.4机器特性与运算技巧 309

6.4.1不使用mul、 imul或intmul的乘法 310

6.4.2不使用 div或idiv的除法 311

6.4.3使用and实现模N计数器 311

6.5浮点运算 312

6.5.1 FPU寄存器 312

6.5.2 FPU的数据类型 317

6.5.3 FPU的指令集 318

6.5.4 FPU的数据转移指令 318

6.5.5换算指令 320

6.5.6算术运算指令 322

6.5.7比较指令 327

6.5.8常量指令 329

6.5.9超越指令 329

6.5.10其他指令 331

6.5.11整数操作 332

6.6将浮点表达式转换成汇编语言 332

6.6.1将算术表达式转换成后缀表示法 334

6.6.2将后缀表达式转换成汇编语言 335

6.7 HLA标准库对浮点算术运算的支持 336

6.8更多信息 337

第7章 低级控制结构 339

7.1低级控制结构 339

7.2语句标号 339

7.3无条件控制转移(jmp) 341

7.4条件跳转指令 343

7.5“中级”控制结构:jt和jf 346

7.6使用汇编语言实现常用控制结构 347

7.7判定 347

7.7.1 if…then…else序列 348

7.7.2将HLA的if语句翻译成纯汇编语言 351

7.7.3使用完整布尔求值实现复杂的if语句 355

7.7.4短路布尔求值 356

7.7.5短路布尔求值与完整布尔求值 357

7.7.6汇编语言中if语句的高效实现 359

7.7.7 switch/case语句 363

7.8状态机和间接跳转 372

7.9“意大利面条式”代码 375

7.10循环 375

7.10.1 while循环 376

7.10.2 repeat…until循环 377

7.10.3 forever…endfor循环 378

7.10.4 for循环 378

7.10.5 break和continue语句 379

7.10.6寄存器的使用与循环 383

7.11性能提高 384

7.11.1将结束条件判断放在循环结尾 384

7.11.2反向执行循环 386

7.11.3循环不变计算 387

7.11.4循环展开 388

7.11.5归纳变量 389

7.12 HLA中的混合控制结构 390

7.13更多信息 392

第8章 高级算术运算 393

8.1多精度操作 393

8.1.1扩展精度操作的HLA标准库支持 394

8.1.2多精度加法运算 396

8.1.3多精度减法运算 398

8.1.4扩展精度比较操作 399

8.1.5扩展精度乘法操作 403

8.1.6扩展精度除法操作 406

8.1.7扩展精度neg操作 414

8.1.8扩展精度and操作 415

8.1.9扩展精度or操作 415

8.1.10扩展精度xor操作 416

8.1.11扩展精度not操作 416

8.1.12扩展精度移位操作 416

8.1.13扩展精度循环移位操作 419

8.1.14扩展精度I/O 420

8.2对不同长度的操作数进行操作 437

8.3十进制算术运算 439

8.3.1字面BCD常量 440

8.3.2 80x86的daa指令和das指令 441

8.3.3 80x86的aaa、 aas、 aam和aad指令 442

8.3.4使用FPU的压缩十进制算术操作 443

8.4表 445

8.4.1通过表查找进行函数计算 445

8.4.2域调节 449

8.4.3产生表 450

8.4.4表查找的性能 453

8.5更多信息 453

第9章 宏与HLA编译时语言 455

9.1编译时语言 455

9.2 #print和#error语句 457

9.3编译时常量和变量 458

9.4编译时表达式和操作符 458

9.5编译时函数 461

9.5.1类型转换编译时函数 462

9.5.2数值编译时函数 463

9.5.3字符分类编译时函数 463

9.5.4编译时字符串函数 463

9.5.5编译时符号信息 464

9.5.6其他编译时函数 465

9.5.7编译时文本对象的类型转换 465

9.6条件编译(编译时判定) 467

9.7重复编译(编译时循环) 470

9.8宏(编译时过程) 473

9.8.1标准宏 473

9.8.2宏参数 475

9.8.3宏中的局部符号 480

9.8.4作为编译时过程的宏 482

9.8.5使用宏模拟函数重载 483

9.9编写编译时“程序” 488

9.9.1在编译时构造数据表 488

9.9.2循环展开 492

9.10在不同的源文件中使用宏 493

9.11更多信息 493

第10章 位操作 495

10.1位数据 495

10.2位操作指令 496

10.3作为位累加器的进位标志 502

10.4位串的压缩与解压缩 503

10.5接合位组与分布位串 506

10.6压缩的位串数组 508

10.7搜索位 510

10.8位的计数 512

10.9倒置位串 515

10.10合并位串 517

10.11提取位串 517

10.12搜索位模式 519

10.13 HLA标准库的位模块 520

10.14更多信息 522

第11章 字符串指令 523

11.1 80x86字符串指令 523

11.1.1字符串指令的操作过程 524

11.1.2 rep/repe/repz和repnz/repne前缀 524

11.1.3方向标志 525

11.1.4 movs指令 527

11.1.5 emps指令 531

11.1.6 scas指令 534

11.1.7 stos指令 534

11.1.8 lods指令 535

11.1.9通过lods和 stos构建复杂的字符串函数 536

11.2 80x86字符串指令的性能 536

11.3更多信息 536

第12章 类与对象 539

12.1通用原则 539

12.2 HLA中的类 541

12.3对象 543

12.4继承 545

12.5重写 546

12.6虚拟方法与静态过程 547

12.7编写类方法和过程 548

12.8对象实现 552

12.8.1虚拟方法表 554

12.8.2带继承的对象表示 556

12.9构造函数和对象初始化 560

12.9.1构造函数中的动态对象分配 561

12.9.2构造函数和继承 563

12.9.3构造函数的参数和过程重载 566

12.10析构函数 566

12.11 HLA的initialize和_finalize字符串 567

12.12抽象方法 572

12.13运行时类型信息 574

12.14调用基类的方法 576

12.15更多信息 577

附录ASCII字符集 579