汇编语言学习笔记--为考试过级

先讲讲计算机单位概念吧:

  计算机最小单位是bit,也就是一个二进制位(只有0或1的表示),相当于一根导线,电有正负级,正级为0 负级为 1.  但在内存单元中,我们是按字(byte)节来形容一个单元的,也就是说一个内存单元表示8个bit的连续空间.

     8bit=1byte,通常也会这样标记 8b=1B  byte用大写B表示。     1024byte=1KB      1024KB=1MB      1024MB=1GB       1024GB=1TB

     8088 属于8位结构,8086 是16 位结构  也是指一次性只能处理16个bit的数据,2个字节(byte).

现只讲8086 cpu:

   8086虽然是16位结构,但它的地址总结却是20位(相当于有20根地址导线,用来传送地址信息的,以后会讲的,先别急) 那问题来了,20位地址总线能表示多大数字呢?

        答案是1M。我们来分析:

        1根数据线能表示0,1 两种状态,2根能表示 2^2字次=4 如(00,01,10,11),3根2^3次方=8 依次类推 16根 2^16次方=65536    20根 2^20次方1048576。   其实以上这些数就表示20位地址总线能表示出1048576多个内存单元(byte)。由于-个内存单元里可以放8bit,也就是一个字节。因此, 20位地址总线的按字节算,最大能访问1048576除1024byte=1024KB=1MB的内存大小。再深一步理解,也就指8086的cpu电脑所配制的内存容量最大只能是1MB大小,    如果配置现在的1G内存,那就是杀鸡用牛刀,太浪费了。

    所以,8086cpu是16们结构,也就指一次性只能传送2个字节,但地址总结却有20位,如何实现一次性传送20位的地址呢? 所以8086cpu在设计时考虑了解决方案。用换算的方式来解决。

               公式:【物理地址=段地址*16+偏移地址】

好,我们来详细分析这个公式:

    正常情况下我们习惯用10进制来表示一个数,如果想让一个数进一位的话,我们通常是在这个数上*10  (10*10=100)那16进制想进一位也是一样*16.    好,看公式,为什么要段地址*16呢?就是想进一位,(有点废话)。 由于cpu只能表示2个字节,所以以16位的表示范围就只能在 0000H~FFFFH之间,这里H表示16进制符号,不用我说吧。如果要表示成20位,所以要进一位。好,再回过头来看cpu是如何处理的,段地址先传给cpu 再把偏移地址传给cpu ,cpu再用以上公式计算得出一个20位的地址,这个地址就是要访问的内存地址。计算方式如下图

                          例:段地址:1000H    编移地址:0001H 

                          1000H*16=10000H

                                      +    0001H

                                       ----------------

                                     结果 10001H

  那么计算出的10001H就是20位的物理地址,说到这里也许会出现很多疑问,没关系,下次我会深入讲解每个问题,以上都是本人遇到的所有困惑,后来深入深理后才得知。

 

                          

               

                  

posted @ 2010-07-06 10:14  你的影子  阅读(185)  评论(0编辑  收藏  举报