《汇编语言》学习笔记——基础知识
0x01 基础知识
1.1 机器语言
- 机器语言是机器指令的集合。
- 机器指令是一列二进制数字,计算机将其转变为一列高低电平,使得计算机的电子器件受到驱动,从而完成运算。
上述计算机的功能由CPU(中央处理单元)来完成,是一种微处理器。
- 由于硬件设计和内部结构不同,就需要不同的电平脉冲控制,所以每一种微处理器都有自己的机器指令集,也就是机器语言。
1.2 汇编语言的产生
由于机器语言难以辨别和记忆,汇编语言产生了。
- 汇编语言的主体的汇编指令。
- 汇编指令是机器指令便于记忆的书写格式。
操作:寄存器BX的内容送入AX。
机器指令:1000100111011000
汇编指令:mov ax, bx
- 计算机只能读懂机器指令,故需要将汇编指令转换为机器指令。
- 编译器负责将程序员写出的汇编程序编译为机器码,再由计算机最终运行。
1.3 汇编语言的组成
- 汇编指令(核心)
- 机器码的助记符,有对应的机器码。
- 伪指令、其他符号(+、-、*、/)
- 由编译器执行,没有对应的机器码。
1.4 存储器
- CPU是计算机的核心运算部件,需要向其提供数据和指令。
- 数据和指令存放在存储器(内存)中,故需要了解如何在CPU和内存之间交换信息。
磁盘的数据和程序需要先读入内存才能进而被CPU使用。
1.5 指令和数据
- 指令和数据是应用上的概念,本质都是二进制信息,没有区别。
1000100111011000 -> 89D8H(数据)
1000100111011000 -> mov ax, bx(指令)
1.6 存储单元
- 存储器被分为若干个存储单元。
- 每个单元从0开始编号;
- 存储器的容量是以字节为最小单位计算的。
磁盘的容量单位同内存一样。
1.7 CPU对存储器的读写
-
CPU读写数据时必须和外部期间进行三类信息交互。
- 地址信息:存储单元的地址。
- 控制信息:器件的选择、读或者写的命令。
- 数据信息:读或者写的数据。
-
CPU通过总线和其他芯片传输信息。
- 总线就是一根根导线的集合。
- 从逻辑上分为:地址总线、控制总线和数据总线。
-
CPU从内存中读/写数据的过程。
- CPU通过地址线发送要读写的地址;
- CPU通过控制线发送读/写的命令;
- 内存和CPU通过数据线交互数据:
- 读:内存向CPU传输目的地址的数据。
- 写:CPU向内存传输要存入到目的地址的数据。
1.8 地址总线
- CPU是通过地址线来指定存储单元。
- 一个CPU有N跟地址线则称其地址总线的宽度为N。
- 此时CPU可以表示2的N次方个信息,故最多可以寻址2的N次方个内存单元。
1.9 数据总线
- CPU和内存之间的数据传输是通过数据总线完成的。
- 数据总线的宽度决定了数据传输速度。
- 8根数据总线一次可以传送1个字节数据;
- 16根数据总线一次可以传送2个字节数据。
1.10 控制总线
- CPU对外部器件的控制是通过控制总线完成的。
- 控制总线是一些不同控制线的集合。
- 控制总线的宽度决定了CPU对外部器件的控制能力。
1.11 内存地址空间
- 地址总线宽度决定可寻址的内存单元,构成CPU的内存地址空间。
1.12 主板
- 每个电脑都有个主板,放置核心器件和一些主要器件。
- 器件之间通过总线相连。
- 这些器件包括:CPU、存储器、外围芯片组、扩展槽等。
- 扩展槽上一般有RAM内存条和各类[接口卡](#1.13 接口卡)。
1.13 接口卡
- CPU不能直接控制外部设备,比如显示器、音响、打印机等。
- CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设。
1.14 各类存储器芯片
- 每个电脑装有多个存储器芯片,这些芯片物理上是独立的。
- 从读写属性上分为随机存储器(RAM)和只读存储器(ROM)。
- 随机存储器:可读可写,掉电后内容丢失。
- 只读存储器:只读,关机后内容不丢失。
- 从功能和连接上分为以下几类:
- 主存储器
- 存放CPU使用的绝大部分程序和数据。
- 由装在[主板](#1.12 主板)上和扩展槽两个位置上的RAM组成。
- 装载BIOS(基本输入输出系统)的ROM
- BIOS是由主板和各类接口卡厂商提供的软件系统,可以利用硬件设备进行最基本的输入输出。
- 接口卡上的RAM
- 某些接口卡需要对大批量输入、输出数据进行暂时存储,故在其上装RAM,例如显存。
- 主存储器
1.15 内存地址空间
- 存储器的两个相同点
- 都和CPU总线相连。
- CPU都是通过控制线发出读写命令。
- CPU操控存储器时,将它们都当作内存对待,把他们看作一个若干存储单元组成的逻辑存储器。
每个物理存储器在逻辑存储器中占有一个地址段。
- 基于硬件系统编程时,必须知道系统中的内存地址空间分配情况。
- 向某个存储器读写数据时,必须知道其第一个单元的地址和最后一个单元的地址,才能保证读写到目的存储器。
- 不同计算机系统的内存地址空间分配情况不同。