文档章节

基地址和偏移地址的概念

follitude
 follitude
发布于 2016/05/10 23:12
字数 1256
阅读 704
收藏 2

首先必须明白 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
粉丝 6
博文 118
码字总数 4956
作品 0
浦东
私信 提问
iOS逆向之工具使用

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

FlyOceanFish
2017/11/13
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
逆向工程核心原理之基地址重定位表

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

wangtiankuo
04/11
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

没有更多内容

加载失败,请刷新页面

加载更多

升压变换器 Boost

工作特点 输入输出极性相同。 开关管 MOS 和负载构成并联,在MOS 导通时,电流通过 L 滤波,电源对 L 充电。 当 MOS 断开时,L 向负载及电源放电,输出电压将是 Ui+U L ,达到升压的目的。 ...

colinux
28分钟前
1
0
OSChina 周一乱弹 —— 你狗命在我手上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 小小编辑:推荐歌曲,《I.W.A.B.N》- Lil Ghost 《I.W.A.B.N》- Lil Ghost 手机党少年们想听歌,请使劲儿戳(这里) 几天没见, 大王(@罗马的...

小小编辑
30分钟前
169
7
轻量级 memcached缓存代理 twemproxy实践

本文内容脑图如下: 文章共 533字,阅读大约需要 2分钟 ! 概 述 twemproxy(nutcracker) 是 Twitter开源的轻量级 memcached / redis 代理服务器,本质就是一个集群管理工具,主要用来弥补 ...

CodeSheep
50分钟前
7
0
Apache日志不记录访问静态文件,访问日志切割,静态元素过期时间设置

Apache配置不记录访问静态文件的日志 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 vhost原始配置 <VirtualHost *:80> ServerAdmin test@163.com DocumentRoo...

野雪球
今天
3
0
聊聊storm的ICommitterTridentSpout

序 本文主要研究一下storm的ICommitterTridentSpout ICommitterTridentSpout storm-core-1.2.2-sources.jar!/org/apache/storm/trident/spout/ICommitterTridentSpout.java public interface......

go4it
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部