控制总线
- 汇编指令是机器指令的助记符,同机器指令一一对应;
操作:寄存器BX的内容送到AX中
机器指令:1000100111011000
汇编指令:mov ax,bx
- 每一种cpu都有自己的汇编指令集;
- cpu可以直接使用的信息在存储其中存放;
- 在存储器中指令和数据没有任何区别,都是二进制信息;
- 存储单元从零开始顺序编号;
- 一个存储单元可以存储多个bit,及8位二进制数,一个字节;
- 每一个cpu芯片都有许多管脚,这些管脚与总线相连,也可以说,这些管脚,一个cpu可以引出三种总线的宽度标志了这个cpu的不同方面的性能:
地址总线的宽度决定了cpu的寻址能力
数据总线的宽度决定了cpu与其他器件进行数据传送时的一次数据传送量
控制总线的宽度决定了cpu对系统中其他器件的控制能力
地址总线
例题1:1个cpu的寻址能力为8kb,那么它的地址总线的宽度为多少。
答:为13,2^13=8k
例题2:下图展示了一个具有8根地址线的cpu向内存发出地址信息11时8根地址线上传送的二进制信息,则访问地址为12、13、14等的内存单元时,地址总线上传送的内容是什么?
那么由上图容易得到:
最上面为低地址线,最下面为高地址线则由地址为:
12:0011 0000
13:1011 0000
14:0111 0000
数据总线
8088cpu的数据总线宽度为8,8086cpu的数据总线宽度为16,当向内存中写入数据89D8时,下面两图分别展示了二者的数据传输情况
各类存储芯片
一台PC机中,装有多个存储器芯片,这些存储器芯片从物理连接上看是独立的、不同的器件。从读写属性上分为两类:随机存储器(RAM)和只读存储器(ROM)。随机存储器可读可写,但必须带电存储,关机后存储的内容丢失;只读存储器只能读取不能写入,关机后其中的内容不会丢失。这些存储器从功能和连接上又分为以下几类:
- 随机存储器:用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由两个位置上的RAM组成,装在主板上的RAM和插在扩展插槽上的RAM。
- 装有BIOS的ROM:BIOS是主板和各类接口卡(如:显卡,网卡等)厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。在主板和某些接口卡上茶油存储相应BIOS的ROM。例如:主板上的ROM中存储着主板的BIOS(系统BIOS);显卡上的ROM中存储着显卡的BIOS;如果网卡上装有ROM,那其中就可以存储网卡的BIOS。
- 接口卡上的RAM:某些接口卡需要对大批量输入、输出数据进行暂时存储,在其上装有RAM。最典型的是显卡上的RAM,一般称为显存。显示卡随时会将显示中的数据向显示器上输出。换句话数,我们将需要显示的内容写入显存,就会出现在显示器上。
下图为PC系统中各类存储器的逻辑连接情况。
内存地址空间
上述的那些存储器,它们在物理上是独立的器件,但它们在以下两点上相同:
- 都和CPU的总线相连。
- CPU对它们进行读或写的时候都通过控制线发出内存读写命令。
也就是说,CPU在操纵和控制它们的时候,把它们都当做内存对待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。
下图展示了CPU将系统中各类存储器看作一个逻辑存储器的情况。
CS和IP
CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器(类似程序计数器?),从名称上看,它们是与指令有关系的。
在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从M×16+N单元开始,读取一条指令并执行。
下图展示了8086CPU读取、执行指令的工作原理。
初始时,CS:2000H,IP:0000H,CPU将从内存2000H×16+0000H处读取指令执行,之后将CS、IP中的内容送入地址加法器,由地址加法器完成:物理地址=段地址×16+偏移地址,即20000H=2000H×16+0000H;物理地址之后被送入输入输出控制电路,然后输入输出控制电路将物理地址20000H送入地址总线,之后,从内存20000H单元开始存放的机器指令B8、23、01通过数据总线被送入CPU,之后指令从数据总线经过输入输出控制电路,然后被送入指令缓冲器;
CPU在工作的时候把有的信息当作指令,有的信息看作数据。那么CPU根据什么把有的信息看作指令?我们可以说,CPU将CS:IP指向的内存单元中的内容看作指令,在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码。如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过。
- mov ax,bx:把bx内容移动到ax之中
- add ax,bx:ax与bx做+运算,并将结果放到ax寄存器中
- jmp ax:修改IP的内容为ax寄存器的值
- jmp ax:bx:修改CS为ax的值,IP为bx寄存器值
代码段中的指令如何被执行呢,只要让CS:IP指向这个代码段的首地址;什么是代码段呢,即将长度N的一组代码存放在一组地址连续、起始地址为16的倍数的内存单元中,我们可以认为,这段空间是用来存放代码的。
debug的使用
- R命令查看、改变CPU寄存器的内容
-r
- D命令查看内存中的内容
-d 1000:0
结果如下
- E命令改写内存中的内容
-e 1000:0 0 1 2 3 4 5 6 7 8 9
这里修改了1000:0~1000:9单元中的内容
-e 1000:10
输入前面这段代码,按Enter,如下
debug显示起始地址1000:0010,和第一单元(即1000:0010单元)的原始内容:B8,然后光标停在“.”的后面提示输入想要写入数据,此时有两种操作,输入数据,即将该内存单元的数据由B8改为该输入数据,或者不输入数据,直接空格,则不对该内存单元改写;
-u 1000:0
显示输出3部分:每一条机器指令的地址、机器指令、及代表的汇编指令,如下图;
- T命令执行一条指令
-t=[地址]或-t
即定位到该地址,使用debug的T命令可以执行一条或多条指令,简单使用T指令,可以执行CS:IP指向指令; - A命令以汇编指令格式在内存中写入一条机器指令