NEC V30MZ instruction set
From WSdev Wiki
Jump to navigationJump to search
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 with an optional signed 8-bit (disp8) or 16-bit (disp16) displacement 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 |
Note that (oo = 00, mmm = 110) is a special case.
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
AAM
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
CALL
CBW
CLC
CLD
CLI
CMC
CMP
CMPSB
CMPSW
CS
CWD
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
INTO
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
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
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
SCASW
SHL
SHR
SS
STC
STD
STI
STOSB
STOSW
SUB
TEST
XCHG
XLAT