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中 基地址 存于 段寄存器,偏移地址 存于通用寄存器

  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/milantgh/p/3919469.html
Copyright © 2011-2022 走看看