本节内容:内存的读写。
■内存的线性地址:CPU的寻址范围由地址总线的数量决定。8086计算机有20根地址线,其寻址范围为0~220-1,即1M大小的空间,分配0~220-1线性地址编号,每个地址对应一个字节的存储单元。
■指令的解析:一条汇编指令对应一条机器指令(也称为硬编码),每条机器指令可以分解为若干微指令。
■CPU对内存的读写过程:地址线加载地址、控制线传送控制指令、数据线传输数据。
■机器码:又称为硬编码或机器指令,与汇编指令一一对应。对应关系可以查阅Intel或AMD技术白皮书的硬编码表。
1.4.1 内存的线性地址
假如计算机有8根地址线:
最多可以有0~255共计256个地址编号,每个地址编号对应8个数据位,即一个字节,那么该计算机的最大内存寻址范围是28 ,即256个字节。如表1-3所示:
表1-3 8根地址线可以表示的地址编号
注意
在计算机中,是从0开始计数的,8个数据位,即第0位到第7位。表1-3中,左边为高位,右边为低位。
提示
每根地址线有低电平和高电平两种状态,分别用0和1表示,使用8根地址线编写地址标号,即代表每个地址编号由8个数据位组成,8位0和1的任意组合刚好是28,即256种组合。内存以字节为单位,每个地址标号代表一个字节,即内存的最大寻址范围就是256个字节。
计算机的内存是以字节为单位的线性地址空间,如表1-4所示:
表1-4中假设有8根地址线,即地址编号为8位,最多可以编写256个地址编号,用16进制数表示,即地址0~FFH。其中地址3处对应的存储空间存放的数值为十六进制数12H。
同理,如果有20根地址线,寻址范围是220,即1MB,32根地址线,寻址范围就是232即4GB。
1-4 线性内存
1.4.2 指令解析
■MOV AX,[3];表示将内存地址3处对应的存储单元存放的数据读到AX寄存器中。
需要三个条件:
●存储单元的地址(地址信息)
●器件的选择,读或写的命令(控制信息)
●读或写的数据(数据信息)
■CPU要从内存中读取数据
首先要知道存储单元的地址。就是要确定从哪个存储单元中读取数据。存储器被划分成很多个存储单元,从零开始按顺序编号,这些编号被看作是门牌号,方便查找,进房间找人。存储单元中要有数据,如果家里没人,即为空。
其次,在一台微机中有很多个部件,CPU读写数据时,要知道对哪个器件进行操作,进行哪种操作,是从中读数据,还是写入数据。
■信息的传输:总线
CPU是通过什么将地址、数据和控制信息传送到存储芯片的呢?
计算机中专门有连接CPU和其他芯片的导线,通常称为总线,总线是这些导线的集合,用来传送的信息皆为电信号,即高低电平,高电平为1,低电平为0。
1.4.3 CPU对存储器读写的过程
总线逻辑上分为:地址总线、数据总线和控制总线三类。地址总线加载地址编号,数据总线传输数据,控制总线加载控制命令。
图1-16描述CPU通过地址总线、数据总线和控制总线与内存连接。
图1-17描述了CPU从内存地址3对应的存储单元读取数据的过程。
图1-18描述了CPU向内存地址3对应的存储单元写入数据的过程。
图1-16 总线在逻辑上的划分
图1-17 CPU从内存地址3号单元读取数据的过程
图1-18 CPU向内存地址3号单元写数据的过程
1.4.4 机器码
要让计算机处理器工作,需要输入能够驱动它进行工作的机器码。
例如表1-6所示8086 CPU机器码:
表1-6 机器码
机器码含义:从3号单元读取数据送入寄存器AX。CPU接到机器码将完成上面所述的工作。但是机器码难于书写和记忆,所以我们使用指令助记符(汇编指令)表示。
机器码:10100001 00000011 00000000
汇编指令:MOV AX,[3]
由于汇编指令和机器码是一一对应的关系,我们只需要查表1-6就可以将汇编指令和机器码相互转换。
表1-6 汇编指令对应表
注意
X86 CPU指令集机器码(又称为硬编码),可以查阅Intel或AMD技术白皮书的硬编码表。
表1-4 中[mem8]表示8位内存操作数,[mem16]表示16位内存操作数。
本文摘自编程达人系列教材《X86汇编语言基础教程》。