On 6/12/23, Clem Cole <clemc(a)ccc.com> wrote:
WRT to BSS -- Block Start Symbol (and sometimes Block End Symbol in some
later assemblers) I believe was (were) part of the original 704 assemblers
from United Aircraft reserving a labeled block of uninitialized space in a
"DUMMY SECTION" (or DSECT) for a hunk of storage. The OS is going to load
everything together. So, a big feature of the United Aircraft assembler was
to help control memory layout and collect like (common) hunks of things
together (i.e., code vs data). The whole idea of BSS was to get the loader
to reserve space that did not have to initialized. As I understand it, the
standard IBM FORTRAN (FAP) and Assembler (MAP) for the 709 and 7090/94
picked it up, with the new FORTRAN compiler being the big driver.
ᐧ
I don't recall either BSS or BES pseudo-ops in the System/360
assemblers for DOS/360 and OS/360. I think that by then they had been
replaced by a more generalized concept of PSECTs and DSECTs.
I forget now the details of how Fortran uninitialized common blocks
were implemented in S/360 object language. It was the job of the link
editor to overlay all such symbols with the same name, and if there
was no explicit initializer, to allocate space for them in
uniniitalized memory. One thing to note is that, at least in DOS/360,
such memory was not zeroed out. It contained random garbage Security
wasn't a concern in closed, raised-floor computer shops and you didn't
want the program loader to waste time zeroing out memory anyway.
-Paul W.