Machine code
No matter how a program was originally written, it eventually needs to execute on a CPU as a series of machine language instructions.
Example machine instruction
The following machine instruction is an instruction that would be understood by an 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 scenario1
means the value is in the instruction. If it were0
, 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