什么是汇编语言
汇编语言(Assembly Language)是任何一种用于计算机编程的低级语言,亦称为符号语言。
先简单说一下出现汇编语言的背景,原因在于在最开始的和计算机打交道时候,都是使用的机器语言进行编程的,也就所说的2进制语言。机器语言很大的问题在于很难记忆,所以后来人们通过一种符合来表示有意义的操作,例如:
01010000 机器指令 对应“ PUSH AX ” 的汇编指令,就非常方便记忆了。汇编语言解决了机器指令编写程序难度大的问题,汇编语言与人类语言更接近,便于阅读和记忆。汇编语言在通过对照表转换成机器语言(二进制)。
通过上面的介绍后,总结如下
1、汇编语言可以看做机器语言的一种助记符
2、软硬件的分界
3、在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。(但是很多指令集是和硬件绑定的。)
cpu的构成
在开始学习汇编之前,需要简单了解下cpu的基本构成和运行原理
CPU由运算器、控制器、寄存器 等器件组成。可以通过下图简单认识下CPU,同时示意了cpu和内存的交互。
- 运算器进行信息处理;
- 寄存器进行信息存储;存储单元之前只是寄存器,cpu很多已经支持多级的缓存。
- 控制器控制各种器件进行工作;
指令集架构(Instruction Set Architecture)
指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志。
1、复杂指令集运算(Complex Instruction Set Computing,CISC)
x86架构微处理器如
1、Intel的Pentium/Celeron/Xeon与AMD的Athlon/Duron/Sempron;
2、以及其64位扩展系统的x86-64的架构的EM64T的Pentium/Xeon与AMD64的Athlon 64/Opteron都属于CISC系列。
主要针对的操作系统是微软的Windows。另外Linux,一些UNIX等都可以运行在x86(CISC)架构的微处理器。
2、精简指令集运算(Reduced Instruction Set Computing,RISC)
RISC这种指令集运算包括
1、HP的PA-RISC,
2、IBM的PowerPC,
3、Compaq(被并入HP)的Alpha,
4、MIPS公司的MIPS,S
5、UN公司的SPARC等。
只有UNIX,Linux,MacOS等操作系统运行在RISC处理器上。
3、其他指令集
3、显式并行指令集运算(Explicitly Parallel Instruction Computing,EPIC)
4、超长指令字指令集运算(VLIW)
CISC 和 RISC对比
对比内容 | CISC | RISC |
指令长度 | 变长指令集 、向下兼容 | 指令长度一致 |
指令 | 比较丰富,有专用指令来完成特定的功能 | 经常使用的指令,复杂指令通过组合来实现 |
存储器操作 | 机器的存储器操作指令多,操作直接 | 对存储器操作有限制,使控制简单化 |
程序 | 汇编语言程序编程相对简单 | 实现特殊功能时程序复杂,不易设计 |
寻址方式 | 多种寻址方式 | 支持方式少 |
性能功耗 | 功能强、面积大、功耗大 | 面积小、功耗低 |
x86 介绍
微软x86 体系结构的介绍
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/x86-architecture
x86-32 8个通用寄存器,64位扩展到16个寄存器
为什么x86长久不衰,生态环境向下兼容
寄存器分类
按照用途分类
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI), 2个指针寄存器(ESP和EBP)
6个段寄存器(CS、DS、ES、SS、FS和GS)
1个指令指针寄存器(EIP) ,1个标志寄存器(EFlags)
段寄存器
在所有的寄存器中比较难理解的是段寄存器,我们先来看为什么需要段寄存器?
给不同的程序使用不同内存避免冲突,所有对内存进行分段管理,但是为了向下键入段寄存器只有16位大小。那如何找到对应的内存地址呢?
未完待续