汇编语言简单问求教 (我是初学者)

来源:百度知道 编辑:UC知道 时间:2024/06/07 17:26:03
书上有句话,其中有个地方我不明白

在编程时,可以根据需要,将一组内存单元定义为一个段,。我们可以将一组长度为N(N《64KB)、地址连续、起始地址为16的倍数的内存单元当做专门存储数据的内存空间,从而可以定义了一个数据段。

我要问的就是这里为什么非要是16的倍数,任意数不行吗?

因为8086的寄存器(包括地址寄存器等)是16位的,而地址总线有20位。为了得到20位的地址,必须采取 段地址:偏移地址 来定位。 从而可以通过 段地址*16+偏移地址 这样得到20位地址。而且,一个20位的物理地址可能由多种 段地址:偏移地址 的组合。比如21F60H,可以是2000H:1F60H,也可以是2100H:0F60H.

上面我表达的其实就是:将若干地址连续的内存单元看做一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。物理地址=起始地址+偏移地址。

你所说的起始地址为16的倍数的内存单元,其实就是上边说到的起始地址(基础地址)。起始地址=段地址*16.所以一个段的起始地址一定是16的倍数。

2进制。。。大概是这么回事吧。

还有机器的8位、16位、32、64位,都是这个原因。

可以. 他是说:我们可以