65 lines
2.6 KiB
Markdown
65 lines
2.6 KiB
Markdown
![]() |
---
|
||
|
id: iqh8
|
||
|
tags:
|
||
|
- binary
|
||
|
- CPU
|
||
|
- hardware
|
||
|
- computer-architecture
|
||
|
created: Monday, March 11, 2024
|
||
|
---
|
||
|
|
||
|
# Machine code
|
||
|
|
||
|
No matter how a program was originally written, it eventually needs to execute
|
||
|
on a [[CPU_architecture|CPU]] as a series of machine language instructions.
|
||
|
|
||
|
## Example machine instruction
|
||
|
|
||
|
The following machine instruction is an instruction that would be understood by
|
||
|
an [[Instruction_set_architectures| ARM ISA]]. It moves the number `4` into the
|
||
|
`r7` register:
|
||
|
|
||
|
```
|
||
|
11100011101000000111000000000100
|
||
|
```
|
||
|
|
||
|
This 32-bit line of binary has a series of instructions embedded within it. We
|
||
|
partition each part of the sequence below, from left to right, mapping it to the
|
||
|
instruction:
|
||
|
|
||
|
| Binary sequence | Instruction | Action |
|
||
|
| --------------- | -------------------- | ---------------------------------------- |
|
||
|
| 1110 | condition | always execute (unconditional) |
|
||
|
| 00 | -- | -- |
|
||
|
| 1 | immediate | value is in the last 8 bits |
|
||
|
| 1101 | opcode | `mov` : move the value |
|
||
|
| 0 | -- | -- |
|
||
|
| 0000 | -- | -- |
|
||
|
| 0111 | destination register | destination is 0111 which means `r7` |
|
||
|
| 0000 | -- | -- |
|
||
|
| 00000100 | immediate value | the binary representation of decimal '4' |
|
||
|
|
||
|
- The blank zeros are also instructions, they are just not used in this
|
||
|
instruction
|
||
|
|
||
|
- The condition sequence tells us the instruction should run in all conditions
|
||
|
not only under certain circumstances
|
||
|
|
||
|
- The immediate bit (`1`) tells us whether the the value we are accessing is
|
||
|
contained within the instruction or whether it is stored in a register. In
|
||
|
this scenario `1` means the value is in the instruction. If it were `0`, the
|
||
|
register where the value is located would be specified elsewhere in the
|
||
|
instruction (in one of the currently blank sequences).
|
||
|
|
||
|
- The opcode correspoons to `mov` the value.
|
||
|
|
||
|
- THe destination register details where the value should be moved to (`r7`)
|
||
|
|
||
|
- Finally, the immediate value is equivalent to decimal `4`
|
||
|
|
||
|
## Difficulty
|
||
|
|
||
|
Binary sequences are hard to understand, even if converted to the
|
||
|
[[Hexadecimal_number_system]]. We have a better way of managing operations on
|
||
|
the machine level: [assembly](Assembly.md)
|