汇编语言-王爽

1.7 CPU与存储器的读写方式是什么样的?

咱首先都知道CPU要从内存中读数据吧。

然后CPU要从内存中读数据,那CPU肯定要知道一些内存的信息吧。就像邀请女生去哪玩,你总要知道她爱玩什么吧,那我们CPU知道内存的信息有三种:
1.存储单元的地址(地址信息)
2.读还是写的命令(控制信息)
3.读或写的数据(数据信息)

以上三种信息通过总线传输,1通过地址线传输,2是控制线,3是数据线。

1.8 地址总线

地址总线的宽度决定了CPU的寻址能力。

为什么这么说?请看题:

1个拥有10根地址总线的CPU能传输多少种不同类型的数据?

问题的答案是2的10次方个,因为每一根的状态只有两种,高电平-1或者是低电平-0。

那么假如我们的CPU有N根地址线 ,那么这个CPU可以找到2的N次方个内存单元哦,所以N越大我们CPU可以找到的地址越多。

1.9 数据总线

数据总线的宽度决定了CPU传输数据的能力(一次数据传输)

一根数据总线一次可以传一个二进制数据,所以8根数据总线一次可以传一个字节的数据。

8088CPU的数据总线宽度为8,8086CPU的数据总线宽度为16

那么出个题,假设我们有十六进制数89D8H,两个CPU分别都是怎么传送的呢?

像8088第一次传D8,第二次传89

而8086直接一次就传完了,所以8086>8088,嘿嘿。

1.10 控制总线

控制总线的作用是实现CPU对外部器件的控制,因为读或者写的指令是在控制总线上传输的。

总结一下三个线:

地址总线的宽度决定了CPU的寻址能力

数据总线的宽度决定了CPU传输数据的能力(一次数据传输)

控制总线的宽度决定了CPU对外部器件的控制能力。

1.12 主板

电脑主板不知道大家见过没有,主板上的一些东西就是通过总线相连的

1.14-1.15 各类存储器芯片和内存地址空间的关系

先说结论,我们有很多不同的存储器,但是CPU只把这些存储器这些不同的存储器当做一块内存来看待。看图,可以看到有很多不同的存储器。

存储器从读写上分为两类:随机存储器(RAM)和只读存储器(ROM,显卡上的ROM称为显存)

汇编语言-王爽_第1张图片

 但是在CPU的眼里是这样的:

汇编语言-王爽_第2张图片

 可以看到CPU都把它们统一看作内存(地址空间)。

第二章 寄存器

一个CPU由运算器,控制器和寄存器构成,这些东西通过内部总线互相连接。其中寄存器是我们需要重点关注的点,因为我们可以通过写代码的方式和寄存器实现交互。然后先介绍一下CPU里的这些器件都有什么用吧。

运算器:运算器进行信息处理

控制器:控制器控制各种器件进行工作

寄存器:寄存器进行信息存储(这哥仨其实和1.7节中的功能很相像,实际上这三个东西就是对应了CPU中的三个个功能,详情见1.7节)

内部总线:连接上面的哥仨,让他们进行数据的传输。

下面来说说CPU有哪些寄存器吧。不同的CPU的寄存器的结构和个数可能有点差别,这里举8086CPU的例子,他有:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW这些种类的寄存器,之后会对这些寄存器做介绍。

2.1 通用寄存器

什么是通用寄存器?AX,BX,CX,DX这类后面带X,存放一般性的数据的就叫做通用寄存器。

顺带提一嘴,8086CPU的所有寄存器都是16位的,那么上面提到的通用寄存器就自然也是16位的了,通用寄存器如图所示:

汇编语言-王爽_第3张图片

值得一提的是,为了保证兼容性,8086CPU的AX,BX,CX,DX这些寄存器都可以分为两个独立使用的8位的寄存器来使用。

举个例子:

AX可分为AH和AL

BX可分为BH和BL,以此类推

AH对应AX中的高8位,AL对应AX中的低8位。

如图所示:

汇编语言-王爽_第4张图片

2.2 字

什么是字?

字(word)实际上就是两个字节(Byte)。

又因为一个字节可以存在8位寄存器中,因为一个位等于一个bit。

