本篇文章是汇编语言(王爽)一书的学习笔记,对应书中的第一章,基础知识。
汇编语言,就是直接对硬件进行操作的语言,由机器语言发展而来。早期的程序员都是通过0和1组成的代码来控制计算机的行为,这种方式书写和维护成本巨大,一个hello world都是由几十行0和1组成,错把一个0写成1非常难遇排查,因此,汇编语言应运而生。
汇编语言把难以记忆的机器语言用接近自然语言的形式表现出来,便于书写和记忆,例如
将寄存器BX的内容送入AX中
机器语言:1000100111011000
汇编语言:mov ax,bx
显然,记住mov ax,bx要比0,1容易的多。可是,计算机只能识别0和1,必须通过一种方式把汇编语言翻译成计算机可以识别的机器语言,它就是编译器。它就像现实中的翻译官,把外国语言翻译成汉语。编译相关知识可以参考编译原理
汇编语言主要由三部分组成
1.汇编指令:有对应的机器码,由计算机执行,例如mov
2.伪指令:没有对应的机器码,由编译器执行,为汇编代码编译时提供信息,累死C语言头文件
3.其他符号:+、-、/等
CPU总是从内存中读取数据来执行,如果CPU是人类的大脑,内存就是大脑中的记忆。内存,是由很多存储单元组成,1个存储单元是1Byte,1Byte又等于8bit,即8个二进制位,也就是8个0或1。存储单元从0开始编号,如果有128个存储单元,编号就是0~127,容量是128B,可以读作128字节。我们现在用的内存大多是512M的,大家可以算算有多少个存储单元?
CPU与内存之间的数据传输主要通过3种导线,即地址总线、数据总线、控制总线。
地址总线:传递内存地址信息即存储单元的编号
数据总线:CPU与存储单元的数据数据传输
控制总线:传递读写命令及与外部器件的交互
CPU根据地址总线上的信息找到对应的存储单元,地址总线的宽度决定了CPU可以找到的存储单元数目。一根导线可以代表的状态只有两种即0和1,所以一个有10根地址总线的CPU的寻址能力是2的10次方即可以找到2的10次方(1024)个存储单元。访问存储单元1时地址总线内的数据如图
CPU与内存之间的数据传递是通过数据总线完成的,与地址总线一样,数据总线的宽度决定了CPU一次可以读取或写入的数据大小。8根数据总线一次可以传输1字节的数据,16跟数据总线一次可以传输2字节的数据。8跟数据总线传递数据11的情形
CPU通过控制总线发出对内存的读或写的命令,也是通过它与系统中的其他器件进行交互。
CPU通过内存地址找到相应的存储单元,这个地址指的是逻辑地址,是虚拟的逻辑存储器。喜欢DIY的朋友应该很了解,电脑的主板除了CPU之外还有很多的其他的器件,像显存、ROM等。这些存储器在物理上独立的,他们通过总线与CPU相连,CPU将这些存储器看成一个整体的内存地址空间进行编号统一管理。
CPU为不同的存储器划分不同的地址段,例如将0~7FFFH划分为主ROM地址空间,8000H~9FFFH为RAM地址空间。