bfexts

Extract bit field signed 6802068000 with opt bit

Copies a bit field into a data register as a signed number, filling the bits above it with copies of its highest bit.

Select opt p=68020, or use opt bit with the 68000 or 68010, before any code or data

XNZVC –●●00
  • ● set from the result
  • 0 always 0
  • – not changed

Forms

Operands

<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 allowed d(An,Xn) or d(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
Dn
A data register, d0 to d7. More

The field is placed in the register’s low bits and sign-extended to long. For example, a 4-bit field containing %1110 becomes $FFFFFFFE (-2).

N copies the field’s highest bit, and Z is set if the field is zero. V and C are cleared, and X is unchanged. bfextu fills the higher bits with zeros instead.

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
* --- Two signed numbers of 4 bits in one byte ---
lea pair, a0
bfexts (a0){0:4}, d0 ; %0011: d0 = 3
bfexts (a0){4:4}, d1 ; %1110, its top bit copied above it: d1 = -2
bfextu (a0){4:4}, d2 ; the same bits as an unsigned number: d2 = 14
bra END

pair:
    dc.b %00111110, 0

END: