37.4. The general structure of the instructions
All instructions consist of one byte, denoting the opcode, and
some number of operands.
The conversion from a byte (in the range 0..255) to the opcode is
performed by lookup in the table contained in the file bytecode.d
.
There are the following types of operands, denoted by different
letters:
k
, n
, m
, l
- A (nonnegative) numeric operand.
The next byte is read.
If its bit 7 is zero, then the bits 6..0 give the value (7 bits).
If its bit 7 is one, then the bits 6..0 and the subsequent byte
together form the value (15 bits).
b
- A (nonnegative) 1-byte operand.
The next byte is read and is the value.
label
- A label operand.
A signed numeric operand is read: The next byte is read.
If its bit 7 is zero, then the bits 6..0 give the value
(7 bits, sign-extended).
If its bit 7 is one, then the bits 6..0 and the subsequent byte
together form the value (15 bits, sign-extended).
If the latter 15-bit result is zero, then four more bytes are read
and put together (32 bits, sign-extended).
Finally, the bytecode pointer for the target is computed as the
current bytecode pointer (pointing after the operand just read), plus
the signed numeric operand.