【文件属性】:
文件名称:nasm PC汇编语言 教程
文件大小:900KB
文件格式:RAR
更新时间:2013-10-22 16:54:19
nasm 汇编教程
目录
前言i
第1章简介1
1.1 数制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 十进制. . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 二进制. . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.3 十六进制. . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 计算机结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 内存. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.3 CPU 80x86系列. . . . . . . . . . . . . . . . . . . . . 5
1.2.4 8086 16位寄存器. . . . . . . . . . . . . . . . . . . . . 6
1.2.5 80386 32位寄存器. . . . . . . . . . . . . . . . . . . . 7
1.2.6 实模式. . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.7 16位保护模式. . . . . . . . . . . . . . . . . . . . . . . 8
1.2.8 32位保护模式. . . . . . . . . . . . . . . . . . . . . . . 8
1.2.9 中断. . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 汇编语言. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.1 机器语言. . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.2 汇编语言. . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.3 指令操作数. . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.4 基本指令. . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.5 指示符. . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.6 输入和输出. . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.7 调试. . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4 创建一个程序. . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4.1 第一个程序. . . . . . . . . . . . . . . . . . . . . . . . 16
1.4.2 编译器依赖. . . . . . . . . . . . . . . . . . . . . . . . 18
1.4.3 汇编代码. . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4.4 编译C代码. . . . . . . . . . . . . . . . . . . . . . . . 19
1.4.5 连接目标文件. . . . . . . . . . . . . . . . . . . . . . . 20
1.4.6 理解一个汇编列表文件. . . . . . . . . . . . . . . . . . 20
3
4 目录
1.5 骨架文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
第2章基本汇编语言23
2.1 整形工作方式. . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.1 整形表示法. . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.2 正负号延伸. . . . . . . . . . . . . . . . . . . . . . . . 25
2.1.3 补码运算. . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1.4 程序例子. . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.5 扩充精度运算. . . . . . . . . . . . . . . . . . . . . . . 31
2.2 控制结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2.1 比较. . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2.2 分支指令. . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2.3 循环指令. . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3 翻译标准的控制结构. . . . . . . . . . . . . . . . . . . . . . . 36
2.3.1 If语句. . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3.2 While循环. . . . . . . . . . . . . . . . . . . . . . . . . 37
2.3.3 Do while循环. . . . . . . . . . . . . . . . . . . . . . . 37
2.4 例子:查找素数. . . . . . . . . . . . . . . . . . . . . . . . . . . 37
第3章位操作41
3.1 移位操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.1 逻辑移位. . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.2 移位的应用. . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.3 算术移位. . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.4 循环移位. . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.5 简单应用. . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2 布尔型按位运算. . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2.1 AND运算符. . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.2 OR运算符. . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.3 XOR运算. . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.4 NOT运算. . . . . . . . . . . . . . . . . . . . . . . . . 45
3.2.5 TEST指令. . . . . . . . . . . . . . . . . . . . . . . . . 45
3.2.6 位操作的应用. . . . . . . . . . . . . . . . . . . . . . . 45
3.3 避免使用条件分支. . . . . . . . . . . . . . . . . . . . . . . . 47
3.4 在C中进行位操作. . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4.1 C中的按位运算. . . . . . . . . . . . . . . . . . . . . . 49
3.4.2 在C中使用按位运算. . . . . . . . . . . . . . . . . . . 50
3.5 Big和Little Endian表示法. . . . . . . . . . . . . . . . . . . . 51
3.5.1 什么时候需要在乎Little和Big Endian . . . . . . . . . 52
3.6 计算位数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.6.1 方法一. . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.6.2 方法二. . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.6.3 方法三. . . . . . . . . . . . . . . . . . . . . . . . . . . 55
目录5
第4章子程序57
4.1 间接寻址. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.2 子程序的简单例子. . . . . . . . . . . . . . . . . . . . . . . . 57
4.3 堆栈. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.4 CALL和RET指令. . . . . . . . . . . . . . . . . . . . . . . . . 60
4.5 调用约定. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.5.1 在堆栈上传递参数. . . . . . . . . . . . . . . . . . . . 62
4.5.2 堆栈上的局部变量. . . . . . . . . . . . . . . . . . . . 66
4.6 多模块程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.7 C与汇编的接口技术. . . . . . . . . . . . . . . . . . . . . . . 71
4.7.1 保存寄存器. . . . . . . . . . . . . . . . . . . . . . . . 71
4.7.2 函数名. . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.7.3 传递参数. . . . . . . . . . . . . . . . . . . . . . . . . 72
4.7.4 计算局部变量的地址. . . . . . . . . . . . . . . . . . . 73
4.7.5 返回值. . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.7.6 其它调用约定. . . . . . . . . . . . . . . . . . . . . . . 73
4.7.7 样例. . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.7.8 在汇编程序中调用C函数. . . . . . . . . . . . . . . . . 78
4.8 可重入和递归子程序. . . . . . . . . . . . . . . . . . . . . . . 78
4.8.1 递归子程序. . . . . . . . . . . . . . . . . . . . . . . . 79
4.8.2 回顾一下C变量的储存类型. . . . . . . . . . . . . . . 79
第5章数组83
5.1 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.1.1 定义数组. . . . . . . . . . . . . . . . . . . . . . . . . 83
5.1.2 访问数组中的元素. . . . . . . . . . . . . . . . . . . . 84
5.1.3 更高级的间接寻址. . . . . . . . . . . . . . . . . . . . 86
5.1.4 例子. . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.1.5 多维数组. . . . . . . . . . . . . . . . . . . . . . . . . 91
5.2 数组/串处理指令. . . . . . . . . . . . . . . . . . . . . . . . . 93
5.2.1 读写内存. . . . . . . . . . . . . . . . . . . . . . . . . 94
5.2.2 REP前缀指令. . . . . . . . . . . . . . . . . . . . . . . 95
5.2.3 串比较指令. . . . . . . . . . . . . . . . . . . . . . . . 96
5.2.4 REPx前缀指令. . . . . . . . . . . . . . . . . . . . . . . 96
5.2.5 样例. . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
第6章浮点103
6.1 浮点表示法. . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.1.1 非整形的二进制数. . . . . . . . . . . . . . . . . . . . 103
6.1.2 IEEE浮点表示法. . . . . . . . . . . . . . . . . . . . . 105
6.2 浮点运算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.2.1 加法. . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.2.2 减法. . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6 目录
6.2.3 乘法和除法. . . . . . . . . . . . . . . . . . . . . . . . 109
6.2.4 分支程序设计. . . . . . . . . . . . . . . . . . . . . . . 109
6.3 数字协处理器. . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.3.1 硬件. . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.3.2 指令. . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.3.3 样例. . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.3.4 二次方程求根公式. . . . . . . . . . . . . . . . . . . . 115
6.3.5 从文件中读数组. . . . . . . . . . . . . . . . . . . . . 118
6.3.6 查找素数. . . . . . . . . . . . . . . . . . . . . . . . . 120
第7章结构体与C++ 127
7.1 结构体. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.1.1 简介. . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.1.2 内存地址对齐. . . . . . . . . . . . . . . . . . . . . . . 128
7.1.3 位域s . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
7.1.4 在汇编语言中使用结构体. . . . . . . . . . . . . . . . 132
7.2 汇编语言和C++ . . . . . . . . . . . . . . . . . . . . . . . . . 134
7.2.1 重载函数和名字改编. . . . . . . . . . . . . . . . . . . 134
7.2.2 引用. . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
7.2.3 内联函数. . . . . . . . . . . . . . . . . . . . . . . . . 137
7.2.4 类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.2.5 继承和多态. . . . . . . . . . . . . . . . . . . . . . . . 147
7.2.6 C++的其它特性. . . . . . . . . . . . . . . . . . . . . 153
附录A 80x86指令155
A.1 非浮点指令. . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
A.2 浮点数指令. . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
索引163
【文件预览】:
all
----linux-ex.zip(31KB)
----pcasm-book-simplified-chinese.pdf(1.18MB)
----ms-ex.zip(31KB)
网友评论
- 好資源 感謝分享
- 教程很好,讲得比较全面,就是我自学感觉还是有点难懂。。
- 可以使用。
- 很不错的一本NASM教程!
- 好书一本阿啊啊
- 海海把,不是很容易
- 比较基础。
- 此教程非常好!
- 谢谢,很有用,有时候运算方式忘了就查查还是很方便的
- good 最近正好学习汇编 如果例程带中文注释就更好了
- nasm的资料不多,谢谢楼主分享。
- 很不错的一本NASM,学汇编,要有耐心的
- 还可以吧!挺基础的!
- 很基础,入门。
- 很不错,先给个C语言的程序,然后把它翻译成汇编,让我感觉没那么陌生。
- 第一次见nasm这么好的书
- 很不错,nasm的书能做到这样,非常好
- 很不错,市面上卖的NASM的本来就很少,还是很感谢作者!
- 我觉得这本书非常适合入门级的读者阅读,注重基础,让打家理解计算机的工作原理,和理解80386及以后的处理器的工作模式,理论与编程实践相结合。的确是本好书。