mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-24 21:34:06 -06:00
1.8 KiB
1.8 KiB
| title | aliases | tags | ||
|---|---|---|---|---|
| 05-6809-assembly |
|
Warnings
- different CPU architectures have their own machine codes and their own assembly languages
- assembly language programs are not portable across CPU architectures (e.g., 6809 to x86 ARM) but are often backwards compatible (e.g., x86_64 family)
Working up
- High level languages
- ↓ Compiler ↓
- Assembly language
- ↓ Assembler ↓
- Machine code
- ↓ Instruction Set ↓
- Hardware
Motorola MC6809 CPU
- 6809 (1978) 9000 transistors
- Apple M1 Ultra (2022) 114,000,000,000 transistors
Machine Code
- Computers are controlled by bit-patterns.
- These patterns determine what the CPU does and to which memory location
- Assign values to registers
- load registers from memory
- add numbers to registers
- store registers in memory
- and so on
- This is called machine code
It is not very easy to programm this way
- slow
- not human readable
- difficult to debug
- etc
To make the process easier, we assign names to the numbers. This allows us to program symbolically. We call this assembly language programming
Programmer's Model
The programmer's model of a computer is not the same as the hardware model. The hardware makes the computer look a par
6502 Fibonacci in Machine Code
Example program:
- 4C 13 00 00 00 00 00 00
- 00 00 00 00 00 00 00 00
- 00 00 00 A2 10 A9 01 8D
- 10 00 8D 11 00 8D 12 00
- A9 31 8D 0F 00 8D 0F 00
- AD 10 00 6D 11 00 8D 12
- 00 69 30 8D 0F 00 AD 11
- 00 8D 10 00 AD 12 00 8D
- 11 00 CA D0 E3
