物理地址 = 段地址*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命令
- C:\Documents and Settings\Administrator>debug
debug工具是DOS/Widows提供的实模式程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。
它可以用于逐指令执行某个程序以验证程序运行的正确性,
也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区等
输入d命令查看寄存器的内容:
- -d
- 0B5D:0100 02 00 EB 0E 50 B0 03 B4-FF E8 9E 00 58 EB 03 E8 ....P.......X...
- 0B5D:0110 1D 01 58 C3 F9 C3 55 51-26 8A 4F 08 34 00 4C 0B ..X...UQ&.O.4.L.
- 0B5D:0120 74 0D 8D 6F 09 E8 19 04-73 08 E8 0E 00 E2 F6 F9 t..o....s.......
- 0B5D:0130 EB 06 2E 89 2E 5D 91 F8-59 5D C3 26 80 7E 00 00 .....]..Y].&.~..
- 0B5D:0140 74 03 45 EB F6 45 C3 2E-80 0E 56 91 10 E8 C6 FF t.E..E....V.....
- 0B5D:0150 72 4A 2E 80 26 56 91 EF-50 2E A1 59 91 2B C6 2E rJ..&V..P..Y.+..
- 0B5D:0160 01 06 57 91 58 2E 8B 36-59 91 2E 80 3C 00 75 26 ..W.X..6Y...<.u&
- 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 + 偏移地址的更多相关文章
- 汇编语言——物理地址=段地址x16+偏移地址,检测点2.2
一.为什么 物理地址=段地址x16+偏移地址? 刚开始学时,我都笨到不明白为什么是2的N次方,咱把物理地址就当数字,计算机中数字是由很多位0或1自由组合的, 而每一位上要么是0要么是1,只有这两种情况 ...
- 物理地址为20位 如10000H 用段地址*16+偏移地址表示
段地质在cpu中,为16位 段地质*16则变成物理首地址20位,这个物理首地址必定是16的倍数. 偏移地址16位, 则表明一个段的大小为64k. 同时也表明16位地址的寻址能力为64kb
- 「汇编」加深理解段地址*10H(*16)必须是16的倍数
王爽的汇编语言,有这样一道题: 检测点2.2 (2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元.则SA应满足的条件是:最小为 , 最大为 ...
- CPU结构及段地址偏移地址的概念
原文地址:http://blog.csdn.net/yihuiworld/article/details/7533335#comments 程序如何执行: CPU先找到程序在内存中的入口地址 -- 地 ...
- 王爽汇编习题2.2(1):给定地址段为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为____到____
此题解题背景默认为8080型CPU,地址总线为16根.(8080-16,8086-20,8088-20,80286-24,80386-32) 16根地址总线寻址能力:(2 ** 16) / 1024 ...
- 转: PE rva to raw 虚拟偏移地址和文件物理偏移地址
+---------+---------+---------+---------+---------+---------+| 段名称 虚拟地址 虚拟大小 物理地址 物理大小 标志 |+-------- ...
- 【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)
0 前言 此篇文章想写如何通过工具手查导出表.PE文件代码编程过程中的原理.文笔不是很好,内容也是查阅了很多的资料后整合出来的.希望借此加深对PE文件格式的理解,也希望可以对看雪论坛有所贡献.因为了解 ...
- java对象的内存布局(二):利用sun.misc.Unsafe获取类字段的偏移地址和读取字段的值
在上一篇文章中.我们列出了计算java对象大小的几个结论以及jol工具的使用,jol工具的源代码有兴趣的能够去看下.如今我们利用JDK中的sun.misc.Unsafe来计算下字段的偏移地址,一则验证 ...
- 怎样求结构体成员的偏移地址 || 结构体的 sizeof 总结
C 语言中同意将值为 0 的变量强制转换成任一类型的指针,转换结果是一个NULL指针. (type*)0 // 一个 type 类型的NULL指针 用这个指针訪问结构体内的成员是非法的,可是 & ...
随机推荐
- 初识iOS9 iPad新特性SlideView和SplitView的适配
苹果刚发布了iOS9,在iPad上新增了两个新的特性SlideView和SplitView,前者可以在不关闭当前激活APP的情况下调出来另外个APP以30%比例显示进行操作使用,后者允许同时运行两个A ...
- (转)国内外三个不同领域巨头分享的Redis实战经验及使用场景
随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽.这里我们将为大家分享社交巨头新浪微博.传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们 ...
- POJ 1384
求猜存钱罐中至少有多少钱.容易知道金币总的重量,接着背包. #include<cstdio> #include<iostream> using namespace std; # ...
- 理解ClassLoader基本原理
当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构: bootstrap classloader | exte ...
- 关于C++string的长度陷阱
std::string s = ...; ..... assert(s.length() == strlen(s.c_str())); 一般认为这段代码是不会断言失败的,但是实际上这段代码可能是会断言 ...
- java.util.TreeSet源码分析
TreeSet是基于TreeMap实现的,元素的顺序取决于元素自身的自然顺序或者在构造时提供的比较器. 对于add,remove,contains操作,保证log(n)的时间复杂度. 因为Set接口的 ...
- java集合学习一
首先看一下java集合的关系图 1.1从全面了解Java的集合关系图.常见集合 list set map等其中我们最常用的 list map 结合.几天说一下常见的map.map在我工作的两年里 ...
- 基于Httpfs访问HDFS的C++实现
Httpfs是hadoop2.x中hdfs项目的内置应用,基于tomcat和jesery,对外提供完备HDFS操作的RESTful接口,无需安装客户端,可方便实现数据交互,如从windows访问存储在 ...
- EF6数据迁移
当Moldes发生改变时 会提示数据上下文的模型已在数据库创建后发生改变,则需要重建数据库并数据迁移 在NuGet程序包管理控制台输入enable-migrations启用数据迁移 之后会提示&quo ...
- System Generator入门笔记
System Generator入门笔记 [CPLD/FPGA] 发布时间:2010-04-08 23:02:09 System Generator是Xilinx公司进行数字信号处理开发的一种设计 ...