bfins
Insert bit field
Inserts the low bits of a data register into a bit field, leaving the bits around it as they were.
Select opt p=68020, or use opt bit with the 68000 or 68010, before any code or data
- ● set from the result
- 0 always 0
- – not changed
Forms
Operands
Dn- A data register,
d0tod7. More <ea>- An operand using one of the addressing modes listed for this form. The list determines whether it can be a register, memory or an immediate value. With
opt p=68020, an allowedd(An,Xn)ord(PC,Xn)mode also permits the corresponding 68020 indexed and memory indirect forms. See 68020 addressing. More {offset:width}- A field of 1 to 32 bits, written immediately after the operand. Literal offsets range from 0 to 31, and literal widths from 1 to 32. Either may be a data register, as in
{d1:d2}. See the linked section for register values, negative memory offsets and wrapping. More
The field’s width determines how many source bits are used. For example, bfins d1, (a0){0:5} writes the low 5 bits of d1 into the highest 5 bits of the byte at a0.
N copies the highest bit of the value inserted, and Z is set if that value is zero. V and C are cleared, and X is unchanged. bfextu extracts the value again.
Write the field as {offset:width} immediately after its operand. It selects 1 to 32 bits, counted from bit 31 of a data register or bit 7 of the byte at the memory address. The offset and width may each be a constant or a data register. See bit fields for their ranges, register values and wrapping rules.
opt p=68020
* --- Build a 16-bit colour from its red, green and blue ---
lea color, a0
moveq #31, d0
bfins d0, (a0){0:5} ; red, in the first 5 bits
moveq #0, d0
bfins d0, (a0){5:6} ; green, in the next 6
moveq #12, d0
bfins d0, (a0){11:5} ; blue, in the last 5
move.w (a0), d1 ; d1 = 63500, which is %1111100000001100
bra END
color:
dc.w 0
END: