README: proofing pass — typo fixes, factual corrections, updated bio

Full top-to-bottom proofread of the root README.

Narrow fixes (typos, grammar, formatting, broken syntax):

- Two malformed `</br>` closing tags replaced with `<br/>`.
- "See the [here](...)" → "See [this chapter](...) for..." (the
  previous phrasing had a dangling article and a preposition that
  did not parse cleanly).
- Stray angle brackets around a URL in the "Here is a link to 'a'
  main instruction set page" sentence removed (the brackets created
  a redundant autolink inside an already-formed markdown link).
- "quite straight forward" → "straightforward" (one word).
- "whose job it is turn high level languages" → inserted the
  missing "to".
- Added backticks around "gcc" and "g++" in the "We use gcc and g++
  directly..." sentence for consistency with every other reference
  to those tools in the file.
- `main.s` → `main.S` in the "Suppose main() is implemented in
  assembly language..." paragraph; the surrounding prose teaches
  the capital-S convention, and the lowercase `.s` was contradicting
  the very point being made.
- "for handing `#include`" → "for handling `#include`".
- "a general tool can is used by other languages" → "a general tool
  used by other languages" (extra "can is" was clearly a mid-edit
  remnant).

Substantive corrections:

- The linker description listed ".dlls on Windows" as an example of
  a statically-linked library file. DLLs are the canonical dynamic
  linking format on Windows; static on Windows is .lib. The sentence
  now correctly separates the two categories: `.a` (Linux) and `.lib`
  (Windows) for static, `.so` (Linux) and `.dll` (Windows) for
  dynamic.
- The "Twenty twenty three marks Perry's 19th year teaching..."
  paragraph was three years stale and referenced an ongoing count
  that had since ended. Replaced with a year-agnostic retirement
  statement summing the nineteen total years (ten UW Madison plus
  nine Carthage). The new phrasing will not age.
- Normalized "pre-processor" (hyphenated) to "preprocessor" (one
  word) throughout the "C Preprocessor" subsection, matching the
  four unhyphenated uses that appeared earlier in the same document
  and aligning with common modern style. Section heading updated to
  match.

Expanded author bio:

- Added a new paragraph in "About The Author" surfacing credentials
  directly relevant to this book's systems/assembly audience: the
  undergraduate V6 Unix kernel study on a PDP-11/60, the subsequent
  Bell Labs Unix-internals teaching role, priority on the earliest
  known software keylogger, the 1985 appearance on Fred Fish Disk #1
  (the first volume of the longest-running public-domain software
  library in personal-computing history), named references to the
  ASDG / TAD / ADPro / Elastic Reality commercial lineage, and the
  "Loaders → Operators → Savers" architectural throughline that has
  now evolved into the "Sensor → Operator → Emitter" pipeline in
  the author's current open-source GlowUp project (home automation
  broader than just lighting). The GlowUp repo at
  github.com/pkivolowitz/lifx is linked.

Rejected alternatives:

- Rolling the "19th year" numbers forward to 2026 rather than
  switching to the retirement framing — rejected because the count
  is no longer ongoing and any year-pinned phrasing will age the
  same way again.
- A Front-Matter-level authorship / biography section rather than
  an addition to the existing "About The Author" section — rejected
  as tonally too heavy; biography belongs where biography already
  lives.
- Fixing the DLL/static-linking text by simply renaming "statically
  linked" to "dynamically linked" for the .dll example — rejected
  because the surrounding sentence teaches the concept of library
  linking and benefits from showing both categories side by side.

No test coverage applies; this is prose.
This commit is contained in:
Perry Kivolowitz 2026-04-19 03:05:38 -05:00
parent fd674539a0
commit 4805083a87

View file

