2.6 KiB
id | tags | created | ||||
---|---|---|---|---|---|---|
iqh8 |
|
Monday, March 11, 2024 |
Machine code
No matter how a program was originally written, it eventually needs to execute on a CPU_architecture 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. 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