汇编学习 NO2

      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的指向.

                     

          

          

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值