|
-
February 18th, 2004, 01:43 PM
#18
Originally posted by JMS
The 8086 and 8088 could only access 640k of memory.
Definitely not. The BIOS for an original PC existed in the area just below 1 MB. There is other portions of the 640 KB to 1 MB area that was reserved for various things, such as for the display adapter. Some of the area was available for other uses. Many adapters, especially network and SCSI host adapters, used portions of it such that it became a very limited resource.
Originally posted by JMS
It was the 80286 which introduced extended memory schemes for "protected" mode processes.
As far as I remember, that is correct.
Originally posted by JMS
the 80386 wich introduced expanded memory which took advantage of the high memory between 640k barior and 1 meg.
The term "expanded memory" was semi-officially defined to refer to hardware that was able to swap memory out of and into the 1 MB memory area. It worked for all relevant processor types; that is, 8086, 80286 and above.
Originally posted by JMS
For example in small memory model the heap and stack both were resident on the Data Segment. There was only one Data Segment, and that we will agree was limited as all segments were to only 64k.
Actually I think it is more correct to say that there were at least two data segments; the ES register was specifically for addressing another ("extra") segment.
Originally posted by JMS
near pointers weren't pointers at all but rather offsets which would be combined with a base pointer to address memory inside a 64k data segment.
So what was the "near" Type Declaration for? A "near char *" is a near pointer to a char.
Originally posted by JMS
Memory allocated outside this block of memory could only be accessed by far pointers... unless you reset your base address of your data segment which would be crazy. Crazy because then you can't access any of your variables in your original DS. But I supposed in real mode operation even crazy folks have the power.
It is not crazy. It is normal. For one thing, as said above, it is possible to access a second segment using the ES register. However it was typical to set the DS register to other segments. One very reasonable thing to do is to set the DS register at the beginning of a function. The registers are typically saved to the stack and restored from the stack and then the registers could be set to any value for use by the function. Something such as that is extremely common.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|