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 sequenceInstructionAction
1110conditionalways execute (unconditional)
00
1immediatevalue is in the last 8 bits
1101opcodemov : move the value
0
0000
0111destination registerdestination is 0111 which means r7
0000
00000100immediate valuethe 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