Reference

Motorola 68000

115 mnemonics, 162 forms, words big-endian. Generated from crates/isa/src/m68k.rs.

The 68000 packs operand fields into the opcode word itself, and how many extension words follow depends on the effective address those fields select — so a form gives its base opcode word, the sizes it assembles at, and its operands, rather than a fixed byte count.

This is the curriculum subset, and it grows: a mnemonic absent here is absent from the assembler too.

Operands

Written Meaning
<ea> A general effective address
#vec A 4-bit TRAP vector
#imm8 MOVEQ’s signed 8-bit immediate
Dn A data register number
CCR The condition-code register
SR The status register
USP The user stack pointer
An An address register number
#imm An immediate sized by the instruction
#imm16 An immediate as one extension word
disp16 A PC-relative branch displacement, word form
(An) An address register in a fixed indirect mode
#1-8 A 3-bit quick immediate, 8 encoded as 000
reglist A register-list mask

RTS

Return from subroutine

Sizes Base word Operands
.w 4E75

NOP

No operation

Sizes Base word Operands
.w 4E71

JMP

Jump

Sizes Base word Operands
.w 4EC0 <ea>

JSR

Jump to subroutine

Sizes Base word Operands
.w 4E80 <ea>

RTE

Return from exception

Sizes Base word Operands
.w 4E73

RTR

Return and restore condition codes

Sizes Base word Operands
.w 4E77

TRAPV

Trap on overflow

Sizes Base word Operands
.w 4E76

TRAP

Trap

Sizes Base word Operands
.w 4E40 #vec

RESET

Reset external devices

Sizes Base word Operands
.w 4E70

ILLEGAL

Take the illegal-instruction trap

Sizes Base word Operands
.w 4AFC

MOVEQ

Move quick (sign-extended 8-bit to long)

Sizes Base word Operands
.l 7000 #imm8, Dn

MOVEA

Move address

Sizes Base word Operands
.b/.w/.l 0000 <ea>, <ea>

MOVE

Move data

Sizes Base word Operands
.b/.w/.l 0000 <ea>, <ea>
.w 44C0 <ea>, CCR
.w 46C0 <ea>, SR
.w 40C0 SR, <ea>
.w 4E68 USP, An
.w 4E60 An, USP

LEA

Load effective address

Sizes Base word Operands
.l 41C0 <ea>, An

ADD

Add binary

Sizes Base word Operands
.b/.w/.l D000 <ea>, Dn
.b/.w/.l D100 Dn, <ea>
.w/.l D0C0 <ea>, An

ADDI

Add immediate

Sizes Base word Operands
.b/.w/.l 0600 #imm, <ea>

SUBI

Subtract immediate

Sizes Base word Operands
.b/.w/.l 0400 #imm, <ea>

CMPI

Compare immediate

Sizes Base word Operands
.b/.w/.l 0C00 #imm, <ea>

ORI

Inclusive-OR immediate

Sizes Base word Operands
.b/.w/.l 0000 #imm, <ea>
.w 003C #imm16, CCR
.w 007C #imm16, SR

ANDI

AND immediate

Sizes Base word Operands
.b/.w/.l 0200 #imm, <ea>
.w 023C #imm16, CCR
.w 027C #imm16, SR

EORI

Exclusive-OR immediate

Sizes Base word Operands
.b/.w/.l 0A00 #imm, <ea>
.w 0A3C #imm16, CCR
.w 0A7C #imm16, SR

BRA

Branch always

Sizes Base word Operands
.w 6000 disp16

BSR

Branch to subroutine

Sizes Base word Operands
.w 6100 disp16

BEQ

Branch if equal

Sizes Base word Operands
.w 6700 disp16

BNE

Branch if not equal

Sizes Base word Operands
.w 6600 disp16

BHI

Branch if higher

Sizes Base word Operands
.w 6200 disp16

BLS

Branch if lower or same

Sizes Base word Operands
.w 6300 disp16

BCC

Branch if carry clear (higher or same)

Sizes Base word Operands
.w 6400 disp16

BCS

Branch if carry set (lower)

Sizes Base word Operands
.w 6500 disp16

BVC

Branch if overflow clear

Sizes Base word Operands
.w 6800 disp16

BVS

Branch if overflow set

Sizes Base word Operands
.w 6900 disp16

BGE

Branch if greater or equal

Sizes Base word Operands
.w 6C00 disp16

BLT

Branch if less than

Sizes Base word Operands
.w 6D00 disp16

BGT

Branch if greater than

Sizes Base word Operands
.w 6E00 disp16

BLE

Branch if less or equal

Sizes Base word Operands
.w 6F00 disp16

BMI

Branch if minus

Sizes Base word Operands
.w 6B00 disp16

BPL

Branch if plus

