NEC V30MZ instruction set
Note that this page is a work in progress.
AAA | AAD | AAM | AAS | ADC | ADD | AND | BOUND | CALL | CBW | CLC |
CLD | CLI | CMC | CMP | CMPSB | CMPSW | CS | CWD | DAA | DAS | DEC |
DIV | DS | ENTER | ES | HLT | IDIV | IMUL | IN | INC | INSB | INSW |
INT | INTO | IRET | JA | JBE | JC | JCXZ | JG | JGE | JL | JLE |
JMP | JNC | JNO | JNP | JNS | JNZ | JO | JP | JS | JZ | LAHF |
LDS | LEA | LEAVE | LES | LOCK | LODSB | LODSW | LOOP | LOOPE | LOOPNE | MOV |
MOVSB | MOVSW | MUL | NEG | NOP | NOT | OR | OUT | OUTSB | OUTSW | POLL |
POP | POPA | POPF | PUSH | PUSHA | PUSHF | RCL | RCR | REP | REPNE | RET |
RETF | ROL | ROR | SAHF | SAR | SBB | SCASB | SCASW | SHL | SHR | SS |
STC | STD | STI | STOSB | STOSW | SUB | TEST | XCHG | XLAT | XOR |
Official instructions by type
Type | Instructions | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Memory | MOV | XCHG | XLAT | LEA | LDS | LES | IN | OUT | ||||||||
Ports | IN | OUT | INSB | OUTSB | INSW | OUTSW | ||||||||||
Arithmetic | ADD | SUB | ADC | SBB | INC | DEC | MUL | DIV | IMUL | IDIV | CMP | NEG | ||||
Numeric | CBW | CWD | AAA | AAS | AAM | AAD | DAA | DAS | ||||||||
Shift | ROL | ROR | RCL | RCR | SHL | SHR | SAR | |||||||||
Bitwise | AND | OR | XOR | NOT | TEST | |||||||||||
Branch | JC | JNC | JZ | JNZ | JBE | JA | JO | JNO | JP | JNP | JS | JNS | JL | JGE | JLE | JG |
Jump | JMP | CALL | RET | RETF | ||||||||||||
Loop | LOOP | LOOPE | LOOPNE | |||||||||||||
Interrupt | INT | IRET | INTO | HLT | BOUND | |||||||||||
Stack | PUSH | POP | PUSHA | POPA | PUSHF | POPF | ||||||||||
Flags | CLC | STC | CLD | STD | CLI | STI | CMC | LAHF | SAHF | |||||||
Prefix | CS | DS | ES | SS | ||||||||||||
String | REP | REPE | REPNE | MOVSB | MOVSW | LODSB | STOSB | LODSW | STOSW | CMPSB | SCASB | CMPSW | SCASW | |||
Other | NOP | ENTER | LEAVE | LOCK | POLL |
Instruction encoding
ModR/M byte
The ModR/M byte is used in most addressing modes which reference a memory location. This byte consists of three bitfield values:
- oo - Mode;
- rrr - Two possible functions:
- Register (for addressing modes which require both a register and a register/memory operand),
- Opcode extension (for some opcodes' addressing modes which do not have such a requirement);
- mmm - Register/Memory.
The Mode and Register/Memory bitfields can refer to a memory location or to a register, as shown in the table below. In some addressing modes, the Register field also refers to a register; it is always interpreted as if Mode was equal to 11.
R/M \ Mode | 00 | 01 | 10 | 11 (byte) | 11 (word) |
---|---|---|---|---|---|
000 | DS:[BX + SI] | DS:[BX + SI + disp8] | DS:[BX + SI + disp16] | AL | AX |
001 | DS:[BX + DI] | DS:[BX + DI + disp8] | DS:[BX + DI + disp16] | CL | CX |
010 | SS:[BP + SI] | SS:[BP + SI + disp8] | SS:[BP + SI + disp16] | DL | DX |
011 | SS:[BP + DI] | SS:[BP + DI + disp8] | SS:[BP + DI + disp16] | BL | BX |
100 | DS:[SI] | DS:[SI + disp8] | DS:[SI + disp16] | AH | SP |
101 | DS:[DI] | DS:[DI + disp8] | DS:[DI + disp16] | CH | BP |
110 | DS:[disp16] | SS:[BP + disp8] | SS:[BP + disp16] | DH | SI |
111 | DS:[BX] | DS:[BX + disp8] | DS:[BX + disp16] | BH | DI |
Displacements are either 8-bit (disp8) or 16-bit (disp16) signed values and they always immediately follow the ModR/M byte. Note that (oo = 00, mmm = 110) is a special case, in which the disp16 value is used directly as a near pointer.
The instruction encoding lists below refer to this byte as oorrrmmm (binary), /r (hexadecimal) or /0 (hexademical, rrr used as function 0).
Official instructions
AAA
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
AAA | 37 | 00110111 | 1 | 9 |
AAD
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
AAD imm8 | B5 ii | 11010100 iiiiiiii | 2 | 6 |
AAM
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
AAM imm8 | B4 ii | 11010100 iiiiiiii | 2 | 17 |
AAS
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
AAS | 3F | 00111111 | 1 | 9 |
ADC
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
ADC AL, imm | 14 ii | 00010100 iiiiiiii | 2 | 1 |
ADC AX, imm | 15 ii ii | 00010101 iiiiiiii iiiiiiii | 3 | 1 |
ADC mem8, imm8 | 80 /2 ii | 10000000 oo010mmm iiiiiiii | 3+ | 3 |
ADC mem16, imm16 | 81 /2 ii ii | 10000001 oo010mmm iiiiiiii iiiiiiii | 4+ | 3 |
ADC mem16, simm8 | 83 /2 ii ii | 10000011 oo010mmm iiiiiiii iiiiiiii | 4+ | 3 |
ADC mem8, reg8 | 10 /r | 00010000 oorrrmmm | 2+ | 3 |
ADC mem16, reg16 | 11 /r | 00010001 oorrrmmm | 2+ | 3 |
ADC reg8, imm8 | 80 /2 ii | 10000000 11010mmm iiiiiiii | 3+ | 1 |
ADC reg16, imm16 | 81 /2 ii ii | 10000001 11010mmm iiiiiiii iiiiiiii | 4+ | 1 |
ADC reg16, simm8 | 83 /2 ii ii | 10000011 11010mmm iiiiiiii iiiiiiii | 4+ | 1 |
ADC reg8, mem8 | 12 /r | 00010010 oorrrmmm | 2+ | 2 |
ADC reg16, mem16 | 13 /r | 00010011 oorrrmmm | 2+ | 2 |
ADC reg8, reg8 | 10 /r | 000100.0 11rrrmmm | 2 | 1 |
ADC reg16, reg16 | 11 /r | 000100.1 11rrrmmm | 2 | 1 |
ADD
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
ADD AL, imm | 04 ii | 00000100 iiiiiiii | 2 | 1 |
ADD AX, imm | 05 ii ii | 00000101 iiiiiiii iiiiiiii | 3 | 1 |
ADD mem8, imm8 | 80 /0 ii | 10000000 oo000mmm iiiiiiii | 3+ | 3 |
ADD mem16, imm16 | 81 /0 ii ii | 10000001 oo000mmm iiiiiiii iiiiiiii | 4+ | 3 |
ADD mem16, simm8 | 83 /0 ii ii | 10000011 oo000mmm iiiiiiii iiiiiiii | 4+ | 3 |
ADD mem8, reg8 | 00 /r | 00000000 oorrrmmm | 2+ | 3 |
ADD mem16, reg16 | 01 /r | 00000001 oorrrmmm | 2+ | 3 |
ADD reg8, imm8 | 80 /0 ii | 10000000 11000mmm iiiiiiii | 3+ | 1 |
ADD reg16, imm16 | 81 /0 ii ii | 10000001 11000mmm iiiiiiii iiiiiiii | 4+ | 1 |
ADD reg16, simm8 | 83 /0 ii ii | 10000011 11000mmm iiiiiiii iiiiiiii | 4+ | 1 |
ADD reg8, mem8 | 02 /r | 00000010 oorrrmmm | 2+ | 2 |
ADD reg16, mem16 | 03 /r | 00000011 oorrrmmm | 2+ | 2 |
ADD reg8, reg8 | 00 /r | 000000.0 11rrrmmm | 2 | 1 |
ADD reg16, reg16 | 01 /r | 000000.1 11rrrmmm | 2 | 1 |
AND
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
AND AL, imm | 24 ii | 00100100 iiiiiiii | 2 | 1 |
AND AX, imm | 25 ii ii | 00100101 iiiiiiii iiiiiiii | 3 | 1 |
AND mem8, imm8 | 80 /4 ii | 10000000 oo100mmm iiiiiiii | 3+ | 3 |
AND mem16, imm16 | 81 /4 ii ii | 10000001 oo100mmm iiiiiiii iiiiiiii | 4+ | 3 |
AND mem16, simm8 | 83 /4 ii ii | 10000011 oo100mmm iiiiiiii iiiiiiii | 4+ | 3 |
AND mem8, reg8 | 20 /r | 00100000 oorrrmmm | 2+ | 3 |
AND mem16, reg16 | 21 /r | 00100001 oorrrmmm | 2+ | 3 |
AND reg8, imm8 | 80 /4 ii | 10000000 11100mmm iiiiiiii | 3+ | 1 |
AND reg16, imm16 | 81 /4 ii ii | 10000001 11100mmm iiiiiiii iiiiiiii | 4+ | 1 |
AND reg16, simm8 | 83 /4 ii ii | 10000011 11100mmm iiiiiiii iiiiiiii | 4+ | 1 |
AND reg8, mem8 | 22 /r | 00100010 oorrrmmm | 2+ | 2 |
AND reg16, mem16 | 23 /r | 00100011 oorrrmmm | 2+ | 2 |
AND reg8, reg8 | 20 /r | 001000.0 11rrrmmm | 2 | 1 |
AND reg16, reg16 | 21 /r | 001000.1 11rrrmmm | 2 | 1 |
BOUND
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
BOUND reg16, mem16:16 | 62 /r | 01100010 oorrrmmm | 2+ | 13 (20 if condition met) |
CALL
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CALL ptr16:16 | CA oo oo ss ss | 10011010 oooooooo oooooooo ssssssss ssssssss | 5 | 10 |
CALL mem16 | FF /2 | 11111111 oo010mmm | 2+ | 6 |
CALL mem16:16 | FF /3 | 11111111 oo011mmm | 2+ | 12 |
CALL reg16 | FF /2 | 11111111 11010mmm | 2 | 5 |
CALL rel16 | E8 ii ii | 11101000 iiiiiiii iiiiiiii | 3 | 5 |
CBW
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CBW | 98 | 10011000 | 1 | 1 |
CLC
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CLC | F8 | 11111000 | 1 | 4 |
CLD
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CLD | FC | 11111100 | 1 | 4 |
CLI
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CLI | FA | 11111010 | 1 | 4 |
CMC
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CMC | F5 | 11110101 | 1 | 4 |
CMP
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CMP AL, imm | 3C ii | 00111100 iiiiiiii | 2 | 1 |
CMP AX, imm | 3D ii ii | 00111101 iiiiiiii iiiiiiii | 3 | 1 |
CMP mem8, imm8 | 80 /7 ii | 10000000 oo111mmm iiiiiiii | 3+ | 2 |
CMP mem16, imm16 | 81 /7 ii ii | 10000001 oo111mmm iiiiiiii iiiiiiii | 4+ | 2 |
CMP mem16, simm8 | 83 /7 ii ii | 10000011 oo111mmm iiiiiiii iiiiiiii | 4+ | 2 |
CMP mem8, reg8 | 38 /r | 00111000 oorrrmmm | 2+ | 2 |
CMP mem16, reg16 | 39 /r | 00111001 oorrrmmm | 2+ | 2 |
CMP reg8, imm8 | 80 /7 ii | 10000000 11111mmm iiiiiiii | 3+ | 1 |
CMP reg16, imm16 | 81 /7 ii ii | 10000001 11111mmm iiiiiiii iiiiiiii | 4+ | 1 |
CMP reg16, simm8 | 83 /7 ii ii | 10000011 11111mmm iiiiiiii iiiiiiii | 4+ | 1 |
CMP reg8, mem8 | 3A /r | 00111010 oorrrmmm | 2+ | 2 |
CMP reg16, mem16 | 3B /r | 00111011 oorrrmmm | 2+ | 2 |
CMP reg8, reg8 | 38 /r | 001110.0 11rrrmmm | 2 | 1 |
CMP reg16, reg16 | 39 /r | 001110.1 11rrrmmm | 2 | 1 |
CMPSB
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CMPSB | A6 | 10100110 | 1 | 6 |
CMPSW
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CMPSW | A7 | 10100111 | 1 | 6 |
CS
CWD
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
CWD | 99 | 10011001 | 1 | 1 |
DAA
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
DAA | 27 | 00100111 | 1 | 10 |
DAS
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
DAS | 2F | 00101111 | 1 | 10 |
DEC
DIV
DS
ENTER
ES
HLT
IDIV
IMUL
IN
INC
INSB
INSW
INT
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
INT 3 | CC | 11001100 | 1 | 9 |
INT imm8 | CD ii | 11001101 iiiiiiii | 2 | 10 |
INTO
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
INTO | CE | 11001110 | 1 | 6 (13 if OF = 1) |
IRET
JA
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JA rel8 | 77 ii | 01110111 iiiiiiii | 2 | 1 (4 if branch taken) |
JBE
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JA rel8 | 76 ii | 01110110 iiiiiiii | 2 | 1 (4 if branch taken) |
JC/JB
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JC rel8 | 72 ii | 01110010 iiiiiiii | 2 | 1 (4 if branch taken) |
JCXZ
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JCXZ rel8 | E3 ii | 11100011 iiiiiiii | 2 | 1 (4 if branch taken) |
JG
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JG rel8 | 7F ii | 01111111 iiiiiiii | 2 | 1 (4 if branch taken) |
JGE
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JGE rel8 | 7D ii | 01111101 iiiiiiii | 2 | 1 (4 if branch taken) |
JL
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JL rel8 | 7C ii | 01111100 iiiiiiii | 2 | 1 (4 if branch taken) |
JLE
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JLE rel8 | 7E ii | 01111110 iiiiiiii | 2 | 1 (4 if branch taken) |
JMP
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JMP ptr16:16 | EA oo oo ss ss | 11101010 oooooooo oooooooo ssssssss ssssssss | 5 | 7 |
JMP mem16 | FF /4 | 11111111 oo100mmm | 2+ | 5 |
JMP mem16:16 | FF /5 | 11111111 oo101mmm | 2+ | 10 |
JMP reg16 | FF /4 | 11111111 11100mmm | 2 | 4 |
JMP rel8 | EB ii | 11101011 iiiiiiii | 2 | 4 |
JMP rel16 | E9 ii ii | 11101001 iiiiiiii iiiiiiii | 3 | 4 |
JNC/JAE
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JNC rel8 | 73 ii | 01110011 iiiiiiii | 2 | 1 (4 if branch taken) |
JNO
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JNO rel8 | 71 ii | 01110001 iiiiiiii | 2 | 1 (4 if branch taken) |
JNP
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JNP rel8 | 7B ii | 01111011 iiiiiiii | 2 | 1 (4 if branch taken) |
JNS
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JNS rel8 | 79 ii | 01111001 iiiiiiii | 2 | 1 (4 if branch taken) |
JNZ/JNE
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JNZ rel8 | 75 ii | 01110101 iiiiiiii | 2 | 1 (4 if branch taken) |
JO
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JO rel8 | 70 ii | 01110000 iiiiiiii | 2 | 1 (4 if branch taken) |
JP
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JP rel8 | 7A ii | 01111010 iiiiiiii | 2 | 1 (4 if branch taken) |
JS
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JS rel8 | 78 ii | 01111000 iiiiiiii | 2 | 1 (4 if branch taken) |
JZ/JE
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
JZ rel8 | 74 ii | 01110100 iiiiiiii | 2 | 1 (4 if branch taken) |
LAHF
LDS
LEA
LEAVE
LES
LOCK
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
LOCK | F0 | 11110000 | 1 | 1 |
LODSB
LODSW
LOOP
LOOPE
LOOPNE
MOV
MOVSB
MOVSW
MUL
NEG
NOP
NOT
OR
OUT
OUTSB
OUTSW
POLL
POP
POPA
POPF
PUSH
PUSHA
PUSHF
RCL
RCR
REP/REPE/REPZ
REPNE/REPNZ
RET
RETF
ROL
ROR
SAHF
SAR
SBB
SCASB
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
SCASB | AE | 10101110 | 1 | 4 |
SCASW
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
SCASW | AF | 10101111 | 1 | 4 |
SHL
SHR
SS
STC
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
STC | F9 | 11111001 | 1 | 4 |
STD
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
STD | FD | 11111101 | 1 | 4 |
STI
Instruction | Opcode (hex) | Opcode (bin) | Bytes | Cycles |
---|---|---|---|---|
STI | FB | 11111011 | 1 | 4 |
STOSB
STOSW
SUB
TEST
XCHG
XLAT