原文地址:http://blog.csdn.net/yihuiworld/article/details/7533335#comments

程序如何执行:

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:    234             and         23        -->         xxxx

234 ×10       +           23        -->         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 Settings\Administrator>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中 基地址 存于 段寄存器,偏移地址 存于通用寄存器

CPU结构及段地址偏移地址的概念的更多相关文章

  1. 物理地址 = 段地址*10H + 偏移地址

    程序如何执行: CPU先找到程序在内存中的入口地址 -- 地址总线 (8086有20根地址总线,每一根可以某一时传0或1, 20位的二进制数字可以表示的不同的数字的个数是2^20=1048576 10 ...

  2. 王爽汇编习题2.2(1):给定地址段为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为____到____

    此题解题背景默认为8080型CPU,地址总线为16根.(8080-16,8086-20,8088-20,80286-24,80386-32) 16根地址总线寻址能力:(2 ** 16) / 1024 ...

  3. 【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)

    0 前言 此篇文章想写如何通过工具手查导出表.PE文件代码编程过程中的原理.文笔不是很好,内容也是查阅了很多的资料后整合出来的.希望借此加深对PE文件格式的理解,也希望可以对看雪论坛有所贡献.因为了解 ...

  4. 物理地址为20位 如10000H 用段地址*16+偏移地址表示

    段地质在cpu中,为16位 段地质*16则变成物理首地址20位,这个物理首地址必定是16的倍数. 偏移地址16位, 则表明一个段的大小为64k. 同时也表明16位地址的寻址能力为64kb

  5. 怎样求结构体成员的偏移地址 || 结构体的 sizeof 总结

    C 语言中同意将值为 0 的变量强制转换成任一类型的指针,转换结果是一个NULL指针. (type*)0 // 一个 type 类型的NULL指针 用这个指针訪问结构体内的成员是非法的,可是 & ...

  6. 汇编语言——物理地址=段地址x16+偏移地址,检测点2.2

    一.为什么 物理地址=段地址x16+偏移地址? 刚开始学时,我都笨到不明白为什么是2的N次方,咱把物理地址就当数字,计算机中数字是由很多位0或1自由组合的, 而每一位上要么是0要么是1,只有这两种情况 ...

  7. PE格式第三讲扩展,VA,RVA,FA(RAW),模块地址的概念

    PE格式第三讲扩展,VA,RVA,FA的概念 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (vi ...

  8. CPU结构与指令执行过程简介

    CPU(Central Processing Unit)是计算机中进行算术和逻辑计算处理指令的主要部件. CPU结构 CPU由通用寄存器组,运算器,控制器和数据通路等部件组成. 寄存器包括 数据寄存器 ...

  9. 第三讲扩展,VA,RVA,FA(RAW),模块地址的概念

    一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边都是. 二丶模块地址(image Base) 模块地址,就是exe加载到内存的时候 ...

随机推荐

  1. hdu 1029 求出现次数过半的数

    题目传送门//res tp hdu 已知必定存在一个元素出现次数超过一半,考虑用栈 若当前元素等于栈顶元素,入栈,反之出栈,并将当前元素入栈 最终的栈顶元素即是所求 #include<iostr ...

  2. c++:论如何成功把自己搞懵【二叉树特辑①】(不定期更新)

    并不正经的前言 以前我这个小白看OI的书,老觉得有些东西很高端(看不懂的自然就很高端[滑稽]):什么栈啊,位运算啊,二叉树啊.有些东西我学了之后也很迷糊(真的不是因为傻?),做题的时候总是可以把自己搞 ...

  3. LC 494. Target Sum

    问题描述 You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 ...

  4. PHP和js判断访问设备是否是微信浏览器实例

    PHP和js判断访问设备是否是微信浏览器实例,代码非常精简,适合新手学习. js判断是否是微信浏览器: 1 function is_weixin() { 2 var ua = window.navig ...

  5. python+selenium+webdriver+BeautifulSoup实现自动登录

    from selenium import webdriverimport timefrom bs4 import BeautifulSoupfrom urllib import requestimpo ...

  6. 第十三章 ZYNQ-MIZ702 PL中断请求

    本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS接受到之后点亮相应的LED. 本文所使用的开发板是Miz702 PC 开发环境版本:Vivado 2015 ...

  7. 第六章 ZYNQ-MIZ701 GPIO使用之MIO

      6.0 本章难度系数★★☆☆☆☆☆ 6.1 GPIO简介 Zynq7000系列芯片有54个MIO(multiuse I/O),它们分配在 GPIO 的Bank0 和Bank1隶属于PS部分,这些I ...

  8. Mysql数据库的优化(本文摘自于网络,文章末端有原文链接)

    对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要.一 般来说,要保证数据库的效率,要做好以下四个方面的工作: ① 数据库设计 ② sql语句优化 ③ 数据库参数配置 ...

  9. 使用jenkins 构建时,字体图标报错的问题。

    最近一个项目开发中,我们在本地进行项目打包时,可以正常打包. 但是在使用jenkins构建时,一直报错,提示无法加载字体文件.can't resolve module '....xxxx.TTF ' ...

  10. 面试官:Kafka 如何优化内存缓冲机制造成的频繁 GC 问题?

    Jusfr 原创,转载请注明来自博客园 Request 与 Response 的响应格式 Request 与 Response 都是以 长度+内容 形式描述, 见于 A Guide To The Ka ...