16:16 to 0:32 Thunk

The selectors which are eligible for this thunk are LDT selectors which are PL=3.
In this case, all three low-order bits are 1. Because of this, one can shift the selector three bits to the right, or divide by 8, without loss of information. The resulting number is the high-order word of the 32-bit address because of address tiling.
For example, address 000F:00BA can be thunked from 16:16 to 0:32 as follows:

0    0    0    F    :        0    0    B    A    <--- Hex Sel:Offset
0000 0000 0000 1111          0000 0000 1011 1010 <--- Binary
shift the selector 3 bits to the right, which gives
0000 0000 0000 0001          0000 0000 1011 1010 <--- Binary
0    0    0    1             0    0    B    A    <--- Linear Address
Note that the lower 16 bits, or offset, are unchanged.

A stack may require alignment, because a 32-bit stack is built on double-word boundaries, with two low order zero bits in the address of each element, whereas a 16-bit stack is aligned only on a word boundary.


[Back: Address Transformations (Thunks)]
[Next: 0:32 to 16:16 Thunk]