PC汇编语言 BY Paul A. Carter
### PC汇编语言知识点概述 #### 一、基础知识与计算机结构 **1.1 数制** - **十进制**: 我们日常生活中最常用的数制,基于10个符号(0~9)进行计数。 - **二进制**: 计算机内部使用的数制,基于两个符号(0和1)进行计数。 - **十六进制**: 常用于表示二进制数据的一种缩写形式,使用16个符号(0~9和A~F)。 **1.2 计算机结构** - **内存**: 存储程序和数据的地方,分为RAM(随机存取存储器)和ROM(只读存储器)等。 - **CPU**: 中央处理器,负责执行指令和处理数据,由运算单元、控制单元和寄存器组成。 - **CPU 80x86系列**: Intel的x86架构CPU家族,包括早期的8086到现代的酷睿等。 - **8086 16位寄存器**: 包括AX、BX、CX、DX等,每个寄存器有16位。 - **80386 32位寄存器**: 引入了32位架构,增加了更多寄存器,如EAX、EBX、ECX、EDX等。 - **实模式与保护模式** - **实模式**: 早期8086的操作模式,允许直接访问所有物理内存,但不支持现代操作系统的特性。 - **16位保护模式**: 在80286引入,提供了内存保护功能。 - **32位保护模式**: 在80386中进一步发展,支持虚拟内存和更大的地址空间。 - **中断**: 允许外部设备或定时器向CPU发送信号以请求处理。 **1.3 汇编语言** - **机器语言**: 最低级的计算机语言,由二进制代码构成。 - **汇编语言**: 接近机器语言的一种编程语言,使用助记符代替机器指令,更容易理解和编写。 - **指令操作数**: 指令需要的数据或地址,可以是寄存器、立即数或内存地址等。 - **基本指令**: 如MOV(移动)、ADD(加法)、SUB(减法)等。 - **指示符**: 用来组织代码或数据的指令,例如SECTION(定义段)、LABEL(标记位置)等。 - **输入和输出**: 涉及与外部设备交互的指令,如INT(中断调用)等。 - **调试**: 使用调试工具定位和修复程序错误的过程。 **1.4 创建一个程序** - **第一个程序**: 通常是简单的“Hello World”程序,用于熟悉汇编语言的基本语法。 - **编译器依赖**: 不同的汇编器可能有不同的语法和支持的功能。 - **汇编代码**: 编写汇编语言源代码。 - **编译C代码**: 混合编程时需要编译C代码。 - **连接目标文件**: 将多个目标文件链接成可执行文件。 - **理解一个汇编列表文件**: 包含了编译过程中生成的信息,有助于调试。 **1.5 骨架文件**: 提供程序结构的基础框架,帮助快速构建程序。 #### 二、基本汇编语言 **2.1 整形工作方式** - **整形表示法**: 如无符号整数、带符号整数等。 - **正负号延伸**: 表示带符号整数的方法之一。 - **补码运算**: 使用补码进行算术运算。 - **程序例子**: 展示如何实现特定功能的完整程序。 - **扩充精度运算**: 处理超出单个寄存器所能表示的数值范围的计算。 **2.2 控制结构** - **比较**: 使用CMP指令比较两个值。 - **分支指令**: 如JMP(无条件跳转)、JE(相等时跳转)等。 - **循环指令**: 如LOOP(循环指令)。 **2.3 翻译标准的控制结构** - **If语句**: 实现条件判断。 - **While循环**: 循环执行直到条件不满足。 - **Do-while循环**: 至少执行一次循环体,然后检查条件是否继续。 **2.4 例子: 查找素数** - **查找素数**: 展示如何使用控制结构实现具体的算法。 #### 三、位操作 **3.1 移位操作** - **逻辑移位**: 向左或向右移动位,空位填充0。 - **算术移位**: 类似于逻辑移位,但在移位时保持符号位不变。 - **循环移位**: 位会从一侧移出后进入另一侧。 - **简单应用**: 实现乘除法等。 **3.2 布尔型按位运算** - **AND运算符**: 位与位之间的逻辑与操作。 - **OR运算符**: 位与位之间的逻辑或操作。 - **XOR运算**: 位与位之间的逻辑异或操作。 - **NOT运算**: 对位进行逻辑非操作。 - **TEST指令**: 测试两个值的某些位是否相同。 - **位操作的使用**: 如设置或清除特定位。 **3.3 避免使用条件分支** - **优化技巧**: 使用位操作替代条件分支提高效率。 **3.4 在C中进行位操作** - **C中的按位运算**: C语言支持位操作,如&、|、^、~等。 - **在C中使用按位运算**: 实现特定功能的示例。 **3.5 Big和Little Endian表示法** - **Big Endian**: 高位字节放在低地址。 - **Little Endian**: 低位字节放在低地址。 - **什么时候需要在乎Little和Big Endian**: 如在处理网络数据包或跨平台编程时。 **3.6 计算位数** - **方法一**: 逐位检查并计数。 - **方法二**: 使用位操作减少比较次数。 - **方法三**: 使用查找表等高级技巧。 #### 四、子程序 **4.1 间接寻址** - **使用寄存器或内存地址间接访问数据**。 **4.2 子程序的简单例子** - **展示如何定义和调用子程序**。 **4.3 堆栈** - **用于存储临时数据和函数调用信息**。 **4.4 CALL和RET指令** - **CALL**: 调用子程序并保存返回地址。 - **RET**: 从子程序返回。 **4.5 调用约定** - **在堆栈上传递参数**: 参数通常压入堆栈。 - **堆栈上的局部变量**: 在堆栈上分配局部变量的空间。 **4.6 多模块程序** - **涉及多个源文件的程序组织方式**。 **4.7 C与汇编的接口技术** - **保存寄存器**: 在调用函数前后保存和恢复寄存器状态。 - **函数名**: 函数在不同语言间的命名规则。 - **传递参数**: 参数如何从C传递给汇编语言函数。 - **计算局部变量的地址**: 在汇编语言中如何访问C函数中的局部变量。 - **返回值**: 如何将结果从汇编语言函数返回给C。 - **其它调用约定**: 如__cdecl、__stdcall等。 - **样例**: 展示如何实际操作的例子。 - **在汇编程序中调用C函数**: 反过来的调用方式。 **4.8 可重入和递归子程序** - **递归子程序**: 能够自我调用的函数。 - **回顾一下C变量的储存类型**: 自动变量、静态变量等的区别。 #### 五、数组 **5.1 介绍** - **定义数组**: 在汇编语言中如何声明数组。 - **访问数组中的元素**: 如何根据索引访问数组元素。 - **更高级的间接寻址**: 通过计算地址来访问数组元素。 - **多维数组**: 定义和访问多维数组的方法。 **5.2 数组/串处理指令** - **提供专门用于处理数组和字符串的指令集**。
- 粉丝: 3
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助