汇编-基础

开始学习汇编了.

0 概念

关于计算机编程语言,可粗略的分为低级语言和高级语言.那么什么是低级语言.大多情况下,低级语言就是指机器语言(机器码)和汇编语言.

最低级的语言自然是机器语言,也就是机器码,它是由0和1组成,而且CPU能识别的也就只有0和1组成的高低位电平脉冲,它具有极高的效率.因此无论用什么语言去写,最终都会被翻译成0和1,只是其中转换的复杂度与效率的高低问题.

早期的程序员将0和1的程序代码打在纸带或卡片上,1打孔,0不打孔,然后通过纸带机输入到计算机进行运算,但机器码是反人类的,用这种语言写程序,简直就是在浪费生命,因此他们发现了这问题.于是更稍稍便利的语言便出现了,那就是汇编语言.

汇编是除了机器码外,效率最高的语言了,它直接对CPU进行操作.

1 组成

汇编语言由三种指令组成:
– 汇编指令: 机器码的助记符,有分别对应的机器码.
– 伪指令: 没有对应的机器码,由编译器执行,计算机不会执行.
– 其他符号: 如+,-,*,/等,由编译器识别,无对应机器码.

汇编语言的主题是汇编指令,因此其核心便是汇编指令,它决定了汇编语言的特性.

2 存储

存储器是用于指令和数据的存放的地方,在一个计算系统的任何部位都有存储器,包括CPU,主板,显卡,声卡.存储器也可以指内存或磁盘,但是CPU若想读取磁盘上的指令和数据,要先将其从磁盘读到内存,最后加载到CPU内部.

指令和数据在内存或磁盘上是没有任何区别的,他们都是二进制的信息.它们的意义和区别只在CPU在工作时,才会体现出来.

存储器按类型可分为只读存储器(ROM)和随机存储器(RAM).

一个存储器可被分为若干个存储单元,每个单元从0开始顺序编号.计算系统的最小信息单位是bit(比特),即一个二进制位.

8bit组成1Byte,即1Byte能保存8个二进制位.通常计算机存储还会用以下容量计算单位:

1KB=1024Byte
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
1EB=1024PB
1ZB=1024EB
1YB=1024ZB
1BB=1024YB

在一个计算机系统中,CPU要想对数据读写,必须要和其他芯片进行以下三类信息交互:
1. 地址信息 (地址总线AB)
* 总线的位宽指的是总线能同时传送的二进制数据的位数,即数据总线的位数,它决定了CPU可直接寻址的内存空间大小,即32位/64位等总线宽度的概念,一个32位单元位址总线可以寻址到 4,294,967,296 = 4 GB 的位址.总线的位宽越宽,每秒钟数据传输率越大,总线的带宽越大.
* 总线的工作频率以MHZ为单位,工作频率越高,总线工作速度越快,总线带宽越大.
* 总线的带宽指的是单位时间内总线上传送的数据量,即每钞钟传送最大稳态数据传输率.与总线密切相关的两个因素是总线的位宽和总线的工作频率,它们之间的计算方法:总线的带宽=总线的工作频率*总线的位宽/8 .例如64位/800MHz的前端总线,它的数据传输率就等于64bit×800MHz÷8=6.4GByte/s
* 地址总线总是单向三态的.
2. 控制信息 (控制总线CB)
* 控制总线主要用来传送控制信号和时序信号,它是各种信号线的集合,是计算机各部件之间传送数据、地址和控制信息的公共通道.
* 其特点是:存在单向、双向、双态等种形态,是总线中最复杂、最灵活、功能最强的,其数量、种类、定义随机型不同而不同.
3. 数据信息 (数据总线DB)
* 数据总线是CPU与内存或其他器件之间的数据传送的通道.
* 数据总线的宽度决定了CPU和外界的数据传送速度.
* 每条传输线一次只能传输1位二进制数据.

在物理上,这些是一根根导线的集合.但在逻辑上则按此如此三种总线分类,按照CPU内外分为内部总线和外部总线.

假如CPU要从某个内存中的某个存储单元读取信息,则其流程如下:

CPU->Memory: 通过地址总线发送内存该存储单元地址.
CPU->Memory: 通过控制总线向内存发送读取数据命令.
Memory-->CPU: 通过数据总线返回该存储单元内的数据.

写操作类似:

CPU->Memory: 通过地址总线发送内存该存储单元地址.
CPU->Memory: 通过控制总线向内存发送写入数据命令.
CPU->Memory: 通过数据总线向内存发送该写入存储单元内的数据.