文档章节

基地址和偏移地址的概念

follitude
 follitude
发布于 2016/05/10 23:12
字数 1256
阅读 469
收藏 2
点赞 2
评论 0

首先必须明白 cpu和内存的区别:

·cpu是中央处理器,内存是物理数据存放的地方。cpu不直接存放数据而是通过内存来存放数据。

·cpu和内存之间通过20条地址总线相连接,地址总线就是cpu通过地址找到对应的内存的物理数据的传递工具。

·计算机只能处理0,1 二进制数据,每一条线可以处理 0,1 两种类型数据,所以20根线总共能够组成 2^20=1048576个不相同的地址,也就是能搜索 1048576个地址范围内的内存。我们知道一个地址代表一个存储单元,一个存储单元能够存储 1byte数据,那么也就是1048576个地址能够找到 1048576个1byte数据=1M的数据,即20根地址总线总共能处理1M的内存数据。

 

·疑问?cpu的寻址能力只能16位而达不到20位,这怎么办呢?

cpu的地址都是使用16进制表示的,最多也能够寻址2^16=65536,说明只能处理64K的内存数据。天啦噜,64K内存的计算机,能用?当然不能用啦,于是,段的概念横空出世。段,理解起来可以是假设将1G的数据划分为 n个段,每一个段是64K(65536个地址),那么16位的寻址就能找到了这65536个地址了。

·肯定还是不理解,对吧。那就说说段地址吧!!!

·开始介绍段地址:每一个段的开头也就是每隔一个64K就是一个基地址(逻辑上基地址等于段地址),段内的数据的地址就是当前基地址的偏移地址。这时,段地址+偏移地址就能够找到真正的内存数据了。

·cpu表示的地址为:基地址:偏移地址(偏移地址相当于在首地址的基础上 移动的距离)

插播:(起始地址顾名思义;相对地址和偏移地址的概念差不多;只不过用在不同的场合;偏移地址就是相对于基地址的偏移量就像是相对距离;基地址是一个段的起始地址,一般的20位地址总线,基地址为16位;逻辑地址就是基地址和偏移地址的复合形式,逻辑地址= 基地址 : 偏移地址;线性地址只是一个概念,表示地址成线性递增;物理地址要通过基地址和偏移地址的计算才能得出,一般的20位地址总线,其物理地址为:基地址 X 16(十进制)(相当于在基地址后面添一个0)+ 偏移地址)

比如,0BAC:0100

0BAC是基地址,0100是偏移地址。0BAC是4位的十六进制,将它表示为16位的二进制数据为:0000 1011 1010 1100。在这里,我们必须要把它转换成20位(也就是5位的16进制) 才能在20位地址总线中传递,也才能达到1G的数据访问范围。

那怎么转换成20位就能让数据传递到内存中找到物理数据了呢?

内存的物理地址 = 基地址*16(十进制)+偏移地址

内存的物理地址 = 0BAC*16+0100 = 0BAC0 + 0100 = 0BBC0H;你看,0BBC0就是5位的十六进制数了,满足20位(4*5=20bit)就可以传递到内存了。所以,实际传递的二进制就是:0000 1011 1011 1100 0000,这样的话20根地址总线就能处理它了。

注意了,32位汇编,32根地址总线,它总共能够直接就找到2^32个地址,(即4294967296 byte数据 = 4G的内存),而且不再将内存分成一段一段的,所有的内存区域都是连续的呢!

附读:

1.基地址 = 段地址 × 16
2.一个大小为64KB的段
起始地址 = 段寄存器的值(段地址) × 16 + 0
结束地址 = 段寄存器的值(段地址) × 16 + 0ffffh
3.8086cpu为16位,ip为16位寄存器,2^16 = 64(2^6) × 1024(2^10) = 64KB

·逻辑上,基地址 = 起始地址,理论上不等于。

·一般我们所的物理地址指的是某个单位的起始地址。这个某个单位是字节、字、或者某一段。
a.对于字节单元的物理地址:因为只有一个存储单元,所以其物理地址就是该单元的编号。
b.对于字单元的物理地址:因为只有两个存储单位,所以其物理地址就该单元的低字节单元地址(起始地址=小编号,结束地址=起始地址+2-1=大编号)。
c.对于段的物理地址:段的内容大小为"容量",所以其物理地址(起始地址)就是该段的低字节单元的编号,结束地址=起始地址+容量-1. 

本文转载自:http://blog.csdn.net/liaomin416100569/article/details/7335377

共有 人打赏支持
follitude
粉丝 4
博文 118
码字总数 4956
作品 0
浦东
iOS逆向之工具使用

