汇编语言有助于我们理解高级语言,了解基于内存地址的内存操作,建立指针与实际内存单元之间的思维映射
C语言中的数据类型,形参实参,函数调用,全局变量,局部变量等内容都与之相关,通过学习汇编语言的操作关联,从而形成具体映像,有助于我们更深入地理解一系列高级语言,通过多方面穿插,交互,便于我们搭建计算机知识体系
汇编语言本身也与嵌入式编程,硬件,跟踪,调试工具,反汇编,解锁解密,病毒等领域有着密不可分的联系
Assembly Language 是各种CPU提供的机器指令的助记符的集合,可以直接控制硬件系统进行工作,是数据结构、操作系统、微机原理的重要基础,同时也是人与计算机沟通的最直接的方式,描述了机器最终要执行的指令序列
在学习过程中,我们要注重底层编程的体验,理解机器运行程序的原理
体验裸机环境,在没有操作系统的环境直接对硬件编程
机器语言
机器语言是机器指令的集合,而机器指令是一台机器可以正确执行的命令,是一列二进制数字
计算机将之转变为一列高低电平,使计算机的电子器件受到驱动进行运算
早期计算机(也就相当于现在PC的芯片,也即CPU Central Processing Unit 中央处理单元)的功能就是执行机器指令,进行数字运算
之后遇到的每一种微处理器的硬件设计和内部结构有所不同,需要不同的电平脉冲控制,所以不同微处理器都有自己的机器指令集(机器语言)
汇编语言产生
1000100111011000是一条机器指令,用来把寄存器BX的内容送到AX中
mov ax,bx则是其所对应的汇编指令
寄存器: CPU中存储数据的器件
编译器: 将汇编语言写出的源程序用汇编编译器编译为机器码,由计算机最终执行
汇编语言组成
汇编语言的三种指令:
- 汇编指令:机器码的助记符
- 伪指令:无对应机器码,由编译器执行,计算机不执行
- 其他符号:+ - * / ,无对应机器码,由编译器识别
存储器与存储单元
指令和数据在 存储器(内存) 中存放
磁盘上的数据或程序必须读取到内存中才能被CPU使用
存储器被划分为存储单元,从0开始顺序编号
电子计算机最小信息单位 bit ,也即一个二进制位
8 个 bit 组成一个 Byte
微型机存储器的存储单元可以存储一个Byte也即 8 个二进制位(bit)
微机存储器(内存)容量 以 Byte 为最小单位计算
微机常用计量单位
1KB = 1024B 1MB = 1024 KB 1GB = 1024 MB 1TB = 1024 GB
指令与数据 CPU对存储器的读写
CPU要从内存 (存储器) 中读数据,首先要指定存储单元的地址。也就是说它要先确定它要读取哪一个存储单元中的数据。就像在一-条街上找人,先要确定他住在哪个房子里。另外,在一台微机中,不只有存储器这一种器件。 CPU在读写数据时还要指明,它要对哪一个器件进行操作,进行哪种操作,是从中读出数据,还是向里面写入数据。可见,CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行下面3类信息的交互。
- 地址信息:存储单元的地址
- 控制信息:器件选择,读写命令
- 数据信息:读写的数据
电子计算机能处理,传输的都是电信号,在计算机中通常用总线来传输这些电信号
总线:
在计算机中连接CPU和其他芯片的导线的集合
根据传输信息的不同,总线分为三类:
- 地址总线:CPU通过地址线将地址信息发出(图中为3号单元)
- 控制总线:CPU通过控制线发出内存读写命令,选中并通知存储器芯片
- 数据总线:将数据读入CPU或写入3号单元
要让一个计算机/微处理器工作,应输入驱动它进行工作的电平信息(机器码)
地址总线
用于指定存储器单元
一根导线传送的稳定状态只有两种:高电平/低电平,二进制表示为1/0
一个CPU有N根地址线,也即该CPU的地址总线宽度为N 最多可以寻找2的N次方个内存单元,也即其寻址能力为 2N Byte
数据总线
数据总线的宽度决定了CPU和外界的数据传送速度,如16根数据总线一次可传送2个字节
控制总线
控制总线是一些不同控制线的集合,其宽度决定了CPU对外部器件的控制能力
内存地址空间
内存地址空间是由CPU地址总线宽度所决定的可寻址内存单元
CPU操作存储器时把他们都当作一个有若干内存单元组成的逻辑存储器****(内存地址空间)
内存地址空间的大小受CPU地址总线宽度的限制
主板
分为核心器件和主要器件,相互之间通过外部总线(地址总线,控制总线,数据总线)相连
有CPU,存储器,外围芯片组,扩展插槽(一般插入内存条以及各类接口卡)
接口卡
外部设备(不能直接由CPU控制,如显示器,音响,打印机等)
直接控制这些设备的是插在主板上的扩展插槽上的接口卡
CPU通过总线直接向接口卡发送命令,而后接口卡据CPU命令控制外设
各类存储器芯片
读写属性上分为:随机存储器RAM 只读存储器ROM
RAM可读可写,必须带电存储
ROM只读不写
而这些存储器在功能和连接上又可分为以下几类:
- 主随机存储器(用于存放供CPU使用的绝大多数程序和数据 一般由装在主板上的RAM和插在扩展插槽中的RAM组成)
- 装有BIOS的ROM
(Basic Input/Output System 基本输入输出系统 BIOS是由主板和各类接口卡(显卡,网卡)厂商提供的软件系统,可以通过它利用硬件设备进行最基本的输入输出) - 接口卡上的RAM
(某些接口卡需要对大批量输入、输出数据进行暂时存储,在其上装有RAM。最典型的是显示卡上的RAM,一般称为显存。显示卡随时将显存中的数据向显示器上输出。换句话说,我们将需要显示的内容写入显存,就会出现在显示器上)
内存地址空间
最终运行程序的是CPU,我们用汇编语言编程的时候,必须要从CPU的角度考虑问题。
对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限
制。这个逻辑存储器即是我们所说的内存地址空间。
参考资料 《汇编语言(第3版)》王爽著