程序如何执行:

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

物理地址 = 段地址*10H + 偏移地址的更多相关文章

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

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

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

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

  3. 「汇编」加深理解段地址*10H(*16)必须是16的倍数

    王爽的汇编语言,有这样一道题: 检测点2.2 (2)  有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元.则SA应满足的条件是:最小为         , 最大为   ...

  4. CPU结构及段地址偏移地址的概念

    原文地址:http://blog.csdn.net/yihuiworld/article/details/7533335#comments 程序如何执行: CPU先找到程序在内存中的入口地址 -- 地 ...

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

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

  6. 转: PE rva to raw 虚拟偏移地址和文件物理偏移地址

    +---------+---------+---------+---------+---------+---------+| 段名称 虚拟地址 虚拟大小 物理地址 物理大小 标志 |+-------- ...

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

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

  8. java对象的内存布局(二):利用sun.misc.Unsafe获取类字段的偏移地址和读取字段的值

    在上一篇文章中.我们列出了计算java对象大小的几个结论以及jol工具的使用,jol工具的源代码有兴趣的能够去看下.如今我们利用JDK中的sun.misc.Unsafe来计算下字段的偏移地址,一则验证 ...

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

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

随机推荐

  1. Cocos2d-x坐标系介绍

    在图形图像和游戏应用开发中坐标系是非常重要的,我们在Android和iOS等平台应用开发的时候使用的二维坐标系它的原点是在左上角的.而在Cocos2d-x坐标系中它原点是在左下角的,而且Cocos2d ...

  2. VHDL基本常识

    std_logic_vector和integer需要通过signed或unsigned进行间接转换(强制转换) a_std <= std_logic_vector(to_unsigned(a_i ...

  3. jquery.validate.js

    jquery.validate.js使用记录 首先到JQ官网下载搜索validate插件,下载相关源码,附上validate官网网址 https://jqueryvalidation.org/ 找到v ...

  4. JS重写alert,保证弹窗错误的友好性

    // ------------------------------------------------------------- // 重写alert,保证弹窗错误的友好性 var j_oldAler ...

  5. 使用socket.io搭建聊天室

    最近在学习nodejs,需要找一些项目练练手.找来找去发现了一个聊天室的教程,足够简单,也能从中学到一些东西.下面记录我练习过程中待一些笔记. nodeJS模块 共用到了2个模块,express和so ...

  6. 利用Jmeter做接口测试

    本文作者:大道测试团队-孙云 1.在安装jmeter之前先配置好JDK,再配置jmeter环境变量. 2.启动jmeter 启动jmeter: 双击Jmeter解压路径(apache-jmeter-3 ...

  7. [转]PLS-S-00201, identifier 'CALLDEMO.GET_EMPLOYEES' must be declared 预编译错误原因及解决办法

    $ proc sample9.pc SQLCHECK=SEMANTICS Pro*C/C++: Release 11.2.0.1.0 - Production on Tue Jan 8 15:18:4 ...

  8. 【转载】MySQL 5.6主从Slave_IO_Running:Connecting/error connecting to master *- retry

    原文地址:MySQL 5.6主从Slave_IO_Running:Connecting/error connecting to master *- retry 作者:忆雨林枫 刚配置的MySQL主从, ...

  9. Arrays.asList的使用及异常问题

    将数组转成List问题,通常我们习惯这样写成:List<String> list = Arrays.asList("1","2"); 于是我们这样就 ...

  10. 让别人也可以访问你电脑上的ASP.NET MVC创建的网站

    最近在写一个网站,昨天刚写完,由于要和朋友一起测试,但是他电脑上没有环境,所以希望我在自己电脑上部署一下,让他直接通过浏览器来访问来测试,所以从昨晚到今天上午,通过各种搜索,终于搞定了. 先介绍一下我 ...