zoukankan      html  css  js  c++  java
  • 物理地址 = 段地址*10H + 偏移地址

    程序如何执行:

         CPU先找到程序在内存中的入口地址 -- 地址总线

              (8086有20根地址总线,每一根可以某一时传0或1,

                20位的二进制数字可以表示的不同的数字的个数是2^20=1048576

               1048576 byte/1024=1024 KB    (注:8bit(位)=1Byte(字节) 1024Byte(字节)=1KB 1MB=1024kb=1024x1024b)

               1024KB/1024=1 MB

               所以寻址范围为2的20次方byte=1M

              )

              因此有多少根地址总线(总线宽度)决定了CPU内存寻址的范围

              以上也可以理解为:CPU是多少位的寻址就是2的位的次方,ex:32位CPU寻址范围就是2的32次方=4G

              即使此刻内存容量有8G,CPU也只能够利用当中的低4G中的内存地址,高4G地址无法寻址到

         然后通过一定的途径将程序输送给CPU存于CPU的对应的寄存器中,再去执行 -- 数据总线

         如果CPU需要控制外围设备、是加是减、或是读是写内存等 -- 控制总线

         CPU对数据的+-/*等运算 -- 运算器    

         总结:CPU的组成=寄存器+运算器+控制器+内部总线(连接各种器件在它们之间传送数据)

          控制器

              |                    |

         -------------------------------------------  内部总线

                  |                          |

             运算器                                      CPU结构图

    什么是CPU的寄存器:

        寄存器分为通用寄存器、段寄存器...

        寄存器用于存放CPU要执行的数据或指令

        例如:8086CPU的AX通用寄存器结构如下:

       

    物理地址的表示方法:

        问题:8086主板地址线20根,所以进行寻址操作一次需要传送20位的二进制数据

                    但是CPU最大一次只能够传送16位的二进制数据,那如何处理呢?

        例子:如何将 两个3位的数 进化为 一个4位数

                   ex:   23        -->          234 ×10       +           xxxx

                              ↑                                ↑                       ↑

                          偏移地址   -->    物理地址

         以上的类似实现在CPU中通过地址加法器实现:

         实际内存地址=基地址:偏移地址

         实际内存地址=基地址×16(×16进位,类似10进制中的×10进位) + 偏移地址

         demo:1402:100

                        1402H (16进制数 4*4=16位的二进制数)  ×  16    + 0100

                 即   14020H       --基地址×16

                    +    0100H       --偏移地址

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

                        14120H       --实际物理地址

    计算机中是不是这么表示的呢?

    WIN+R --> cmd,进入Widows环境下的命令行下  输入debug命令  

    1. C:Documents and SettingsAdministrator>debug  

    debug工具是DOS/Widows提供的实模式程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。

    它可以用于逐指令执行某个程序以验证程序运行的正确性,

    也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区等

    输入d命令查看寄存器的内容:

    1. -d  
    2. 0B5D:0100  02 00 EB 0E 50 B0 03 B4-FF E8 9E 00 58 EB 03 E8   ....P.......X...  
    3. 0B5D:0110  1D 01 58 C3 F9 C3 55 51-26 8A 4F 08 34 00 4C 0B   ..X...UQ&.O.4.L.  
    4. 0B5D:0120  74 0D 8D 6F 09 E8 19 04-73 08 E8 0E 00 E2 F6 F9   t..o....s.......  
    5. 0B5D:0130  EB 06 2E 89 2E 5D 91 F8-59 5D C3 26 80 7E 00 00   .....]..Y].&.~..  
    6. 0B5D:0140  74 03 45 EB F6 45 C3 2E-80 0E 56 91 10 E8 C6 FF   t.E..E....V.....  
    7. 0B5D:0150  72 4A 2E 80 26 56 91 EF-50 2E A1 59 91 2B C6 2E   rJ..&V..P..Y.+..  
    8. 0B5D:0160  01 06 57 91 58 2E 8B 36-59 91 2E 80 3C 00 75 26   ..W.X..6Y...<.u&  
    9. 0B5D:0170  2E 80 7C FF 3A 75 09 2E-C7 06 4A 91 09 00 EB 1F   ..|.:u....J.....  

     可以看到物理地址的表示方法都是基地址:偏移地址 ex:0B5D:0100

    在CPU中 基地址 存于 段寄存器,偏移地址 存于通用寄存器

  • 相关阅读:
    nyoj592 spiral grid
    ny788 又见Alice and Bob
    hdoj 1166 敌兵布阵 线段数和树状数组
    nyoj228 士兵杀敌(5)插线问线
    nyoj576 集齐卡片赢大奖(一)
    ny269 VF
    AC Again hdoj 1582 搜索
    nyoj123 士兵杀敌(四)树状数组 插线问点
    CRAVAT: Cancer-Related Analysis of VAriants Toolkit
    第二代无创胎儿基因组分析结果
  • 原文地址:https://www.cnblogs.com/milantgh/p/3919469.html
Copyright © 2011-2022 走看看