所以一个字(注意是字!不是字节)可以存在16位寄存器中并等于两个字节。第一个字节称作这个字的高位字节,第二个字节称为这个字的低位字节,如图所示:

汇编语言-王爽_第5张图片

2.3 汇编指令 mov,add

让我们看看以下几条汇编语句,看看他们分别是什么意思?

  • mov ax,18--将18送入AX寄存器--AX=18
  • mov ah,78--将78送入AH寄存器--AH=78
  • add ax,8--将寄存器AX中的数据+8--AX=AX+8
  • mov ax,bx--将寄存器BX中的数据送入寄存器AX--AX=BX
  • add ax,bx--将AX和BX中的数据相加,结果存在AX中--AX=AX+BX

还有一点关于数据过长的问题怎么解决,将会在后续进行阐述。

在进行运算的时候需要注意,指令的两个操作对象的位数应当是一致的。下面是错误示范:

例如:mov ax,al(在16位寄存器和8位寄存器中传送数据)

mov al,20000(一个8位寄存器最大只能存255的数据,即2的8次方)

add al,100H(将一个高于8位的数据加到一个8位寄存器中)

2.4 物理地址

之前我们说到的那张图,如图:

汇编语言-王爽_第6张图片

CPU连接的RAM啊,ROM,RAM等等之类的东西,我们都把他们当作一块内存单元(就是途中的地址空间)。

那么你CPU要访问这块内存单元,那么你CPU肯定要生成一个地址吧,这个CPU内部生成的地址就叫做物理地址。

2.5 16位结构的CPU

什么是16位结构的CPU呢?

概括一下,16位的CPU,能够一次性处理,传输,暂时存储16位的地址,这个也正好对应CPU的三个功能(1.7以及第二章中有提到)。

处理的工作是运算器做的。

暂时存储的工作是寄存器做的

传输则指的是寄存器和运算器之间的通路

2.6 8086CPU给出物理地址的方法

因为之前说到,物理地址是我们CPU内部生成的,所以下面就来介绍一下CPU是怎么生成这个物理地址的。

汇编语言-王爽_第7张图片

1)这个其他部件是CPU中的,CPU的其他部件将自己内部生成的16位段地址和16位的偏移地址送入地址加法器

2)重点!地址加法器采用段地址×16+偏移地址=物理地址得到物理地址

3)地址加法器通过内部总线将20位物理地址送入输入输出控制电路,然后再从20位地址总线将地址传到内存。

本章重点,敲黑板!物理地址=段地址×16+偏移地址。

2.8 段的概念

2.9 段寄存器

还记得这幅图吗,这幅图中有一个其他部件。这个其他部件提供了段地址和偏移地址。那么提供了段地址的就是我们的段寄存器,提供了偏移地址的就是我们的IP寄存器

顺带一提,8086CPU中有四个段寄存器:CS,DS,SS,ES

2.10 CS和IP

CS和IP是所有寄存器中最重要的两个,因为他们两个指定了CPU要读取指令的地址。

假设我们的CS中的内容为M,IP中的内容为N,那么我们之前说到的物理地址=(段地址×16)+偏移地址,其中段地址就对应M,偏移地址就对应N。

2.11 修改CS丶IP的指令

先说结论:

8086CPU中大部分寄存器的值,都可以通过mov来改变,但是无法改变CS,IP中的值,mov指令又称为传送指令

那么如果要修改我们CS,IP中的值,需要使用指令:jmp指令,jmp指令又称为转移指令

①使用jmp指令同时修改CS和IP的形式为:

        jmp段地址:偏移地址

例如jmp 2AE3:3

②仅修改IP的地址:

        jmp 某个合法寄存器

例如jmp ax,IP寄存器中的值会被修改为IP的

2.12 代码段

第三章 寄存器(内存访问)

本章将从内存访问的角度去学习几个寄存器

3.1 内存中字的存储

如图所示:我们的每一个块被称作一个内存单元,一个内存单元等于一个字节(8bit),又因为一个字等于两个字节,所以我们图中两块才组成一个字。

假设我们用0,1两块存储一个字,那么0号是低地址单元,1号是高地址单元。

这里王爽介绍了一个概念:字单元,字单元即是由两个图中块(内存单元)的东西。

3.2 DS和

你可能感兴趣的:(汇编语言,c++)