QuickBASIC/QBASIC newsletter
The History of Computers
What are segments and offsets?
All programmers use segments and offsets in their programs. In QB,
these exist in the
forms of DEF SEG, VARSEG, and VARPTR. But have you ever wondered
what segments
and offsets are or what they do for programming?
This article will answer all of that from
the history of the segment-offset set-up in IBM/compatibles to how programmers
benefit
from this set-up...
When IBM made the 1st PC in '81, they thought no one would ever need more
than
1Mb of RAM (morons). All the computers at that time were 16-bit,
so only 64Kb could be
accessed (2^16=65536=64k). (Those of us who use POKE and PEEK for
graphics in screen
13h or use integers for math understand that.) This posed as sort
of a problem because
64Kb is only 1/16 of 1Mb (2^16*16=65536*2^4=1Mb). To solve this problem,
some system
of accessing the rest of the memory had to be devised. This led to
segments and offsets.
The segment-offset set-up is given in notation as FFFF:FFFF, where the
hexadecimal
number before the colon is the segment, and the number after the colon
is the offset. The
segment is a value of memory that is shifted left 4 times (in binary that
is *16 or that extra
2^4 that was needed to access the 1Mb of RAM). But this leaves holes
in the memory
addressing because only every 16b can be accessed. The offset fills
in these gaps by
allowing the accessing of 64Kb of memory, starting at the offset value*16.
Since the offset values are the actual byte values, you can reach every
byte in memory
by going at 64k chunks at a time. An example would be video RAM.
Its address is at
A000:0000, meaning the top-left pixel is at segment A000h and offset values
0000h to FFFFh
are the values of all the pixels. That also means it is at bytes
40960 to 106495 in RAM.
Well, there you have it. With this knowledge, you can access the
whole 1st 1Mb or
RAM. (If you want to use any more memory than that, you'll have to
go somewhere else
because I haven't learned how to do that yet.) Below is a listing
of some useful locations
in RAM:
Description
Segment:Offset
Video RAM
A000:0000
Text Screen RAM
B800:0000
ASCII Characters 0-127
FFA6:0014
--Danny Gump
Back