64 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			64 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)
 |