基址 偏移是什么意思?解决办法
发布时间:2010-06-14 15:48:12 文章来源:www.iduyao.cn 采编人员:星星草
基址 偏移是什么意思?
查过百度:保持恒定的两部分内存地址的一部分并提供一个基准点,从这里可以计算一个字节数据的位置。基址伴随着一个加到基上的偏移值来确定信息准确的位置(绝对地址)。这一概念与街道地址系统雷同。例如:“大街2010号”由基(大街2000街段)加上偏移值(从街段开始的10号)。
看这段解释不太懂。
在外挂中,比如血量,它的地址就是基址+偏移吗?
基址+偏移值=绝对地址?
------解决方案--------------------
这个说的是描述变量位置的一种说法,在PM编程中的描述分段的寻址机制。
比如 : seg.base + offset = line address
偏移+基址 应该为线性地址,看我刚刚回答的另一帖。
------解决方案--------------------
基址*16 + 偏移值 = 绝对地址...由于寄存器位数的原因,基址的数值都是16的倍数(我说的是8086汇编)。。。那个例子已经很形象了。。。
------解决方案--------------------
物理地址=基址*10H+偏移值,例如:基址=1020H,偏移地址=100H,那么偏移地址就是1020H*10H+100H=10300H。
------解决方案--------------------
对啊,我刚看了一点关于二十位物理地址的确定。这里首先要明确一个问题,8086的14个寄存器中除了PSW是二十位外,其他都是16位的,也就是说如果是一个寄存器提供地址他的寻址范围是2E16=64KB,但是为了扩大范围其数据总线设计成20位以达到1M的寻址范围。这就需要两个寄存器(一个是段寄存器一个是提供偏移地址的寄存器),段寄存器内的值左移四位+偏移地址=物理地址(20位)!
------解决方案--------------------
8086为16位的CPU,而却有20位的地址总线,因此需要将CPU中的两个地址段地址和偏移地址合成一个20位的地址。
8086读写内存时:
CPU中的相关部件提供两个16位的地址,一个是段地址,一个是偏移地址
段地址和偏移地址通过内部总线送入地址加法器
地址加法器将段地址×16+偏移地址=物理地址,物理地址为20位
地址加法器通过内部总线将20位的物理地址送入输入输出控制电路
输入输出控制电路将20位物理地址送上地址总线
20位物理地址被地址总线传送到存储器
段地址×16+偏移地址=物理地址的本质含义是:CPU在访问内存时,用一个基础地址(段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
内存本身并没有分段,段的划分来自CPU,由于8086CPU采用段地址×16+偏移地址=物理地址给出内存单元的物理地址,因此可以用分段的方式管理内存。段地址×16必然是16的倍数,因此一个段的起始地址也一定是16的倍数,而偏移地址是16位,所以段的长度最大为64KB。
------解决方案--------------------
5楼说的很详细。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
MSN通讯协议逆向
MSN 进行数据通讯中,据说用了TWN认证,通过SSL/TLS连接到login.passport.com和 loginnet.passportr.com 等服务器。
...
-
win7+64位cpu的exe反汇编问题,多次问人,无果
vs20008写的一个很简单的c++控制台程序
平台是:win7 64位操作系统
用od进行反汇编,...
-
可能很白痴的问题:想给ax赋一个负数怎么做?
比如想要赋一个-5给ax,是不是只有求出这个-5的补码,然后mov进这个补码这一种方法?
------...
-
居然显示不出负数来,悲剧
Assembly code
.386
.model flat,stdcall
include kernel32.inc
includelib kernel32.lib
include ms...
-
call far ptr '标号'的问题[在线等答案]
为什么ax会是1010?不是1006??求详细解答
难道call far ptr不是执行了push cs,push ip,jm...
-
CPU的程序计数器PC和指令指针寄存器IP是一个东西吗?
看上去好像功能完全一样,又觉得不应该是一回事,求教
------解决方案----------...
-
菜鸟问题,高人来帮忙
编程,统计data段中数值为8的字节的个数,用ax保存结果
我的代码
Assembly code
assume cs:code,ds:data
data se...
-
一个死循环问题
什么原因造成内循环才刚循环一次还没完,到了loop s1的时候cx突然变成F?
Assembly code
assume cs:codesg,ds:datas...
-
初学MUL乘法指令,写法求解释下
MUL r8/m8 ;无符号字节乘:AX←AL×r8/m8
MUL r16/m16 ;无符号字乘:DX.AX←AX×r16/...
-
汇编如何 取到8051的P0口的内容呢?
Assembly code
ORG 0000H
AJMP START
ORG 0030H
START: MOV P0,#00H
LOOP: ...