2

in 8086 microprocessor a 20 bit address is divided in 16bit+4bit address in which 4 bit binary is the segment address.when we convert a 4bit binary into hexadecimal it gets to 1bit hexadecimal.my question is when we encounter the problem of calculating the physical address from the logical, a 4bit hexadecimal segment address is given.why is it so? Also in the calculation of physical address we append 0 in lsb to find the base address of the segment and then we add the offset into it. what is the logic behind appending 0?

4

2 回答 2

3

一段等于一段。一个段落等于 16 个十进制字节或 10 个十六进制字节。因此,偏移量为零的段值89AB等于89AB x 1089AB0注意:对于此上下文,所有地址都是十六进制的)。

对于段偏移到 20 位绝对地址的转换示例,最好这样表示:

89AB:F012  ->  89AB   ->  89AB0   (paragraph to byte ->  89AB x 10 = 89AB0)
                F012  ->  0F012   (offset is already in byte unit)
                          ----- +
                          98AC2   (the absolute address)

对于绝对地址到段偏移量的转换:

98AC2  ->  9 8AC2  ->  9     ->  9000  ->  9000:8AC2
           (split)     8AC2      8AC2

或者...

98AC2  ->  98AC 2  ->  98AC  ->  98AC  ->  98AC:0002
           (split)        2      0002

或者可以在中间分开...

98AC2  ->  98 AC2  ->  98    ->  9800  ->  9800:0AC2
           (split)      AC2      0AC2

以上三个段偏移地址包括89AB:F012(原始地址值)都指向同一个绝对地址(同一个物理位置)。

于 2012-09-16T06:52:58.687 回答
0

任何被认为是段寄存器的寄存器中的值乘以 16(或向左移动一个十六进制字节;在十六进制数的末尾添加一个额外的 0),然后将偏移寄存器中的值添加到它。因此,可以使用以下公式找到 Segment 和 Offset 对的任意组合的绝对地址:绝对
内存
位置

=(段值 * 16)+ 偏移值

通过一些示例之后,这将变得更加清晰易懂: Segment:Offset 对的绝对或线性地址,F000:FFFD 可以通过简单地在 Segment 值的末尾插入一个零在您的脑海中很容易地计算出来(这与乘以 16 相同)然后添加偏移值:F0000 + FFFD ------ FFFFD 或 1,048,573(十进制)

这是另一个例子: 923F:E2FF ->

        923F0
       + E2FF
       ------
        A06EF   or   657,135(decimal)

现在让我们计算可以使用 Segment:Offset 引用表示的最大值的绝对内存位置:FFFF0 + FFFF
------- 10FFEF 或 1,114,095(十进制) 实际上,直到 8086 之后的一段时间,如此大的值才真正对应于实际的内存位置。一旦 PC 拥有超过 1MiB 的内存变得很普遍,程序员就开发了利用它的方法来发挥自己的优势,最后一个字节成为现在称为 HMA(高内存区)的一部分。但是直到那个时候,如果程序尝试使用超过 20 位绝对地址 (1MiB) 的 Segment:Offset 对,CPU 会截断最高位(8086/8088 CPU 只有 20 条地址线),有效地映射任何超过 FFFFFh (1,048,575) 的值到第一个段内的地址。因此,10FFEFh 被映射到 FFEFh。

使用 Segment:Offset 对的缺点之一(可能会让你们大多数人感到困惑)是大量这些对引用相同的确切内存位置这一事实。例如,下面的每个 Segment:Offset 对都指代内存中完全相同的位置:

于 2013-02-14T08:47:23.107 回答