一、为什么 物理地址=段地址x16+偏移地址?

刚开始学时,我都笨到不明白为什么是2的N次方,咱把物理地址就当数字,计算机中数字是由很多位0或1自由组合的, 而每一位上要么是0要么是1,只有这两种情况,所以N位就可以组成2的N次方个编号地址了

  8086CPU的地址总线是20条(位),因此就可以给104 8576个(1M)内存单元进行地址编号,而寄存器和数据总线都是16位的,16位对应6 5536(64K),这样就浪费了好多好多内存空间啊,咋办?于是那些聪明人整了个地址加法器,地址加法器干的活计就是把16位的段地址乘以16,为啥非得是16呢?我让你干件事:你把数字68左移一位是多少,你告诉我680,没错,你把68后面补个0 其实就是乘以了10,我再让你把十六进制38H左移一位你还是像刚才那么干在后面补个0是380H,其实还是乘以了10H, 而这里的10H对应十进制16,1位十六进制对应4位二进制,所以段地址乘以十进制的16,就是相当于在一个16位的二进制数后面补了4个0,哇这不就凑成了20位,内存就避免了浪费,乘完16得到了一个首地址(起始地址/基础地址),把首地址作为一个起始地址加上一个16位二进制偏移地址,偏移地址的偏移量是0H~FFFFH(因为16位二进制数最大是FFFFH),所以段空间最大是64K(FFFFH),我们以后就可以根据需要逻辑上把内存分段进行内存空间的访问。

二、段地址x16是一个16的倍数

一看标题这不废话吗。。。直到看到王爽老师《汇编语言》检测点2.2,加深了对这句话的理解

我们就做最小为多少,根据公式很容易想到,当偏移地址最大为FFFFH时 段地址SA肯定最小啊

①SAx16+FFFFH=20000H

②SAx16=20000H-FFFFH=10001H

③SA=10001H/16(10H)=1000H

这也太简单了吧,百度下看看答案对不对,纳尼答案咋是1001H,哪来的啊?我算错了???算了好几次都是1000H啊,咋回事?

  我们注意②SAx16=20000H-FFFFH=10001H,我们再看一眼标题二,10001H=65537 显然不是16的倍数啊,然后我们就把之前用的FFFF换成FFFF-1,FFFF-2,FFFF-3...直到试到FFFF-F=FFF0H时得到了16的倍数和正确答案吻合了。但这样操作好累啊,一个一个试,所以快速的做法是反过来想:我要保证首地址是一个16的倍数,从十六进制角度看就是要保证末尾是个0,

所以20000H-?=末尾是0的数,显然FFF后面带个0就能跟20000H末尾的0对应相减得到末尾是0的数。

  总结:内存中有些内存单元不能作为段的首地址(段地址x16),因为有些物理地址不是16(10H)的倍数,但是段地址可以是任何地址因为它要乘16,无论地址是多少都可以,注意我这里说的段地址并不是内存中的地址,因为段地址是16位,内存的物理地址是20位,前面说的首地址(在偏移为0的情况下)可以看成内存中段的起始物理地址,但这不表示那些不能做首地址的内存单元访问不到,因为一个内存单元的物理地址可以根据段地址和偏移地址有很多种组合来访问它。

若有错误,请评论指正,谢谢!

汇编语言——物理地址=段地址x16+偏移地址,检测点2.2的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. C++ 虚指针、成员变量与类对象的偏移地址

    先给出一段代码实现 #include <iostream> using namespace std; class animal { protected: int age; public: ...

随机推荐

  1. javascript中数组常用的方法和属性

    前言 在javascript中,数组是一种非常重要的数据类型,我们时常会和它打交道,最近在开发项目中频繁的使用到数组,但是自己对数组的众多方法已经是非常模糊了,为了方便自己以后能够更好的使用数组中的属 ...

  2. Creating a Store Locator with PHP, MySQL & Google Maps(保存地图坐标 经纬度方法 google mysql)

    Google Geo APIs Team August 2009 This tutorial is intended for developers who are familiar with PHP/ ...

  3. python的__name__ == \'__main__\' 意义

    转自http://www.jb51.net/article/51892.htm 很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码 ...

  4. Jmeter定时器:Precise Throughput Timer使用

    百度上这方面资料很少,google上有一些,我试着总结一下. Precise Throughput Timer 是Jmeter4.0添加的新功能,直接摘录一段英文: The Precise Throu ...

  5. 【maven的使用】2使用maven与pom文件

    一.使用maven:首先需要知道的是,在我们开发人员中有一句话叫做:约定优于配置.比如,如果我们写代码有多种可选方案:硬编码形式:obj.setPath("d:/xxxx") .配 ...

  6. 手把手教你如何在window下将jenkins+allure集成生成的测试报告通过jenkins配置邮箱自动发送-04(非常详细,非常实用)

    简介 上一篇生成测试报告,小伙伴们和童鞋们就又问道,测试报告已经生成了,怎么发送给相关的负责人了?小伙伴们和童鞋们不要着急,听宏哥慢慢给你道来,心急吃不了热豆腐哈.今天这篇文章宏哥就给小伙伴和童鞋们来 ...

  7. Android通过外部浏览器调用微信H5支付,Android+PHP详解

    看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil ...

  8. JVM参数的配置及意义

    JVM参数设置.分析 因为在工作中遇到了JVM参数的配置,不明白,网上搜索发现一篇好文,转载至:https://www.cnblogs.com/redcreen/archive/2011/05/04/ ...

  9. MOOC python笔记(三) 序列容器:字符串、列表、元组

    容器概念 容器是Python中的重要概念,分为有序与无序. 有序容器也称为序列类型容器,如:字符串.列表. 通用序列容器操作 容器连接+ 加号可以把两个序列连接成一个更大的容器,相加后两个序列的值并不 ...

  10. 【Dubbo】Zookeeper+Dubbo项目demo搭建

    一.Dubbo的注解配置 在Dubbo 2.6.3及以上版本提供支持. 1.@Service(全路径@org.apache.dubbo.config.annotation.Service) 配置服务提 ...