#[1]Sidey [2]Sidey
* [3]Writing
* [4]About
* [5]Home
Why would you want more than machine language?
(a short history of the birth of assembly)
The use of assembly language and an assembler was an idea that evolved
at the dawn of early digital stored program computers, in the decade
following the Second World War. [6]Richard Hamming reports an estimate
that the use of assembly language represented a 2x improvement on
programmer productivity [7][p. 31].
Nonetheless, it took awhile to catch on amongst experienced
programmers, many of whom continued to program in the earlier machine
code. Hamming reports of these programmers dismissing assembly as
‘sissy stuff’ and there are legends of towering figures in computing
being quite dismissive of it. This piece is a short historical survey
of the early development behind initial assembly languages and samples
some of these early reactions to it.
Programming Before Assembly
At the dawn of assembly, the model of computing which was taking shape
was that of the stored program computer. The ideas for the stored
program computer sprang out of the [8]ENIAC Project and its
shortcomings. One of the early shortcomings of the ENIAC was that it
required significant hardware modifications each time a new program was
run [9][p.75]. [10]John von Neumann did consulting work on this project
and outlined the ideas for improvement from this collaboration with the
ENIAC team in the [11]initial report on the EDVAC, though there are
questions about who should get credit for the ideas [12][p. 24][13][p.
77].
One of the most important of these ideas was to organize the computer
such that the program being executed is itself also stored in the
computer’s memory–this way, the computer itself did not need to be
tediously reconfigured for each new program [14][p. 75-76].
What is Assembly?
Stored program computers understand and can execute machine code, code
expressed in numerical form (many of the earliest computers in pure
binary). Below is a very short snippet of a more modern version of such
machine code:
6689C3
From a human’s perspective, it’s not very intuitive, and if you are not
incredibly immersed in a specific set of machine code, it is
meaningless (it is also not meant to be the hex code for a [15]seaish
looking blue).
In contrast, the below code is something a human with knowledge of
English can get some type of idea about, even with little background.
mov bx, ax
The second snippet is assembly code, which is read by an assembler and
translated into the first snippet for execution by a computer.
In Assemblers and Loaders, an assembler is described as [16][p. 1]:
… a translator that translates source instructions (in symbolic
language) into target instructions (in machine language), on a one
to one basis.
For early stored program computers, humans had to first do this
translation themselves before they could execute the programs. The idea
behind assembly was to use the machine itself to translate between a
more programmer friendly notation and the code the machine could
understand, because computers are great at manipulating symbols at a
high speed and precision [17][p. 168]. [18]Richard Hamming reports an
estimate that the use of assembly language represented a 2x improvement
on programmer productivity [19][p. 31].
The Development of Assembly on Early Stored Program Computers
Inspired by von Neumann and the ideas in the EDVAC report, two British
research camps started working on stored program computers at the end
of the 1940s, leading to some of the earliest assemblers.
[20]Andrew Booth led the ARC project out of Birbeck College, with
[21]Kathleen Booth (born as Britten) as an assistant — Kathleen is
credited with creating an assembler for the ‘ARC2’. Meanwhile,
[22]Maurice Wilkes led the EDSAC project out of Cambridge with David
Wheeler as an assistant — Wheeler is credited with creating the EDSAC’s
assembler [23][p. 81].
The tedium of translating human symbolic understandings of programs
into machine-readable programs led to the early assemblers.
The ARC Project & Kathleen Booth
Kathleen was working with Andrew on the ARC, a specialized computer for
calculating Fourier synteses 12-24x faster than a research student
could do using traditional methods [24][p. 102]. After visiting von
Neumann in Princeton, they constructed the ARC2, which was a
[25]‘stored program computer’.
She and her husband released a few publications about this machine in
1947, one of which is [26]General Considerations in the Design of an
All Purpose Electronic Digital Computer. The second, Coding For A.R.C,
is believed to contain her [27]assembly language for the ARC2. There is
little documented about this second report and, as far as we know,
there is no digital copy of Coding For A.R.C.. Birbeck College only
goes as far as to say she [28]‘developed a very early assembly
language’.
EDSAC & David Wheeler
The story of David Wheeler and the EDSAC is more widely documented.
As it goes, Maurice Wilkes led the EDSAC project (after visiting the
United States and learning about the EDVAC) to launch a stored program
computer at Cambridge University. The EDSAC became operational in May
1949 [29][85]. During this project Wilkes noticed that ‘assembling’ is
something computers are well equipped to do; he put David Wheeler on
this job for a doctorate project [30][168-169].
The result of this project was the Initial Orders program, completed in
May 1949, which would translate more human friendly punched codes into
binary, and was loaded into memory as a [31]‘bootstrap program’.
Wikipedia cites the earlier source crediting Kathleen Booth as the
inventor of assembly. Her Coding for A.R.C. piece was released in 1947,
while Wheeler’s Initial orders came online later in 1949. He is
credited by the IEEE Computer Society as having created the first
[32]‘assembly language’. As far as we are aware, there is no digital
copy of Coding for A.R.C., and it is something we would love to see
come online.
IBMs Early Commercial Assemblers
In the early 1950s, IBM’s first commercial computers also had
assemblers running. These assemblers took another step forwards from
the early academics who developed assemblers. The earlier assemblers
used more human friendly symbols for ‘operations’, but computer
addresses were still fixed in a program’s code. This had the downside
that programmers who encountered and corrected bugs needed to re-assign
a chain of subsequent addresses by hand or use an alternate method and
end up with ‘spaghetti code’ [33][p. 25].
With IBM’s assemblers, symbolic addresses were introduced, where the
assembler did the work of address assignment for the programmer [34][p.
116]. Both IBM’s first commercial scientific ([35]the 701) and business
([36]the 650) computers had assembly languages with symbolic addresses.
For the 701, Nathaniel Rochester developed the [37]Symbolic Assembly
Program (SAP) in 1953. For the 650, Stan Poley [38]developed SOAP in
1955, which improved the performance of programs by the intelligent
assignment of addresses [39][p. 16].
Early Responses to Assembly
Though most of the following perspectives are largely anecdotal, they
suggest there is evidence that using assembly language, or anything
higher than machine code, took time to catch on among practicing
programmers and faced tremendous skepticism, even from earlier figures
of our story, like Von Neumann (credit to [40]this presentation for the
sources).
[41]John Lee reports anecdotes from von Neumann himself questioning the
use of anything higher than machine code :
In the 1950’s von Neumann … was confronted with the FORTRAN concept;
John Backus remembered von Neumann being unimpressed and that he
asked “why would you want more than machine language?” …
… Donald Gillies, one of von Neumann’s students at Princeton, and
later a faculty member at the University of Illinois, recalled in
the mid-1970’s that the graduates students were being “used” to hand
assemble programs into binary for their early machine (probably the
IAS machine). He took time out to build an assembler, but when von
Neumann found out about he was very angry, saying (paraphrased), “It
is a waste of a valuable scientific computing instrument to use it
to do clerical work.”
Richard Hamming, writing about programming on the IBM 701 (the same
machine Rochester developed the assembler for) [42][p. 25]:
I once spent a full year, with the help of a lady programmer from
Bell Telephone Libraries, on one big problem coding in absolute
binary for the IBM 701, which used all the 32K registers then
available. After that experience I vowed never again would I ask
anyone to do such labor. Having heard about a symbolic system from
Poughkeepsie, IBM, I ask[ed] her to send for it and to use it on the
next problem…As I expected, she reported it was much easier…
So we told everyone about the new method, meaning about 100 people …
… To my knowledge only one person —yes, only one—of all 100 showed
any interest!
He also writes (most probably about [43]Rochester’s system for the 701)
[44][p. 26]:
Finally a more complete, and more useful, Symbolic Assembly Program
(SAP) was devised after more years than you are apt to believe …
most programmers continued their heroic absolute binary programming.
At the time SAP first appeared I would guess about 1% of the older
programmers were interested in it—using SAP was “sissy stuff” and a
real programmer would not stoop to wasting machine capacity to do
the assembly.
As Rochester developed SAP out of Poughkeepsie for IBM, it raises the
question if Hamming’s two anecdotes were referring to one and the same
event, and the earlier ‘symbolic system’ was also Rochester’s
assembler.
Nonetheless, Hamming estimates an initial interest level of about 1%
amongst experienced programmers, despite his report of an estimated 2x
productivity improvement.
Conclusion
The anecdotal evidence suggests assembly language was far from an
overnight success, despite the advantages it offered. Nonetheless
zooming forwards, it’s clear that the idea behind assembly took hold.
At a more abstract level, the idea of ‘buffering the user from the
machine itself’, most likely using the computers themselves to do so,
has carried forwards with many new layers added on after assembly;
Hamming cites a report that assembly and technologies after have
boosted programmer productivity by a factor of 90 over a 30 year period
[45][p. 26, 31].
Continued
If you read this and have better knowledge than we do, we would love to
see:
1. A copy of ‘Programming for A.R.C.’ online.
2. More studies (esp. quantitative) or anecdotes on the adoption of
assembly language.
3. Your story or opinion on why programmers initially kept programming
in machine code.
4. Reports on the increase in programmer productivity since the
internet.
Please share with us!
References Cited Multiple Times
* Campbell-Kelly, Martin, William Aspray, Nathan Ensmenger and
Jeffrey Yost. 2014. Computer: A History of the Information Machine.
Westview Press.
* Hamming, Richard. 2005. The Art and Science of Doing Engineering:
Learning to Learn Gordon and Breach Science Publishers.
* Salomon, David. 1993. Assemblers and Loaders. Ellis Horwood Ltd.
http://www.davidsalomon.name/assem.advertis/asl.pdf
March 4, 2020 · [46]programming languages
References
1.
https://blog.deta.sh/atom.xml
2.
https://localhost:4000/feed.json
3.
https://blog.deta.sh/
4.
https://blog.deta.sh/about
5.
https://deta.sh/
6.
https://en.wikipedia.org/wiki/Richard_Hamming
7.
https://blog.deta.sh/assembly/#hamming
8.
https://en.wikipedia.org/wiki/ENIAC
9.
https://blog.deta.sh/assembly/#campbell
10.
https://en.wikipedia.org/wiki/John_von_Neumann
11.
http://web.eah-jena.de/~kleine/history/machines/VonNeumann-1stDraftReportEDVAC.pdf
12.
https://blog.deta.sh/assembly/#hamming
13.
https://blog.deta.sh/assembly/#campbell
14.
https://blog.deta.sh/assembly/#campbell
15.
https://www.color-hex.com/color/6689c3
16.
https://blog.deta.sh/assembly/#saloman
17.
https://blog.deta.sh/assembly/#campbell
18.
https://en.wikipedia.org/wiki/Richard_Hamming
19.
https://blog.deta.sh/assembly/#hamming
20.
https://en.wikipedia.org/wiki/Andrew_Donald_Booth
21.
https://en.wikipedia.org/wiki/Kathleen_Booth
22.
https://en.wikipedia.org/wiki/Maurice_Wilkes
23.
https://blog.deta.sh/assembly/#campbell
24.
https://www.ams.org/journals/mcom/1954-08-046/S0025-5718-54-99336-9/S0025-5718-54-99336-9.pdf
25.
https://www.i-programmer.info/history/people/1253-andrew-booth.html
26.
http://www.mt-archive.info/Booth-1947.pdf
27.
https://hackaday.com/2018/08/21/kathleen-booth-assembling-early-computers-while-inventing-assembly/
28.
https://www.dcs.bbk.ac.uk/about/history/
29.
https://blog.deta.sh/assembly/#campbell
30.
https://blog.deta.sh/assembly/#campbell
31.
https://www.cl.cam.ac.uk/~mr10/Edsac/edsacposter.pdf
32.
https://www.computer.org/profiles/david-wheeler
33.
https://blog.deta.sh/assembly/#hamming
34. (
https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4640454)
35.
https://en.wikipedia.org/wiki/IBM_701
36.
https://en.wikipedia.org/wiki/IBM_650
37.
https://ia600101.us.archive.org/25/items/symbolic-programming/Image111817152723.facing_text.pdf
38.
http://www.columbia.edu/cu/computinghistory/650.html
39.
https://blog.deta.sh/assembly/#saloman
40.
http://worrydream.com/dbx/
41.
http://ei.cs.vt.edu/~history/VonNeumann.html
42.
https://blog.deta.sh/assembly/#hamming
43.
https://blog.deta.sh/assembly/#ibms-early-commercial-assemblers
44.
https://blog.deta.sh/assembly/#hamming
45.
https://blog.deta.sh/assembly/#hamming
46.
https://blog.deta.sh/tag/programming languages