I have gotten some complaints about our choice of the "modified" REAL address memory model as being unpalatable, since it violates the soul of x86. I agree with that sentiment. So, what do we do. Dave Armstrong and I have looked at a lot of options. We are motivated by the following: a. Give you something to do that *feels* consistent with the soul of x86. b. Don't expand the requirements of the project unnecessarily this late. in the semester. We came up with the following: We will move from Real-address mode to a somewhat simplified version of Segmented mode. Recall from lecture and discussion that in segmented mode, an address is computed by using the segment selector as an index into one of the two descriptor tables (GDT or LDT). [Bit [2] of the segment selector tells us which of GDT or LDT to access.] This gives you the 8 byte descriptor, from which you can easily extract the 32-bit Base Address. Finally, that base address is added to the 32 bit offset to form the 32bit linear address. [The rest of the world uses the term virtual address instead of linear address.] From there the linear/physical mapping is performed as we did in class. You should also know that a hardware speedup exists in many implementations, as follows: The first time the segment selector is used to compute a linear address, the Base Address contained in the descriptor is (in addition to being used to compute the linear address) saved in a hidden 32 bit register alongside the segment selector. Subsequent accesses via the same segment selector need not therefore access the GDT or LDT. Instead they can simply read the base address directly from the hidden 32bit register alongside the segment selector. So, what does this have to do with you? We will assume (for purposes of this course only) that the entries of the GDT and LDT have the following *remarkable* property: The base address part of each descriptor is simply the 16 bit segment selector shifted left by 16 bits. This "magical" assumption means you need not implement or access the GDT or LDT in your project. Do you see why? When you load a segment selector, you can immediately load its hidden Base address register with the 16 bit segment selector, shifted left by 16 bits. Then when you need to perform an address computation, you can add the proper Base address (obtained from the hidden 32bit register) to the 32 bit offset computed from other information in the ISA. Yale Patt