计算机中有专门链接CPU和其余芯片的导线,一般称为总线。从逻辑上分为:地址总线、控制总线、数据总线。html
CPU和内存通信的过程:shell
地址总线的宽度决定CPU的寻址能力。编程
数据总线的宽度决定单次的数据传送量。markdown
控制总线的宽度决定CPU对其余器件的控制能力。架构
存储器芯片分为随机存储器(RAM)和只读存储器(ROM)。CPU在操控它们的时候,把它们总的看做一个由若干存储单元组成的逻辑存储器,这就是咱们所说的内存地址空间。app
一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。ide
寄存器是CPU中能够用指令读写的部件,咱们经过改变寄存器中的内容来实现对CPU的控制。svg
8086CPU是16位结构的CPU,结构特性有:spa
也就是说,在8086内部,可以一次性处理、传输、暂时存储的信息最大长度为16位。操作系统
8086CPU是16位架构,可是地址总线有20位,给出物理地址的方法:
物理地址=段地址 偏移地址。
8086机内存地址空间分配基本状况:00000-9FFFF是主存储器地址空间;A0000-BFFFF是显存地址空间;C0000-FFFFF是各种ROM地址空间。
段寄存器是CPU中提供段地址的部件,8086CPU有4个段寄存器:CS、DS、SS、ES,且不容许将数据直接送入段寄存器,必须用其余寄存器进行中转。
CS为代码段寄存器,IP为指令指针寄存器。在任意时刻,设CS中内容为M,IP中内容为N,8086CPU将从内存 单元(或者称为CS:IP指向的内容)开始读取并执行指令。所以8086CPU的工做过程能够描述以下:
初始时,CS=FFFFH,IP=0000H,FFFF0H单元中的指令时8086PC机开机后执行的第一条指令。
jmp
指令用来修改CS、IP的内容。
同时修改CS、IP的内容:jmp 2AE3:3
执行后:CS=2AE3H,IP=0003H。
用某个寄存器中的值修改IP:jmp ax
。
r
:查看寄存器;r ax
能够改变ax的值。
d
:查看内存;d E1:4320
查看对应地址的内存,从该地址开始列出128个字节的内容;d A:B C
查看段A:B-A:C的内存(
)。
e A:B x y z...
:从A:B开始日后修改改写内存内容;也能够提问式修改e A:B
,回车后会从A:B开始八个一行地提问;内容能够用“”括起来直接用字符串修改内存的内容。
u A:B
:将从A:B开始的内存中的机器码转换为汇编指令;u A:B C
用法与d
指令相似。
t
:从CS:IP开始执行指令。
a A:B
:从A:B开始写入汇编指令。
内存中字的存储:CPU的寄存器是16位,因为内存单元都是字节单元(8位),所以用两个地址连续的内存单元来存放一个字,字的低位字节存放在低地址单元,高位字节存放在高地址单元。由此提出字单元的概念:存放一个字形数据(16位)的内存单元,由两个地址连续的内存单元组成。咱们将起始地址为N的字单元简称为N地址字单元。
DS存放CPU要访问的数据的段地址。
mov bx,1000
mov ds,bx
mov al,[0]
复制代码
以上代码将内存1000:0中的读取到al中。将寄存器中的数据存储到内存中同理:mov [0],al
。
不能够直接将当即数存放到内存中。
al和bl作加法,仅看做8位加法,多出来的进位要舍弃。
8086CPU提供相关的指令来以栈的方式访问内存空间,所以能够将一段内存看成栈来使用。出栈、入栈操做都以字为单位。
栈顶是低位地址,栈底是高位地址,字型数据入栈时遵循正常存入内存单元时的规则。
push ax
pop ax
复制代码
分别是将ax中的数据入栈和将栈顶元素弹出并存入ax中。
段寄存器SS和寄存器SP,SS:SP指向栈顶元素。push ax
的过程:
入栈过程当中,栈顶从高地址先低地址方向增加。
当栈空时,SP指向栈底下面的内存单元。
pop ax
的过程:
若是将10000H~1FFFFH看成栈段,初始状态下SP=0。
执行mov ss,...
时其后边的指令会当即执行,且必须是mov sp,...
,这么规定便于控制栈段大小,防止有子程序调用时出错。
可执行文件包含两部分:
汇编语言源程序中,包含两种指令,汇编指令和伪指令。
tst.asm tst.obj tst.exe CPU运行。
DOS中有一个程序command.com,称为命令解释器,也就是DOS系统的shell。若是用户想要执行一个程序,则输入该程序的名称,command首先找到该文件,而后将其加载入内存,设置CS:IP指向程序的入口,此后command中止运行,由CPU运行程序。
所以每次将程序载入内存后,ds都比cs小10H。