Sizes Base word Operands
.w 6A00 disp16

SUB

Subtract binary

Sizes Base word Operands
.b/.w/.l 9000 <ea>, Dn
.b/.w/.l 9100 Dn, <ea>
.w/.l 90C0 <ea>, An

AND

Logical AND

Sizes Base word Operands
.b/.w/.l C000 <ea>, Dn
.b/.w/.l C100 Dn, <ea>

OR

Logical OR

Sizes Base word Operands
.b/.w/.l 8000 <ea>, Dn
.b/.w/.l 8100 Dn, <ea>

CMP

Compare

Sizes Base word Operands
.b/.w/.l B000 <ea>, Dn
.w/.l B0C0 <ea>, An

EOR

Exclusive OR

Sizes Base word Operands
.b/.w/.l B100 Dn, <ea>

MULU

Unsigned multiply

Sizes Base word Operands
.w C0C0 <ea>, Dn

DIVU

Unsigned divide

Sizes Base word Operands
.w 80C0 <ea>, Dn

MULS

Signed multiply

Sizes Base word Operands
.w C1C0 <ea>, Dn

DIVS

Signed divide

Sizes Base word Operands
.w 81C0 <ea>, Dn

ADDX

Add extended

Sizes Base word Operands
.b/.w/.l D100 Dn, Dn
.b/.w/.l D108 (An), (An)

SUBX

Subtract extended

Sizes Base word Operands
.b/.w/.l 9100 Dn, Dn
.b/.w/.l 9108 (An), (An)

ABCD

Add decimal with extend

Sizes Base word Operands
.b C100 Dn, Dn
.b C108 (An), (An)

SBCD

Subtract decimal with extend

Sizes Base word Operands
.b 8100 Dn, Dn
.b 8108 (An), (An)

CMPM

Compare memory with postincrement

Sizes Base word Operands
.b/.w/.l B108 (An), (An)

EXG

Exchange registers

Sizes Base word Operands
.w C140 Dn, Dn
.w C148 An, An
.w C188 Dn, An
.w C188 An, Dn

TST

Test (set flags)

Sizes Base word Operands
.b/.w/.l 4A00 <ea>

CLR

Clear

Sizes Base word Operands
.b/.w/.l 4200 <ea>

NEG

Negate

Sizes Base word Operands
.b/.w/.l 4400 <ea>

NOT

Logical complement

Sizes Base word Operands
.b/.w/.l 4600 <ea>

NEGX

Negate with extend

Sizes Base word Operands
.b/.w/.l 4000 <ea>

NBCD

Negate BCD with extend

Sizes Base word Operands
.b 4800 <ea>

TAS

Test and set (atomic)

Sizes Base word Operands
.b 4AC0 <ea>

PEA

Push effective address

Sizes Base word Operands
.l 4840 <ea>

Link and allocate stack frame

Sizes Base word Operands
.w 4E50 An, #imm16

UNLK

Unlink stack frame

Sizes Base word Operands
.w 4E58 An

STOP

Load status register and stop

Sizes Base word Operands
.w 4E72 #imm16

CHK

Check register against bounds

Sizes Base word Operands
.w 4180 <ea>, Dn

ADDQ

Add quick

Sizes Base word Operands
.b/.w/.l 5000 #1-8, <ea>

SUBQ

Subtract quick

Sizes Base word Operands
.b/.w/.l 5100 #1-8, <ea>

SWAP

Swap register halves

Sizes Base word Operands
.w 4840 Dn

EXT

Sign-extend

Sizes Base word Operands
.w/.l 4880 Dn

DBF

Decrement and branch (never on condition)

Sizes Base word Operands
.w 51C8 Dn, disp16

DBRA

Decrement and branch (alias of DBF)

Sizes Base word Operands
.w 51C8 Dn, disp16

DBT

Decrement and branch unless true

Sizes Base word Operands
.w 50C8 Dn, disp16

DBHI

Decrement and branch unless higher

Sizes Base word Operands
.w 52C8 Dn, disp16

DBLS

Decrement and branch unless lower or same

Sizes Base word Operands
.w 53C8 Dn, disp16

DBCC

Decrement and branch unless carry clear

Sizes Base word Operands
.w 54C8 Dn, disp16

DBCS

Decrement and branch unless carry set

Sizes Base word Operands
.w 55C8 Dn, disp16

DBNE

Decrement and branch unless not equal

Sizes Base word Operands
.w 56C8 Dn, disp16

DBEQ

Decrement and branch unless equal

Sizes Base word Operands
.w 57C8 Dn, disp16

DBVC

Decrement and branch unless overflow clear

Sizes Base word Operands
.w 58C8 Dn, disp16

DBVS

Decrement and branch unless overflow set

