1.CPU是由运算器,控制器,寄存器等器件组成.
2.内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其它器件的关联.
3.运算器进行信息处理;寄存器进行信息储存;控制器控制各种器件进行工作.
4.8086CPU有14个寄存器,这些寄存器是AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS, ES,PSW.
5.8986CPU的所有寄存器都是16位,可以存放两个字节.
6.AX,BX,CX,DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器.
7.8086CPU中的AX,BX,CX,DX这4个寄存器都可以分为两个独立使用的8位寄存器,依次为AH和AL,BH和BL,CH和CL,DH和DL.
8.8086CPU可以一次性处理两种尺寸的数据,byte(字节,8位)和word(字,16位).
9.一条汇编指令或一个寄存器的名称是不区分大小写的
10.十六进制的数的一位相当于二进制数的四位
11.在进行数据传送或运算时,要注意指令的两个操作对象的位数是一致的.比如,mov ax al是错误的
12.CPU访问内存单元时,要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间,每一个存储单元在这个空间都有唯一的地址,这个地址即是物理地址.
13.16位机的概意:①.运算器一次可以处理16位的数据
②.寄存器的最大位数是16位
③.寄存器和运算器之间的通路为16位
14.内存单元的地址在送上地址总线之前,必须在CPU中处理,传输,暂时存放,对于16位CPU,能一次性处理,传输,暂时存储16位的地址.
15.8086CPU有20位地址总线,可以传送20位地址,达到1M的寻址能力,而8086CPU只能送出16位的地址,表现出的寻址能力只有64KB.
16.8086CPU用"物理地址=段地址X16+偏移地址"的方法用段地址和偏移地址合成物理地址.也就是"基础地址+偏移地址=物理地址"的寻址模式.
17.一个X进制的数据左移1位,相当于乘以X.
18.内存并没有分段,段的划分来自于CPU,在编程需要时,将若干个地址连续的内存单元看做一个短,用偏移地址定位段的起始地址,用偏移地址定位段中的内存单元!
19.段地址X16必然是16的位数,所以一个段的起始地址也一定是16的倍数,偏移地址为16位,16位的地址寻址能力是64KB,所以一个段的长度最大为64KB
20.总结:CPU访问内存单元时,必须向内存提供内存单元的物理地址,8086CPU在内部用段地址和偏移地址移位相加的方法来形成最终的物理地址.
仅仅通过偏移地址来进行寻址,最多可定位64KB个内存单元,在8086CPU中,存储单元用两个元素来描述,即段地址和偏移地址
21.8086CPU中有4个段寄存器,CS,DS,SS,ES.
22.CS和IP是8086CPU中最重要的寄存器,它们指示了CPU当前读取之类的地址,CS为代码段寄存器,IP是指令寄存器,在8086CPU机中,任意时刻,CPU将CS:IP指向的内容当做指令执行.
23.8086CPU执行工作过程:
①.从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲
器
②.IP=IP+所读取指令的长度,从而进入下一条指令.
③.执行指令.转到(1),重复这个过程
24.CPU将CS:IP指向的内存单元中的内容看作指令.
25.mov指令不能用于设置CS,IP的值.
26.jmp指令:jmp 段地址:偏移地址---用指令给出的段地址修改CS,偏移地址修改IP
jmp 某一合法寄存器 相当于mov IP,ax
27.代码段:CPU只认CS:IP,CPU只将CS:IP指向的内存单元中的内容作为指令,所以要让CPU执行我们放在代码中的指令,必须要将CS:IP指向所定义的代码段中的第一条指令的地址.
28.8位的是字节,16位的是字,CPU中,用16位寄存器来存储一个字,高8位存放高字节,低八位存放地位字节.计算机最小的存储单位是位.
字单元:即存放一个字型数据(16位)的内存单元,高地址内存单元中存放字型数据的高位数据,低地址内存单元中存放字型数据的低位字节.
29.mov指令的两个作用:①.将数据直接送入寄存器 ②.将一个寄存器中的内存单元送入另一个寄存器.
30."[…]"表示一个内存单元,"[0]"表示内存单元中的偏移地址,8086CPU自动获取ds中的数据位内存单元的段地址.
31.8086CPU不支持将数据直接送入段寄存器中
32.8086CPU是16位数据线,所以一次传送可以传送一个字的数据
33.mov add sub指令:mov 寄存器 数据 mov 寄存器 内存单元
mov 寄存器 寄存器 mov 内存单元 寄存器
mov 段寄存器 寄存器
34.小结:字在内存中存储时. 要用两个地址连续的内存单元存放,字的低位字节存放在低地址单元中,高位字节存放在高地址中
用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在ds寄存器中.
[address]表示一个偏移地址为address的内存单元
在内存和寄存器之间传送字型数据的时候,高地址单元和高8位寄存器,低地址和低8位寄存器相对应.
35.栈的机制:Last in first out.
36.push ax---将寄存器ax的数据放入栈中;pop ax---从栈顶取出数据送入ax当中
37.8086CPU的入栈和出栈都是以字为单位
38.任意时刻,SS:SP指向栈顶元素,这样从而得知栈顶的位置
push ax的执行步骤:(1).SP=SP-2,SS:SP指向当前的指向栈顶前面的单元,以当前栈顶前面的元素为新的栈顶.
(2).将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶
pop ax的执行步骤:(1).从SS:SP中读取数据,并且存放到ax中
(2).SP=SP+2
39.当栈为空的时候,栈中没有元素,也就不存在栈顶元素,所以SS:SP只能指向栈的最底部下面的单元.该单元的偏移地址为栈最底部的字单元的偏移+2.
40.当栈满的时候再使用push指令入栈,或栈空的时候再使用pop指令出栈,都将发生栈顶超界的问题.
41.pop,push指令:push/pop 寄存器 push/pop段寄存器 push/pop内存单元,可以在push/pop指令中只给出偏移地址,而段地址CPU从ds中获取.
42.mov指令只需一步操作,就是传送数据,而push,pop指令却需要两步,push指令先改变SP(SP=SP-2),然后再向SS:SP传送数据,执行pop时,先读取SS:SP中的数据,之后再改变SP的值.
43.栈的小结:①.在SS:SP中存放栈顶的段地址和偏移地址
②.push指令的执行步骤:SP=SP-2;向SS:SP指向的字单元中输入数据
③.pop指令的执行步骤:从SS:SP执行的字单元读取数据;SP=SP+2
④.8086CPU只记录栈顶,栈空间的大小的由我们自己管理.
44.段的综述:
①.数据段:段地址放在DS中,用mov等访问内存单元的时候,CPU就将我们定义的数据段中的内容当做数据访问
②.代码段:段地址放在CS中,将偏移地址放在IP中,
③.栈段:段地址放在SS中,偏移地址放在SP中
45.一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,关键是CPU中寄存器的设置,即CS,IP,SS,SP,DS的指向.