eolas/zk/Machine code.md

62 lines
2.5 KiB
Markdown
Raw Normal View History

2024-03-11 07:00:04 +00:00
---
id: iqh8
title: Machine_code
tags: [binary, CPU]
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.
2024-03-11 07:10:03 +00:00
## 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
```
2024-03-12 07:10:03 +00:00
This 32-bit line of binary has a series of instructions embedded within it. We
2024-03-11 07:10:03 +00:00
partition each part of the sequence below, from left to right, mapping it to the
instruction:
2024-03-11 07:20:03 +00:00
| 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 | -- | -- |
2024-03-12 07:00:03 +00:00
| 0111 | destination register | destination is 0111 which means `r7` |
2024-03-11 07:20:03 +00:00
| 0000 | -- | -- |
| 00000100 | immediate value | the binary representation of decimal '4' |
2024-03-12 07:10:03 +00:00
- The blank zeros are also instructions, they are just not used in this
2024-03-11 07:20:03 +00:00
instruction
2024-03-12 07:10:03 +00:00
- The condition sequence tells us the instruction should run in all conditions
not only under certain circumstances
2024-03-11 07:20:03 +00:00
2024-03-12 07:10:03 +00:00
- 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`
2024-03-12 07:20:03 +00:00
## Difficulty
2024-03-12 07:10:03 +00:00
2024-03-12 07:20:03 +00:00
Binary sequences are hard to understand, even if converted to the
[[Hexadecimal_number_system]]. We have a better way of managing operations on
2024-03-12 07:30:03 +00:00
the machine level: [assembly](zk/Assembly.md)