首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

为什么偏移量是16位?解决思路

2012-02-09 
为什么偏移量是16位?请问为什么偏移量是16位?不是偏移了4位吗?2的16次方到2的20次方,不就偏移了4位吗?[解

为什么偏移量是16位?
请问为什么偏移量是16位?不是偏移了4位吗?   2的16次方到2的20次方,不就偏移了4位吗?

[解决办法]
偏移量16位与偏移4位是针对两件不同的事物而言
16位指的是一个程序段内的偏移地址
4位指的是8086CPU的内存实地址的形成方法
建议楼主仔细看书:)
[解决办法]
MOV AX,[BX+4]
这里寻址的是自BX寄存器“偏移”4位的内存地址。

而偏移量是内存分段中的概念,意义为线性地址-段基址*16后的数值,因为8086的寄存器字长的原因,所以偏移量也为16位。

另外,如果实在分不清这些概念,可以尝试直接学习32位汇编,内存寻址flat到底。
[解决办法]
首先你要搞清楚什么是偏移地址。

在8086下,地址总线为20位,而CPU内寄存器为16位,所以要把外部的地址分为两部分来计算。
即:段地址:偏移量。分别又不同的寄存器表示,一般代码段为CS:IP,数据段为DS:DX
堆栈段为SS:SP,另外还有个ES扩展段。

这样,你再看,由于20位地址在内部表示为两部分,那么每部分就是16位,所以偏移地址为16位,而不是简单的20-16=4那么简单。

建议楼主多看看相关寻址资料。
[解决办法]
cs.ds.ss.es
[解决办法]
存放4位偏移量的寄存器是有规定的。

看一下寻址方式吧.

热点排行