@ -11,9 +11,9 @@ We drive home a very sharp point:
<center> <center>
<i>Assembly language is nothing to be scared of!</i> <i>Assembly language is nothing to be scared of!</i>
</center> </center>
</br> <br/>
</br> <br/>
<h2> <h2>
<a href="#table-of-contents"> <a href="#table-of-contents">
@ -62,7 +62,7 @@ we call `write` from the assembly language.
This version of the system call `write` is a wrapper function built into This version of the system call `write` is a wrapper function built into
the C-runtime (CRT) which handles the lower level details of performing the C-runtime (CRT) which handles the lower level details of performing
a system call. See the [here](./more/system_calls/README.md) on what a system call. See [this chapter](./more/system_calls/README.md) for what
actually happens inside these wrapper functions. actually happens inside these wrapper functions.
The benefit of using the CRT wrappers is that there are differences The benefit of using the CRT wrappers is that there are differences
@ -83,13 +83,13 @@ documentation in general. It really can be maddening.
Within the text we will provide germane links as appropriate. Within the text we will provide germane links as appropriate.
[Here](<https://developer.arm.com/documentation/ddi0596/2021-12?lang=en>) [Here](https://developer.arm.com/documentation/ddi0596/2021-12?lang=en)
is a link to "a" main instruction set page. is a link to "a" main instruction set page.
### What you need to work with assembly language on Linux ### What you need to work with assembly language on Linux
Getting the tools for assembly language development is quite straight Getting the tools for assembly language development is quite
forward - perhaps you already have them. Using `apt` from the Linux straightforward - perhaps you already have them. Using `apt` from the Linux
terminal, say: terminal, say:
```text ```text
@ -128,20 +128,21 @@ to only one step in a build sequence. What we talk about as being the
if your file ends in a lower case s or any other file extension if your file ends in a lower case s or any other file extension
depending upon your system. depending upon your system.
* The *actual* compiler, whose job it is turn high level languages * The *actual* compiler, whose job it is to turn high level languages
such as C and C++ into assembly language. such as C and C++ into assembly language.
* The assembler, which turns assembly language into machine code which * The assembler, which turns assembly language into machine code which
is not quite ready for execution. is not quite ready for execution.
* And finally, the linker, which combines potentially many intermediate * And finally, the linker, which combines potentially many intermediate
machine code files (called object files), potentially many library machine code files (called object files) with potentially many library
files (statically linked .dlls on Windows and .a files on Linux). The files (statically linked `.a` files on Linux or `.lib` files on
linker is the last step in this chain. Windows; dynamically linked `.so` files on Linux or `.dll` files on
Windows). The linker is the last step in this chain.
[Here](https://youtu.be/Iv3psS4n9j8) is a video explaining this process. [Here](https://youtu.be/Iv3psS4n9j8) is a video explaining this process.
We use gcc and g++ directly because, being umbrellas, they automate We use `gcc` and `g++` directly because, being umbrellas, they automate
the above steps and automatically link with the CRT. the above steps and automatically link with the CRT.
Suppose you've implemented `main()` in a C file (main.c) and want to Suppose you've implemented `main()` in a C file (main.c) and want to
@ -171,7 +172,7 @@ method, the `.o` files are removed without you seeing them.
### If there are no C or C++ modules used ### If there are no C or C++ modules used
Suppose `main()` is implemented in assembly language and `main.s` is Suppose `main()` is implemented in assembly language and `main.S` is
self-contained, then simply: self-contained, then simply:
```text ```text
@ -187,15 +188,15 @@ gcc -g main.S
Without the `-g` command line option, your debugger may not properly Without the `-g` command line option, your debugger may not properly
operate. operate.
#### The C Pre-Processor #### The C Preprocessor
To repeat, if you want `gcc` to run your code through the C To repeat, if you want `gcc` to run your code through the C
pre-processor (for handing `#include` for example), name your assembly preprocessor (for handling `#include` for example), name your assembly
language source code files with a capital S. So, on Linux: language source code files with a capital S. So, on Linux:
`gcc main.s` `gcc main.s`
Will not go through the C pre-processor but Will not go through the C preprocessor but
`gcc main.S` `gcc main.S`
@ -215,7 +216,7 @@ on ARM:
/usr/bin/ld /usr/bin/ld
``` ```
`cpp` is the C preprocessor - it is a general tool can is used by other `cpp` is the C preprocessor - it is a general tool used by other
languages as well (C++, for example). languages as well (C++, for example).
`cc1` is the actual compiler. `cc1` is the actual compiler.
@ -367,9 +368,24 @@ for his invention of Shape Driven Warping and Morphing. This is the
technique responsible for many of the famous effects in Forrest Gump, technique responsible for many of the famous effects in Forrest Gump,
Titanic and Stargate. Titanic and Stargate.
Twenty twenty three marks Perry's 19th year teaching Computer Science at Perry retired from college teaching after nineteen years — ten at UW
the college level, ten years at the UW Madison and now 8+ at Carthage Madison and nine at Carthage College.
College.
Perry's early career ran deep in Unix and the Amiga. As an undergraduate
he read the V6 Unix kernel from source on a PDP-11/60; he later taught
Unix internals at Bell Labs. He wrote what is believed to be the first
software keylogger. In 1985 his work appeared on Fred Fish Disk #1
the first volume of the longest-running public-domain software library
in personal-computing history. His commercial work through **ASDG**,
**TAD**, **ADPro**, and **Elastic Reality** centered on a "Loaders →
Operators → Savers" pipeline architecture he invented and carried
through five product generations across desktop publishing, multimedia,
video, and film. The same architecture has most recently evolved into
a **Sensor → Operator → Emitter (SOE)** pipeline in his current
open-source project **GlowUp**
([github.com/pkivolowitz/lifx](https://github.com/pkivolowitz/lifx)) —
a generalized sensor-fusion and effectuation platform that began as
smart-lighting control and now runs an ever-growing share of his home.
Assembly language is a passion for Perry having worked in the following Assembly language is a passion for Perry having worked in the following
ISAs (in chronological order): ISAs (in chronological order):