Sizes Base word Operands
.w 59C8 Dn, disp16

DBPL

Decrement and branch unless plus

Sizes Base word Operands
.w 5AC8 Dn, disp16

DBMI

Decrement and branch unless minus

Sizes Base word Operands
.w 5BC8 Dn, disp16

DBGE

Decrement and branch unless greater or equal

Sizes Base word Operands
.w 5CC8 Dn, disp16

DBLT

Decrement and branch unless less than

Sizes Base word Operands
.w 5DC8 Dn, disp16

DBGT

Decrement and branch unless greater than

Sizes Base word Operands
.w 5EC8 Dn, disp16

DBLE

Decrement and branch unless less or equal

Sizes Base word Operands
.w 5FC8 Dn, disp16

SNE

Set if not equal

Sizes Base word Operands
.b 56C0 <ea>

SEQ

Set if equal

Sizes Base word Operands
.b 57C0 <ea>

ST

Set always

Sizes Base word Operands
.b 50C0 <ea>

SF

Set never (clear)

Sizes Base word Operands
.b 51C0 <ea>

SHI

Set if higher

Sizes Base word Operands
.b 52C0 <ea>

SLS

Set if lower or same

Sizes Base word Operands
.b 53C0 <ea>

SCC

Set if carry clear (higher or same)

Sizes Base word Operands
.b 54C0 <ea>

SCS

Set if carry set (lower)

Sizes Base word Operands
.b 55C0 <ea>

SVC

Set if overflow clear

Sizes Base word Operands
.b 58C0 <ea>

SVS

Set if overflow set

Sizes Base word Operands
.b 59C0 <ea>

SPL

Set if plus

Sizes Base word Operands
.b 5AC0 <ea>

SMI

Set if minus

Sizes Base word Operands
.b 5BC0 <ea>

SGE

Set if greater or equal

Sizes Base word Operands
.b 5CC0 <ea>

SLT

Set if less than

Sizes Base word Operands
.b 5DC0 <ea>

SGT

Set if greater than

Sizes Base word Operands
.b 5EC0 <ea>

SLE

Set if less or equal

Sizes Base word Operands
.b 5FC0 <ea>

LSL

Logical shift left

Sizes Base word Operands
.b/.w/.l E108 #1-8, Dn
.b/.w/.l E128 Dn, Dn
.w E3C0 <ea>

LSR

Logical shift right

Sizes Base word Operands
.b/.w/.l E008 #1-8, Dn
.b/.w/.l E028 Dn, Dn
.w E2C0 <ea>

ASR

Arithmetic shift right

Sizes Base word Operands
.b/.w/.l E000 #1-8, Dn
.b/.w/.l E020 Dn, Dn
.w E0C0 <ea>

ASL

Arithmetic shift left

Sizes Base word Operands
.b/.w/.l E100 #1-8, Dn
.b/.w/.l E120 Dn, Dn
.w E1C0 <ea>

ROXR

Rotate right through extend

Sizes Base word Operands
.b/.w/.l E010 #1-8, Dn
.b/.w/.l E030 Dn, Dn
.w E4C0 <ea>

ROXL

Rotate left through extend

Sizes Base word Operands
.b/.w/.l E110 #1-8, Dn
.b/.w/.l E130 Dn, Dn
.w E5C0 <ea>

ROR

Rotate right

Sizes Base word Operands
.b/.w/.l E018 #1-8, Dn
.b/.w/.l E038 Dn, Dn
.w E6C0 <ea>

ROL

Rotate left

Sizes Base word Operands
.b/.w/.l E118 #1-8, Dn
.b/.w/.l E138 Dn, Dn
.w E7C0 <ea>

BTST

Test a bit

Sizes Base word Operands
.b 0800 #imm16, <ea>
.b 0100 Dn, <ea>

BSET

Test and set a bit

Sizes Base word Operands
.b 08C0 #imm16, <ea>
.b 01C0 Dn, <ea>

BCHG

Test and change a bit

Sizes Base word Operands
.b 0840 #imm16, <ea>
.b 0140 Dn, <ea>

BCLR

Test and clear a bit

Sizes Base word Operands
.b 0880 #imm16, <ea>
.b 0180 Dn, <ea>

MOVEM

Move multiple registers

Sizes Base word Operands
.w/.l 4880 reglist, <ea>
.w/.l 4C80 <ea>, reglist

MOVEP

Move peripheral data

Sizes Base word Operands
.w/.l 0108 disp16, Dn
.w/.l 0188 Dn, disp16

Machines

Commodore Amiga

Sources

Encodings on this page were taken from:

  • M68000 Family Programmer’s Reference Manual — Motorola, 1992
  • MC68000 8-/16-/32-Bit Microprocessors User’s Manual — Motorola, 1993