上一篇已经大体给大家介绍了几款工具,相信大家都有所了解了。如果不了解可以再去看看。哈哈。言归正传,接下来就是通过一个案例展示一下Hopper、ios-deploy等这些工具的结合使用;另一方面就...

FlyOceanFish
2017/11/13
0
0
逆向工程核心原理之基地址重定位表

本文整理自《逆向工程核心原理》 唉,基础薄弱,继续抄书。 PE重定位。 PE重定位操作原理: 根据基地址重定位表算出程序中硬编码地址的偏移。使用winhex查看偏移处的值,得到硬编码地址。 使...

wangtiankuo
04/11
0
0
一起学mini2440裸机开发(二)--MDK自带的S3C2440.s分析

上一节,咱们在建立工程的时候,默认的是使用MDK自带的启动代码,这些启动代码到底做了什么工作呢?在这里我想探究一下,探究不全没什么事,能看懂个大概就行了。 我先申明一下,其实我并不是...

长平狐
2013/06/17
1K
0
iOS逆向实战(微信自动抢红包上)

屏幕快照 2018-01-05 下午6.36.07.png 今天开始介绍如何一步步逆向微信app,写一个自动抢红包插件。我们最终成品是写一个能自动抢红包并且在非越狱手机上安装的多开微信。 我暂时打算分3篇文...

LvesLi
01/05
0
0
反汇编学习笔记4 - ADRP

sp 需要16位对齐 函数参数从x0开始调用 常量的获取 adrp 指令: adr(address)p(page) adrp x0, x1 第一步:将1的值左移12位 (1 0000 0000 0000)= 0x1000 第二步:将pc寄存器的低12位清...

sqatm
05/01
0
0
STM32总结一 STM32三种点亮LED灯方式的不同之处(寄存器点亮,模板点亮和位带操作)

STM32点亮LED灯有很多种方法。第一种是操作寄存器来点亮LED灯,(以GPIOC的第一个LED为例)操作的方法是首先在中文手册,首先要声明的是,手册里面看到的地址,都是字节,表示第多少多少个字...

wise18146705004
04/18
0
0
GDT,LDT,GDTR,LDTR 详解,包你理解透彻

一、引入 保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成 段描述符寄存器: 存储段描述符 选择器:存储段描述符的索引 段寄存器 PS:原先实模式下的各个段寄存器作为保...

simpower
05/30
0
0
堆外内存初探

使用Java语言的同学们都知道, Java的虚拟机对内存的管理大部分情况下就是指堆内存的管理, GC的也是对堆内存的清理和回收.下面就看一下堆外内存的对JVM的意义. 第一次了解到堆外内存的使用场景...

boomya
2016/07/01
282
0
uboot移植——DM9000的移植

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。 一、网卡相关的基本知识 1、网卡芯片和SoC的连接方式 上面的引脚中,重要的引脚有:IOR、IOW、AEN、CMD、INT、RST,以及数据引...

oqqHuTu12345678
2017/05/19
0
0
操作系统--虚拟内存、逻辑地址、线性地址、物理地址

逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数...

AlphaJay
2010/06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
12分钟前
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
33分钟前
0
0
HTTP协议通信原理

了解HTTP HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务。 HTTP使用...

寰宇01
55分钟前
0
0
【Java动态性】之反射机制

一、Java反射机制简介

谢余峰
56分钟前
1
0
Centos 6.X 部署环境搭建

1.Linux学习笔记CentOS 6.5(一)--CentOS 6.5安装过程

IT追寻者
今天
0
0
博客即同步至腾讯云+社区声明

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=8vy9bsmadbko...

xiaoge2016
今天
1
0
大数据教程(3.1):Linux系统搭建网络YUM源服务器

博主在前面的2.5章节讲述了linux系统本地YUM服务器的搭建和httpd轻量级静态网站服务器的安装,本节博主将为大家分享内网环境中搭建自己的网络YUM服务器的全过程。如果大家对本地YUM服务器还不...

em_aaron
今天
1
0
蚂蚁技术专家:一篇文章带你学习分布式事务

小蚂蚁说: 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务...

Java大蜗牛
今天
1
0
新的Steam应用将拓展服务项目

导读 未来几周,Steam将推出两个免费的应用程序Steam Link和Steam Video。这两个应用程序都旨在拓展Steam平台的业务和便利性。 即将开放的Steam Link应用程序最先提供了Android测试版,它将允...

问题终结者
今天
0
0
golang 第三方包的使用总结

golang 第三方包的安装的方法: 1. go get 安装 $ go get github.com/gin-gonic/gin 注意:执行go get 命令需要先安装git命令,并配置git全局变量。 2. 源码包安装 由于国内网络问题,很多时...

科陆李明
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部