Opcode reference
Intel 8085 opcode reference using Zilog (Z80-style) mnemonics. Covers the full 256-opcode map, byte sizes, cycle timings, flag effects (including undocumented K and V), and the ten undocumented 8085 instructions. Use when writing, reading, optimizing, or reviewing 8085 assembly; when mapping Intel↔Zilog mnemonics; when checking timings or flags; or when the user runs /opcode-reference.From its SKILL.md
npx -y skills add feilipu/8085-skills --skill opcode-referenceAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.6 KB, ~2.7k tokens by cl100k_base, as published. Nobody here has run it
8085 Opcode Reference (Zilog mnemonics)
Conventions (always follow)
- Mnemonics are Zilog, as in Z80 assembly — not Intel 8080/8085 names.
- Opcode bytes and timings are 8085, not Z80 (many encodings differ or do not exist on Z80).
- Undocumented / extended opcodes are noted in tables (column or section).
- Immediate forms:
*= 8-bit immediate (d8),**= 16-bit immediate/address (d16/a16). These*/**are operand placeholders only. - For LDHI / LDSI equivalents (
ld de,hl+*/ld de,sp+*), the 8-bit offset is unsigned. - Conditional cycle counts use
taken/not-taken(e.g.12/6,10/7,18/9).
Prefer the full tables in references/opcodes.md. Use this skill body for rules, flags, mnemonic mapping, and undocumented ops.
Always incorporate the extended usage concepts included in the extended-usage. Use this skill body for techniques and optimisation.
Sources
| Topic | Source |
|---|---|
| Zilog mnemonics & descriptions | feilipu/8085-opcodes 8085_instructions.html |
| Flag effects (S Z K A P V C), timings | pastraiser i8085 opcodes |
When sources conflict on flags, trust pastraiser (8085-specific K and V). When they conflict on mnemonic spelling, trust 8085_instructions.html (Zilog).
Registers
15 ...... 8 7 ...... 0
A F → AF (PSW); Zilog: af
B C → BC
D E → DE
H L → HL
15 ............... 0
SP
PC
Memory via HL is written (hl) (Intel M). Stack grows downward; push stores high byte first at sp-1, low at sp-2.
Flag register (F)
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| S | Z | K | A | 0 | P | V | C |
| Flag | Meaning |
|---|---|
| S | Sign |
| Z | Zero |
| K | Undocumented; also X5 / UI (underflow/overflow indicator) |
| A | Auxiliary carry (half-carry / AC) |
| 0 | Unused; always zero |
| P | Parity |
| V | Undocumented overflow |
| C | Carry |
Flag columns in tables are always S Z K A P V C:
- letter → that flag is affected as defined by the instruction
-→ unchanged0/1→ forced clear / set
Important: On the Z80, P and V share one bit (P/V). On the 8085 they are separate bits (P bit 2, V bit 1). Do not collapse them.
Condition codes for jumps/calls/returns:
| Zilog cc | Meaning |
|---|---|
nz / z | Z clear / set |
nc / c | C clear / set |
po / pe | P odd / even (parity) |
p / m | S clear (plus) / set (minus) |
nk / k | K clear / set (undocumented) |
v (rst v only) | V set |
Intel → Zilog mnemonic map (primary)
Use Zilog in all generated/edited 8085 code. Intel names appear only when translating legacy sources.
| Intel | Zilog |
|---|---|
NOP | nop |
LXI rp,d16 | ld bc/de/hl/sp,** |
STAX B/D | ld (bc),a / ld (de),a |
LDAX B/D | ld a,(bc) / ld a,(de) |
INX/DCX rp | inc/dec bc/de/hl/sp |
INR/DCR r | inc/dec r ; M → (hl) |
MVI r,d8 | ld r,* |
MOV r1,r2 | ld r1,r2 |
RLC/RRC | rlca / rrca |
RAL/RAR | rla / rra |
DAD rp | add hl,bc/de/hl/sp |
LDA/STA a16 | ld a,(**) / ld (**),a |
LHLD/SHLD a16 | ld hl,(**) / ld (**),hl |
DAA | daa |
CMA | cpl |
STC/CMC | scf / ccf |
HLT | halt |
ADD/ADC r | add a,r / adc a,r |
SUB/SBB r | sub r / sbc a,r |
ANA/XRA/ORA/CMP r | and r / xor r / or r / cp r |
ADI/ACI/SUI/SBI | add a,* / adc a,* / sub * / sbc a,* |
ANI/XRI/ORI/CPI | and * / xor * / or * / cp * |
JMP/Jcc | jp ** / jp cc,** |
CALL/Ccc | call ** / call cc,** |
RET/Rcc | ret / ret cc |
PCHL | jp (hl) |
SPHL | ld sp,hl |
XCHG | ex de,hl |
XTHL | ex (sp),hl |
PUSH/POP B|D|H|PSW | push/pop bc|de|hl|af |
IN/OUT d8 | in a,(*) / out (*),a |
EI/DI | ei / di |
RIM/SIM | rim / sim (8085 only) |
RST n | rst 00h … rst 38h |
Undocumented / extended
| Op | Intel | Zilog | Bytes | Cycles | Flags (SZKAPVC) | Effect |
|---|---|---|---|---|---|---|
08 | DSUB | sub hl,bc | 1 | 10 | SZKAPVC | HL ← HL − BC |
10 | ARHL | sra hl | 1 | 7 | -----0C | Arithmetic right shift HL; V←0 |
18 | RDEL | rl de | 1 | 10 | -----VC | Rotate DE left through C |
28 | LDHI d8 | ld de,hl+* | 2 | 10 | ------- | DE ← HL + unsigned * |
38 | LDSI d8 | ld de,sp+* | 2 | 10 | ------- | DE ← SP + unsigned * |
CB | RSTV | rst v | 1 | 12/6 | ------- | If V set: push PC, PC←40h |
D9 | SHLX | ld (de),hl | 1 | 10 | ------- | (DE)←L, (DE+1)←H |
DD | JNK a16 | jp nk,** | 3 | 10/7 | ------- | Jump if K=0 (also jnx5/jnui) |
ED | LHLX | ld hl,(de) | 1 | 10 | ------- | L←(DE), H←(DE+1) |
FD | JK a16 | jp k,** | 3 | 10/7 | ------- | Jump if K=1 (also jx5/jui) |
These are not standard Z80 opcodes at those encodings (Z80 uses CB/DD/ED/FD as prefixes). On 8085 they are single-byte (or 3-byte jump) instructions.
Flag rules agents must not get wrong
| Group | Flags | Notes |
|---|---|---|
inc/dec 16-bit (inc bc … dec sp) | --K---- | Only K changes |
inc/dec 8-bit (incl. (hl)) | SZKAPV- | All but C |
rlca / rla | -----VC | V and C |
rrca / rra | -----0C | V forced 0 |
add hl,rp | -----VC | V and C (not C alone) |
8-bit ALU (add…cp, immediates) | SZKAPVC | Full set |
sub hl,bc (undoc) | SZKAPVC | Full set |
sra hl (undoc) | -----0C | V←0, C from bit 0 |
rl de (undoc) | -----VC | V and C |
scf | ------1 | C←1 |
ccf | ------C | C toggled |
pop af | SZKAPVC | Restores all flags including K,V |
Logical ops still use the full pastraiser mask SZKAPVC (how individual bits are computed is instruction-defined; do not invent Z80 N-flag behavior — 8085 has no N flag).
Timing notes
- Base machine cycles as in the reference tables (8085 T-states / clocks from pastraiser).
- Conditional ret: 12 taken / 6 not taken.
- Conditional jp: 10 / 7.
- Conditional call: 18 / 9.
haltis 5 cycles (8085).
Coding rules for this project
- Emit Zilog mnemonics only (
ld a,bnotMOV A,B;jp nz,labelnotJNZ). - Register pairs:
bc,de,hl,af,sp— never IntelB,D,H,PSWin new code. - Use
(hl),(bc),(de),(**)for memory; neverM. - Prefer undocumented ops when they clearly win (e.g.
sub hl,bc,ld hl,(de),ld (de),hl,ld de,hl+*) and the target assembler/CPU path supports them. - Never assume Z80 instruction timings or prefix opcodes exist on 8085.
- When optimizing, consult references/opcodes.md for exact size/cycle/flag data.
Quick lookup
Full 16×16 opcode grid, Intel cross-ref, and macro helpers:
What ships with it: 1 file
13.6 KB alongside SKILL.md
references/
- opcodes.md13.6 KB