指令和数据
指令和数据是应用上的概念。在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。CPU在工作的时候把有的信息看作指令,有的信息看作数据,为同样的信息赋予不同的意义。
对存储器的读写
存储器被划分为多个存储单元,存储单元从零开始顺序编号。这些编号可以看作存储单元在存储器中的地址。
cpu想要从内存中读数据首先要确定要读取哪一个存储单元的数据。
然而在一台微机中不只有存储器这一种器件。CPU在读写数据时还要指明,对哪一个期间进行操作,进行那种操作,是读还是写。
总线
(1)地址总线:控制了CPU最多可寻找的内存单元(传输地址的的大小为N位)。
(2)数据总线:决定了CPU和外界的数据传送速度(传送数据的大小为N位)。
(3)控制总线:决定了CPU对外部器件的控制能力。
内存地址空间
在计算机中有些在物理上独立的存储器,但是他们都和CPU总线相连,CPU对他们进行读或写的时候都通过控制总线完成。所以CPU在操作他们的时候,把他们也当作内存来对待,把他们总的看做一个由若干存储单元组成的逻辑存储器。而这个逻辑存储器就是我们所说的内存地址空间。
我们在基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存空间分配情况。要向显存中写入数据,必须知道现存在内存地址空间中的地址。
内存地址空间的大小首CPU地址总线宽度的限制。如地址总线宽度为20,可以传送2的20次方个不同的地址信息。所以其内存地址空间大小为1MB,同理,32位机的内存地址空间最大为4GB。
对CPU来说,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。
寄存器
通用寄存器:
8086CPU的所有寄存器都是16位的,可以存放两个字节。AX,BX,CX,DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器(但是CX还有对loop循环判断的作用)。
八个通用寄存器也可以分开使用,如AL,AH,BL,BH,CL,CH,DL,DH这八个8位的寄存器,其中结尾为L的对应相应16位寄存器的低8位,H对应16位寄存器的高8位。
段寄存器:
CS,DS,SS,ES
CS:代码段寄存器 IP:指令指针寄存器
寻址方式CS:IP :CS * 16 + IP
8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的地址。
物理地址 = 段地址 * 16 + 偏移地址
DS:数据段寄存器,指出当前程序使用的数据所存放段的最低地址,即存放数据段的段基址。
eg:mov ax,[bx] ;相当于 ax <- ds:bx,ds就是其默认的数据段寄存器
mov ax,[0] ;在debug中相当于 ax <- ds:0,在源代码中相当于 ax <- 0
mov ax,ds:[0] ;则相当于ax <- ds:0
DEBUG调试命令
R:查看,改变CPU寄存器内容。
D:查看内存中的内容。
E:改写内存中的内容。
U:查看内存中机器码的含义。
T:执行一条或多条指令。
A:以汇编的形式在内存中写入机器指令。
P:一次执行完循环,DEBUG会重复执行循环中的指令,直到(CX=0)。
G:执行到对应的地址为止。