From lessons 1 to 4 we have focused on preparing the development environment. If you expect this lesson to be one where you start jamming some code in Asm-One then my dear friend, you are wrong :-) the journey is long, and I promise it will be like a trip.
It’s pointless to start learning a language if you don’t know some basics about its grammar. That is not to sound accurate to others, and it is to learn how to speak the things you haven’t learned yet and use logic and rules to go beyond what you have memorized already.
We’re not going to have a computer class like for a paid university; if you want to fall asleep, you can take one of those. I intend to keep it light and fun while still touching the basics to get somewhere.
From Code to Binary
Both an assembler and a compiler translate source files into object files.
Object files are effectively an intermediate step before the final binary output generated by the linker.
The linker takes the specified object files and resolves relocation or correct records. This is what makes the 10100101 for the CPU that you are targeting.
These relocation records are made when the compiler/assembler doesn’t know the address of a function or variable used in the source code and generates a reference for it by name, which can be resolved by the linker.
You will be dealing with memory addresses; they are not exactly the easiest thing to remember. Therefore understanding units (the essential elements of a system, like centimeters for the metric system) is important. But, to the minimum, do not lose your mind. So here is a quick way to understand the foundational pieces of it.
Entering the machine
Once the machine code has been generated, you are looking at a bunch of 1010101. Each digit is called “bit” and they can have only two values. ZERO to indicate OFF (like a light switch) or ONE to indicate ON.
They normally come in quadruplets, that is four-digit, grouped together like this: 1010. That is called nibble which forms 1 byte. You can represent a nibble in multiple counting systems, binary, hexadecimal, and decimal (and more).
Every row that you see above is an alternative way of representing the same value.
If you think like an Imperial rather than in metric think inches are bit and bytes are feet. Miles are words and so on...
Mama isn’t the first word for a baby computer
Nibbles can be grouped together to represent multiple data types. The ones used in the 68K assembler are:
- two nybbles (e.g. 0100 1101), form ONE “byte”.
- two “bytes” (e.g. 0100 1101 1011 0000), make ONE “word”.
- two “words” (e.g. 0100 1101 1011 0000 1111 0001 0000 0110), are known as “long-word”.
If your brain is scrambling, don’t worry that is a sign that you still have neurons to cook. Keep going; the worst is ahead of us, you are good for now. Below there’s a summary to hit brain rehab above for what we just smashed our brain on.
In any higher language, you might have programmed before you never had to worry about all these details because the abstraction level in higher languages is such that everything else is taken care of you.
In this lesson, we have addressed the foundational pieces that will allow us to understand “addressing” which is a fancy way of saying where and how memory is stored.