---
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.

## 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)
