Archive for Z80Aプログラミング

Z80Aメモ: 命令一覧・説明なし

この記事は作成中です。

00〜0F

  • 00: NOP
  • 01 n2 n1: LD BC,n1n2
  • 02: LD (BC), A
  • 03: INC BC
  • 04: INC B
  • 05: DEC B
  • 06 n: LD B,n
  • 07: EX AF,AF’
  • 08: ADD HL,BC
  • 09: ADD HL,BC
  • 0A: LD A,(BC)
  • 0B: DEC BC
  • 0C: INC C
  • 0D: DEC C
  • 0E n: LD B,n
  • RRCA

10〜1F

  • 10: DJNZ
  • 11 n2 n1: LD DE,n1n2
  • 12: LD (DE), A
  • 13: INC DE
  • 14: INC D
  • 15: DEC D
  • 16 n: LD D,n
  • 17: SCF
  • 19: ADD HL, DE
  • 1A: LD A,(DE)
  • 1B: DEC DE
  • 1C: INC E
  • 1D: DEC E
  • 1E n: LD E,n
  • 1F: RRA

20〜2F

  • 20: JR NZ,e
  • 21 n2 n1: LD HL,n1n2
  • 22 n2 n1: LD (n1n2),HL
  • 23: INC HL
  • 24: INC H
  • 25 DEC H
  • 26 n: LD H,n
  • 27: DAA
  • 28: JR Z,e
  • 29: ADD HL,HL
  • 2A n2 n1: LD HL,(n1n2)
  • 2B: DEC HL
  • 2C: INC L
  • 2D: DEC L
  • 2E n: LD L,n
  • 2F: CPL

30〜3F

  • 30: JR NC,e
  • 31 n1 n1: LD SP,n1n2
  • 32 n2 n1: LD (n1n2),A
  • 33: INC SP
  • 34: INC (HL)
  • 35: DEC (HL)
  • 36 n: LD (HL), n
  • 37: SCF
  • 38 n2 n1: JR C,n1n2
  • 39: ADD HL,SP
  • 3A n2 n1: LD A,(n1n2)
  • 3B: DEC SP
  • 3C: INC A
  • 3D: DEC A
  • 3E n: LD A,n
  • 3F: CCE

40〜4F

  • 40: LD B,B
  • 41: LD B,C
  • 42: LD B,D
  • 43: LD B,E
  • 44: LD B,H
  • 45: LD B,L
  • 46: LD B,(HL)
  • 47: LD B,A
  • 48: LD C,B
  • 48: LD C,B
  • 49: LD C,C
  • 4A: LD C,D
  • 4B: LD C,E
  • 4C: LD C,H
  • 4D: LD C,L
  • 4E: LD C,(HL)
  • 4F: LD C,A

50〜5F

  • 50: LD D,B
  • 51: LD D,C
  • 52: LD D,D
  • 53: LD D,E
  • 54: LD D,H
  • 55: LD D,L
  • 56: LD D,(HL)
  • 57: LD D,A
  • 58: LD E,B
  • 59: LD E,C
  • 5A: LD E,D
  • 5B: LD E,E
  • 5C: LD E,H
  • 5D: LD E,L
  • 5E: LD E,(HL)
  • 5F: LD E,A

60〜6F

  • 60: LD H,B
  • 61: LD H,C
  • 62: LD H,D
  • 63: LD H,E
  • 64: LD H,H
  • 65: LD H,L
  • 66: LD H,(HL)
  • 67: LD H,A
  • 68: LD L,B
  • 69: LD L,C
  • 6A: LD L,D
  • 6B: LD L,E
  • 6C: LD L,H
  • 6D: LD L,L
  • 6E: LD L,(HL)
  • 6F: LD L,A

70〜7F

  • 70: LD (HL),B
  • 71: LD (HL),C
  • 72: LD (HL),D
  • 73: LD (HL),E
  • 74: LD (HL),H
  • 75: LD (HL),L
  • 76: HALT
  • 77: LD (HL),A
  • 78: LD A,B
  • 79: LD A,C
  • 7A: LD A,D
  • 7B: LD A,E
  • 7C: LD A,H
  • 7D: LD A,L
  • 7E: LD A,(HL)
  • 7F: LD A,A

80〜8F

  • 80: ADD A,B
  • 81: ADD A,C
  • 82: ADD A,D。
  • 83: ADD A,E
  • 84: ADD A,H
  • 85: ADD A,L
  • 86: ADD A,(HL)
  • 87: ADD A,A
  • 88: ADC A,B
  • 89: ADC A,C
  • 8A: ADC A,D
  • 8B: ADC A,E。
  • 8C: ADC A,H
  • 8D: ADC A,L
  • 8E: ADC A,(HL)
  • 8F: ADC A,A

90〜9F

  • 90: SUB B
  • 91: SUB C
  • 92: SUB D
  • 93: SUB E
  • 94: SUB H
  • 95: SUB L
  • 96: SUB (HL)
  • 97: SUB A
  • 98: SBC A,B
  • 99: SBC A,C
  • 9A: SBC A,D。
  • 9B: SBC A,E
  • 9C: SBC A,H
  • 9D: SBC A,L
  • 9E: SBC A,(HL)
  • 9F: SBC A,A

A0〜AF

  • A0: AND B
  • A1: AND C
  • A2: AND D
  • A3: AND E
  • A4: AND H
  • A5: AND L
  • A6: AND (HL)
  • A7: AND A
  • A8: XOR B
  • A9: XOR C
  • AA: XOR D
  • AB: XOR E
  • AC: XOR H
  • AD: XOR L
  • AE: XOR (HL)
  • AF: XOR A

B0〜BF

  • B0: OR B
  • B1: OR C
  • B2: OR D
  • B3: OR E
  • B4: OR H
  • B5: OR L
  • B6: OR (HL)
  • B7: OR A
  • B8: CP B
  • B9: CP C
  • BA: CP D
  • BB: CP E
  • BC: CP H
  • BD: CP L
  • BE: CP (HL)
  • BF: CP A

C0〜CF

  • C0: RET NZ
  • C1: POP BC
  • C2 n2 n1: JP NZ,n1n2
  • C3 n2 n1: JP n1n2
  • C4 n2 n1: CALL NZ, n1n2
  • C5: PUSH BC
  • C6 n: ADD A,n
  • C7: RST 00H
  • C8: RET Z
  • C9: RET
  • CA n2 n1: JP Z,n1n2
  • CB:(CB系命令群)
  • CC n2 n1: CALL Z,n1n2
  • CD n2 n1: CALL n1n2
  • CE n: ADC A,n
  • CF: RST 08H

D0〜DF

  • D0: RET NC
  • D1: POP DE
  • D2 n2 n1: JP NZ,n1n2
  • D3 n2 n1: JP n1n2
  • D4 n2 n1: CALL NC,n1n2
  • D5: PUSH DE
  • D6: SUB n
  • D7: RST 10H
  • D8: RET C
  • D9: EXX
  • DA n2 n1: JP C,n1n2
  • DB: IN A,(n)
  • DC n2 n1: CALL C,n1n2
  • DD: (DD系命令群)
  • DE n: SBC A,n
  • DF: RST 18H

E0〜EF

  • E0: RET PO
  • E1: POP HL
  • E2 n2 n1: JP PO,n1n2
  • E3: EX (SP),HL
  • E4 n2 n1: CALL PO,n1n2
  • E5: PUSH HL
  • E6 n: AND n
  • E7: RST 20H
  • E8: RET PE
  • E9: JP (HL)
  • EA n2 n1: JP PE,n1n2
  • EB: EX DE, HL
  • EC n2 n1: CALL PE,n1n2
  • ED:(ED系命令群)
  • EE n: XOR n
  • EF: RST 28H

F0〜FF

  • F0: RET P
  • F1: POP AF
  • F2 n2 n1: JP P,n1n2
  • F3: DI
  • F4 n2 n1: CALL P, n1n2
  • F5: PUSH AF
  • F6 n: OR n
  • F7: RST 30H
  • F8: RET M
  • F9: LD SP,HL
  • FA n2 n1: JP M,n1n2
  • FB: EI
  • FC n2 n1: CALL M,n1n2
  • FD:(FD系命令群)
  • FE n: CP n
  • FF: RST 38H

Z80Aメモ: 命令一覧・説明付き

この記事は作成中です。

00〜0F

  • 00: NOP
    なにもしない。いわゆる「スルー」。
  • 01 n2 n1: LD BC,n1n2
    BCレジスタに任意の数値n1n2を入れる。n2とn1の順序に注意。
  • 02: LD (BC), A
    メモリアドレスBCに、Aレジスタの値(8ビット)を記憶させる。
  • 03: INC BC
    BCレジスタの値を1増やす。
  • 04: INC B
    Bレジスタの値を1増やす。
  • 05: DEC B
    Bの値を1減らす。
  • 06 n: LD B,n
    Bレジスタに任意の数値nを入れる。
  • 09: ADD HL,BC
    HLレジスタの値とBCレジスタの値の和を、HLレジスタに入れる。
  • 0A: LD A,(BC)
    Aレジスタに、メモリアドレスBCに記憶された8ビットデータを読み込む。
  • 0B: DEC BC
    BCレジスタの値を1減らす。
  • 0C: INC C
    Cレジスタの値を1増やす。
  • 0D: DEC C
    Cレジスタの値を1減らす。
  • 0E n: LD B,n
    Bレジスタに任意の数値nを入れる。

10〜1F

  • 11 n2 n1: LD DE,n1n2
    DEレジスタに任意の数値n1n2を入れる。n2とn1の順序に注意。
  • 12: LD (DE), A
    メモリアドレスDEに、Aレジスタの値(8ビット)を記憶させる。
  • 13: INC DE
    DEレジスタの値を1増やす。
  • 14: INC D
    Dレジスタの値を1増やす。
  • 15: DEC D
    Dレジスタの値を1減らす。
  • 16: 16 n: LD D,n
    Dレジスタに任意の数値nを入れる。
  • 19: ADD HL, DE
    HLレジスタの値とDEレジスタの値の和を、HLレジスタに入れる。
  • 1A: LD A,(DE)
    Aレジスタに、メモリアドレスDEに記憶された8ビットデータを読み込む。
  • 1B: DEC DE
    DEレジスタの値を1減らす。
  • 1C: INC E
    Eレジスタの値を1増やす。
  • 1D: DEC E
    Eレジスタの値を1減らす。
  • 1E n: LD E,n
    Eレジスタに任意の数値nを入れる。

20〜2F

  • 21 n2 n1: LD HL,n1n2
    HLレジスタに任意の数値n1n2を入れる。n2とn1の順序に注意。
  • 22 n2 n1: LD (n1n2),HL
    任意のメモリアドレスn1n2に、HLレジスタの値(16ビット)記憶させる。n2とn1の順序に注意。
  • 23: INC HL
    HLレジスタの値を1増やす。
  • 24: INC H
    Hレジスタの値を1増やす。
  • 25 DEC H
    Hレジスタの値を1減らす。
  • 26 n: LD H,n
    Hレジスタに任意の数値nを入れる。
  • 29: ADD HL,HL
    HLレジスタの値とHLレジスタの値の和を、HLレジスタに入れる。つまり、HLレジスタの値を2倍にする。
  • 2A n2 n1: LD HL,(n1n2)
    HLレジスタに、任意のメモリアドレスn1n2に記憶された16ビットの値を読み込む。n2とn1の順序に注意。
  • 2B: DEC HL
    HLレジスタの値を1減らす。
  • 2C: INC L
    Lレジスタの値を1増やす。
  • 2D: DEC L
    Lレジスタの値を1減らす。
  • 2E n: LD L,n
    Lレジスタに任意の数値nを入れる。2バイトで1セット。

30〜3F

  • 31 n1 n1: LD SP,n1n2
    SPレジスタに任意の数値n1n2を入れる。n2とn1の順序に注意。
  • 32 n2 n1: LD (n1n2),A
    任意のメモリアドレスn1n2に、Aレジスタの値(8ビット)記憶させる。n2とn1の順序に注意。
  • 33: INC SP
    SPレジスタの値を1増やす。
  • 34: INC (HL)
    メモリアドレスHLに記憶されている値を1増やす。
  • 35: DEC (HL)
    メモリアドレスHLに記憶されている値を1減らす。
  • 36 n: LD (HL), n
    メモリアドレスHLに、任意の数値n(8ビット)を記憶させる。
  • 39: ADD HL,SP
    HLレジスタの値とSPレジスタの値の和を、HLレジスタに入れる。
  • 3A n2 n1: LD A,(n1n2)
    Aレジスタに、任意のメモリアドレスn1n2に記憶されている値(8ビット)を入れる。n2とn1の順序に注意。
  • 3B: DEC SP
    SPレジスタの値を1減らす。
  • 3C: INC A
    Aレジスタの値を1増やす。
  • 3D: DEC A
    Aレジスタの値を1減らす。
  • 3E n: LD A,n
    Aレジスタに任意の数値nを入れる。

40〜4F

  • 40: LD B,B
    BレジスタにBレジスタの値を入れる。
  • 41: LD B,C
    BレジスタにCレジスタの値を入れる。
  • 42: LD B,D
    BレジスタにDレジスタの値を入れる。
  • 43: LD B,E
    BレジスタにEレジスタの値を入れる。
  • 44: LD B,H
    BレジスタにHレジスタの値を入れる。
  • 45: LD B,L
    BレジスタにLレジスタの値を入れる。
  • 46: LD B,(HL)
    Bレジスタに、メモリのアドレスHLに記憶されている値(8ビット)を入れる。
  • 47: LD B,A
    Bレジスタに Aレジスタの値を入れる。
  • 48: LD C,B
    CレジスタにBレジスタの値を入れる。
  • 48: LD C,B
    CレジスタにBレジスタの値を入れる。
  • 49: LD C,C
    CレジスタにCレジスタの値を入れる。
  • 4A: LD C,D
    CレジスタにDレジスタの値を入れる。
  • 4B: LD C,E
    CレジスタにEレジスタの値を入れる。
  • 4C: LD C,H
    CレジスタにHレジスタの値を入れる。
  • 4D: LD C,L
    CレジスタにLレジスタの値を入れる。
  • 4E: LD C,(HL)
    Cレジスタに、メモリのアドレスHLに記憶されている値(8ビット)を入れる。
  • 4F: LD C,A
    Cレジスタに Aレジスタの値を入れる。

50〜5F

  • 50: LD D,B
    DレジスタにBレジスタの値を入れる。
  • 51: LD D,C
    DレジスタにCレジスタの値を入れる。
  • 52: LD D,D
    DレジスタにDレジスタの値を入れる。
  • 53: LD D,E
    DレジスタにEレジスタの値を入れる。
  • 54: LD D,H
    DレジスタにHレジスタの値を入れる。
  • 55: LD D,L
    DレジスタにLレジスタの値を入れる。
  • 56: LD D,(HL)
    Dレジスタに、メモリのアドレスHLに記憶されている値(8ビット)を入れる。
  • 57: LD D,A
    Dレジスタに Aレジスタの値を入れる。
  • 58: LD E,B
    EレジスタにBレジスタの値を入れる。
  • 59: LD E,C
    EレジスタにCレジスタの値を入れる。
  • 5A: LD E,D
    EレジスタにDレジスタの値を入れる。
  • 5B: LD E,E
    EレジスタにEレジスタの値を入れる。
  • 5C: LD E,H
    EレジスタにHレジスタの値を入れる。
  • 5D: LD E,L
    EレジスタにLレジスタの値を入れる。
  • 5E: LD E,(HL)
    Eレジスタに、メモリのアドレスHLに記憶されている値(8ビット)を入れる。
  • 5F: LD E,A
    Eレジスタに Aレジスタの値を入れる。

60〜6F

  • 60: LD H,B
    HレジスタにBレジスタの値を入れる。
  • 61: LD H,C
    HレジスタにCレジスタの値を入れる。
  • 62: LD H,D
    HレジスタにDレジスタの値を入れる。
  • 63: LD H,E
    HレジスタにEレジスタの値を入れる。
  • 64: LD H,H
    HレジスタにHレジスタの値を入れる。
  • 65: LD H,L
    HレジスタにLレジスタの値を入れる。
  • 66: LD H,(HL)
    Hレジスタに、メモリのアドレスHLに記憶されている値(8ビット)を入れる。
  • 67: LD H,A
    Hレジスタに Aレジスタの値を入れる。
  • 68: LD L,B
    LレジスタにBレジスタの値を入れる。
  • 69: LD L,C
    LレジスタにCレジスタの値を入れる。
  • 6A: LD L,D
    LレジスタにDレジスタの値を入れる。
  • 6B: LD L,E
    LレジスタにEレジスタの値を入れる。
  • 6C: LD L,H
    LレジスタにHレジスタの値を入れる。
  • 6D: LD L,L
    LレジスタにLレジスタの値を入れる。
  • 6E: LD L,(HL)
    Lレジスタに、メモリのアドレスHLに記憶されている数値(8ビット)を入れる。
  • 6F: LD L,A
    Lレジスタに Aレジスタの値を入れる。

70〜7F

  • 70: LD (HL),B
    メモリアドレスHLに、Bレジスタの値(8ビット)を記憶させる。
  • 71: LD (HL),C
    メモリアドレスHLに、Cレジスタの値(8ビット)を記憶させる。
  • 72: LD (HL),D
    メモリアドレスHLに、Dレジスタの値(8ビット)を記憶させる。
  • 73: LD (HL),E
    メモリアドレスHLに、Eレジスタの値(8ビット)を記憶させる。
  • 74: LD (HL),H
    メモリアドレスHLに、Bレジスタの値(8ビット)を記憶させる。
  • 75: LD (HL),L
    メモリアドレスHLに、Lレジスタの値(8ビット)を記憶させる。
  • 76: HALT
    命令の実行を停止する。
  • 77: LD (HL),A
    メモリのアドレスHLに Aレジスタの値を記憶させる。
  • 78: LD A,B
    AレジスタにBレジスタの値を入れる。
  • 79: LD A,C
    AレジスタにCレジスタの値を入れる。
  • 7A: LD A,D
    AレジスタにDレジスタの値を入れる。
  • 7B: LD A,E
    AレジスタにEレジスタの値を入れる。
  • 7C: LD A,H
    AレジスタにHレジスタの値を入れる。
  • 7D: LD A,L
    AレジスタにLレジスタの値を入れる。
  • 7E: LD A,(HL)
    Aレジスタに、メモリのアドレスHLに記憶されている数値(8ビット)を入れる。
  • 7F: LD A,A
    AレジスタにAレジスタの値を入れる。

80〜8F

  • 80: ADD A,B
    Aレジスタの値とBレジスタの値の和を、Aレジスタに入れる。
  • 81: ADD A,C
    Aレジスタの値とCレジスタの値の和を、Aレジスタに入れる。
  • 82: ADD A,D
    Aレジスタの値とDレジスタの値の和を、Aレジスタに入れる。
  • 83: ADD A,E
    Aレジスタの値とEレジスタの値の和を、Aレジスタに入れる。
  • 84: ADD A,H
    Aレジスタの値とHレジスタの値の和を、Aレジスタに入れる。
  • 85: ADD A,L
    Aレジスタの値とLレジスタの値の和を、Aレジスタに入れる。
  • 86: ADD A,(HL)
    Aレジスタの値とメモリアドレスHLに記憶されている値の和を、Aレジスタに入れる。
  • 87: ADD A,A
    Aレジスタの値とAレジスタの値の和を、Aレジスタに入れる。つまり、Aを2倍にする。
  • 88: ADC A,B
    Aレジスタの値にBレジスタの値を加え、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を加えたものを、Aレジスタに入れる。
  • 89: ADC A,C
    Aレジスタの値にCレジスタの値を加え、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を加えたものを、Aレジスタに入れる。
  • 8A: ADC A,D
    Aレジスタの値にDレジスタの値を加え、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を加えたものを、Aレジスタに入れる。
  • 8B: ADC A,E
    Aレジスタの値にEレジスタの値を加え、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を加えたものを、Aレジスタに入れる。
  • 8C: ADC A,H
    Aレジスタの値にHレジスタの値を加え、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を加えたものを、Aレジスタに入れる。
  • 8D: ADC A,L
    Aレジスタの値にLレジスタの値を加え、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を加えたものを、Aレジスタに入れる。
  • 8E: ADC A,(HL)
    Aレジスタの値にメモリアドレスHLに記憶されている値を加え、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を加えたものを、Aレジスタに入れる。
  • 8F: ADC A,A
    Aレジスタの値にAレジスタの値を加え、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を加えたものを、Aレジスタに入れる。

90〜9F

  • 90: SUB B
    Aレジスタの値とBレジスタの値の差を、Aレジスタに入れる。
  • 91: SUB C
    Aレジスタの値とCレジスタの値の差を、Aレジスタに入れる。
  • 92: SUB D
    Aレジスタの値とDレジスタの値の差を、Aレジスタに入れる。
  • 93: SUB E
    Aレジスタの値とEレジスタの値の差を、Aレジスタに入れる。
  • 94: SUB H
    Aレジスタの値とHレジスタの値の差を、Aレジスタに入れる。
  • 95: SUB L
    Aレジスタの値とLレジスタの値の差を、Aレジスタに入れる。
  • 96: SUB (HL)
    Aレジスタの値とメモリアドレスHLに記憶されている値の差を、Aレジスタに入れる。
  • 97: SUB A
    Aレジスタの値とAレジスタの値の差(= 0)を、Aレジスタに入れる。
  • 98: SBC A,B
    Aレジスタの値からBレジスタの値を引き、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を引いたものを、Aレジスタに入れる。
  • 99: SBC A,C
    Aレジスタの値からCレジスタの値を引き、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を引いたものを、Aレジスタに入れる。
  • 9A: SBC A,D
    Aレジスタの値からDレジスタの値を引き、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を引いたものを、Aレジスタに入れる。
  • 9B: SBC A,E
    Aレジスタの値からEレジスタの値を引き、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を引いたものを、Aレジスタに入れる。
  • 9C: SBC A,H
    Aレジスタの値からHレジスタの値を引き、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を引いたものを、Aレジスタに入れる。
  • 9D: SBC A,L
    Aレジスタの値からLレジスタの値を引き、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を引いたものを、Aレジスタに入れる。
  • 9E: SBC A,(HL)
    Aレジスタの値からメモリアドレスHLに記憶されている値を引き、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を引いたものを、Aレジスタに入れる。
  • 9F: SBC A,A
    Aレジスタの値からAレジスタの値を引き、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を引いたものを、Aレジスタに入れる。

A0〜AF

  • A0: AND B
    Aレジスタの値とBレジスタの値の論理積を、Aレジスタに入れる。
  • A1: AND C
    Aレジスタの値とBレジスタの値の論理積を、Aレジスタに入れる。
  • A2: AND D
    Aレジスタの値とBレジスタの値の論理積を、Aレジスタに入れる。
  • A3: AND E
    Aレジスタの値とBレジスタの値の論理積を、Aレジスタに入れる。
  • A4: AND H
    Aレジスタの値とBレジスタの値の論理積を、Aレジスタに入れる。
  • A5: AND L
    Aレジスタの値とBレジスタの値の論理積を、Aレジスタに入れる。
  • A6: AND (HL)
    Aレジスタの値とメモリアドレスHLに記憶されている値の論理積を、Aレジスタに入れる。
  • A7: AND A
    Aレジスタの値とBレジスタの値の論理積を、Aレジスタに入れる。
  • A8: XOR B
    Aレジスタの値とBレジスタの値の排他的論理和を、Aレジスタに入れる。
  • A9: XOR C
    Aレジスタの値とCレジスタの値の排他的論理和を、Aレジスタに入れる。
  • AA: XOR D
    Aレジスタの値とDレジスタの値の排他的論理和を、Aレジスタに入れる。
  • AB: XOR E
    Aレジスタの値とEレジスタの値の排他的論理和を、Aレジスタに入れる。
  • AC: XOR H
    Aレジスタの値とHレジスタの値の排他的論理和を、Aレジスタに入れる。
  • AD: XOR L
    Aレジスタの値とLレジスタの値の排他的論理和を、Aレジスタに入れる。
  • AE: XOR (HL)
    Aレジスタの値とメモリアドレスHLに記憶されている値の排他的論理和を、Aレジスタに入れる。
  • AF: XOR A
    Aレジスタの値とAレジスタの値の排他的論理和を、Aレジスタに入れる。

B0〜BF

  • B0: OR B
    Aレジスタの値とBレジスタの値の論理和を、Aレジスタに入れる。
  • B1: OR C
    Aレジスタの値とCレジスタの値の論理和を、Aレジスタに入れる。
  • B2: OR D
    Aレジスタの値とDレジスタの値の論理和を、Aレジスタに入れる。
  • B3: OR E
    Aレジスタの値とEレジスタの値の論理和を、Aレジスタに入れる。
  • B4: OR H
    Aレジスタの値とHレジスタの値の論理和を、Aレジスタに入れる。
  • B5: OR L
    Aレジスタの値とLレジスタの値の論理和を、Aレジスタに入れる。
  • B6: OR (HL)
    Aレジスタの値とメモリアドレスHLに記憶されている値の論理和を、Aレジスタに入れる。
  • B7: OR A
    Aレジスタの値とAレジスタの値の論理和を、Aレジスタに入れる。
  • B8: CP B
    Aレジスタの値とBレジスタの値が一致するかしないかを調べる。
  • B9: CP C
    Aレジスタの値とCレジスタの値が一致するかしないかを調べる。
  • BA: CP D
    Aレジスタの値とDレジスタの値が一致するかしないかを調べる。
  • BB: CP E
    Aレジスタの値とEレジスタの値が一致するかしないかを調べる。
  • BC: CP H
    Aレジスタの値とHレジスタの値が一致するかしないかを調べる。
  • BD: CP L
    Aレジスタの値とLレジスタの値が一致するかしないかを調べる。
  • BE: CP (HL)
    Aレジスタの値とメモリアドレスHLに記憶されている値が一致するかしないかを調べる。
  • BF: CP A
    Aレジスタの値とAレジスタの値が一致するかしないかを調べる。

C0〜CF

  • C6 n: ADD A,n
    Aレジスタの値と任意の数値nの和を、Aレジスタに入れる。
  • CE n: ADC A,n
    Aレジスタの値に任意の数値nを加え、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を加えたものを、Aレジスタに入れる。

D0〜DF

  • D6: SUB n
    Aレジスタの値と任意の数値nの差を、Aレジスタに入れる。
  • DE n: SBC A,n
    Aレジスタの値から任意の数値nを引き、さらにキャリーフラグ(2進数表示のフラグレジスタの1桁目)を引いたものを、Aレジスタに入れる。

E0〜EF

  • E6 n: AND n
    Aレジスタの値と任意の数値nの論理積を、Aレジスタに入れる。
  • EB: EX DE, HL
    DEレジスタの値とHLレジスタの値を交換する。
  • EE n: XOR n
    Aレジスタの値と任意の数値nの排他的論理和を、Aレジスタに入れる。

F0〜FF

  • F6 n: OR n
    Aレジスタの値と任意の数値nの論理和を、Aレジスタに入れる。
  • F9: LD SP,HL
    SPレジスタにHLレジスタの値を入れる。
  • FE n: CP n
    Aレジスタの値と任意の数値nが一致するかしないかを調べる。

 

Z80Aメモ: メモリアドレスと命令実行とアセンブリング

Z80Aでは、10進数で0から65535(注)、16進数で0 (0000)からFFFFまでのメモリアドレスを扱います。

それぞれのメモリアドレスには、8ビットの数値(16進数で00からFF)が記憶されています。

Z80Aは、16進数のメモリアドレス0000からFFFFの方向に、記憶されている値を一つずつ見ながら命令を実行していきます。メモリアドレスFFFFに記憶されている値を見て命令を実行した次は、メモリアドレス0000の値を見ます。

例えば、↓のようにメモリアドレス0000に3Eの値が記憶されており、メモリアドレス0001に01の値、(以下略)の場合、

メモリアドレス: 記憶されている値
0000: 3E
0001: 01
0002: 3C
0003: 32
0004: 01
0005: 00

Z80Aはまずアドレス0000に記憶されている値3Eから命令を解釈し、8ビットのAレジスタに値を読み込みます。

読み込む値は、メモリアドレス0000の次、つまりメモリアドレス0001に記憶されている値(= 01)です。

次にZ80Aは、メモリアドレス0002に記憶されている値3Cから命令を解釈し、Aレジスタの値を+1増やします。

続いてZ80Aは、メモリアドレス0003に記憶されている値32から命令を解釈し、メモリアドレス0004とメモリアドレス0005の値を組み合わせた16進数のメモリアドレスに、8ビットのAレジスタに値を記憶させます。

結果として、メモリアドレス0000〜0005に記憶された値は以下のようになります。

メモリアドレス: 記憶されている値
0000: 3E
0001: 02 ←注目
0002: 3C
0003: 32
0004: 01
0005: 00

命令実行前は、メモリアドレス0001に記憶されている値は01でしたが、実行後はひとつ増えて02になっています。

ちなみに、Z80Aはメモリアドレス0005までの命令を実行した後、メモリアドレス0006以降の命令を実行していきますが、そのあたりのことは省略します。

 

さて、メモリアドレスに記憶されている16進数、熟練技術者ではないとわかりにくいので、もう少しわかりやすく表現するとこうなります。

0000: 3E 01 LD A,01
0002: 3C INC A
0003: 32 01 00 LD (0001), A

つまり、

メモリアドレス0000と0001にLD A,01

メモリアドレス0002にINC A

メモリアドレス0003から0005にLD (0001), A

の命令を実行する値が記憶されている、ということになります(余裕があれば、メモリアドレス0004と0005に記憶されている値に注目してください。「逆」になってるのに気付くと思います。)。こうすると、少しだけ理解がしやすくなります。

さらに、メモリアドレスを省くとこうなります。すっきりしました。

LD A,01
INC A
LD (0001),A

Z80Aのプログラミングでは、プログラムとしての16進数の値をメモリに記憶させる前に、分かりやすい方法で命令を積み上げていき、プログラムの作成及びチェックを行います(アセンブリング)。

この作業を手書きでやるのがハンドアセンブリングです。

 

キーワード: Z80A・メモリアドレス・命令・アセンブリング

(注) -3276なんとかからとかなツッコミはカンベンして(笑

Z80Aメモ: レジスタの値をメモリに記憶させる

記憶させるというのが正しい表現かわかりませんが、メモということでご勘弁を。

Z80Aでは、10進数で0から65536、16進数で0 (0000)からFFFFまでのメモリアドレスを扱います。

レジスタの値をメモリの指定のメモリアドレスに記憶させる命令には、以下のものがあります。

  • 32 n2 n1: LD (n1n2),A
    任意のメモリアドレスn1n2に、Aレジスタの値(8ビット)記憶させる。n2とn1の順序に注意。
  • 36 n: LD (HL), n
    メモリアドレスHLに、任意の数値n(8ビット)を記憶させる。
  • 02: LD (BC), A
    メモリアドレスBCに、Aレジスタの値(8ビット)を記憶させる。
  • 12: LD (DE), A
    メモリアドレスDEに、Aレジスタの値(8ビット)を記憶させる。
  • 77: LD (HL), A
    メモリアドレスHLに、Aレジスタの値(8ビット)を記憶させる。
  • 70: LD (HL), B
    メモリアドレスHLに、Bレジスタの値(8ビット)を記憶させる。
  • 71: LD (HL), C
    メモリアドレスHLに、Cレジスタの値(8ビット)を記憶させる。
  • 72: LD (HL), D
    メモリアドレスHLに、Dレジスタの値(8ビット)を記憶させる。
  • 73: LD (HL), E
    メモリアドレスHLに、Eレジスタの値(8ビット)を記憶させる。
  • 74: LD (HL), H
    メモリアドレスHLに、Bレジスタの値(8ビット)を記憶させる。
  • 75: LD (HL), L
    メモリアドレスHLに、Lレジスタの値(8ビット)を記憶させる。

 

  • 22 n2 n1: LD (n1n2),HL
    任意のメモリアドレスn1n2に、HLレジスタの値(16ビット)記憶させる。n2とn1の順序に注意。

 

キーワード: Z80A・ハンドアセンブリング・機械語・レジスタ・メモリに記憶させる

Z80Aメモ: メモリに記憶された値をレジスタに読み込む

読み込むというのが正しい表現かわかりませんが、メモということでご勘弁を。

Z80Aでは、10進数で0から65536、16進数で0 (0000)からFFFFまでのメモリアドレスを扱います。

メモリの指定アドレスに保存されている値をレジスタに読み込む命令には、以下のものがあります。

  • 3A n2 n1: LD A,(n1n2)
    Aレジスタに、任意のメモリアドレスn1n2に記憶された8ビットデータを読み込む。n2とn1の順序に注意。
  • 0A: LD A,(BC)
    Aレジスタに、メモリアドレスBCに記憶された8ビットデータを読み込む。
  • 1A: LD A,(DE)
    Aレジスタに、メモリアドレスDEに記憶された8ビットデータを読み込む。
  • 2A: LD A,(HL)
    Aレジスタに、メモリアドレスHLに記憶された8ビットデータを読み込む。
  • 46: LD B,(HL)
    Bレジスタに、メモリアドレスHLに記憶された8ビットデータを読み込む。
  • 4E: LD C,(HL)
    Cレジスタに、メモリアドレスHLに記憶された8ビットデータを読み込む。
  • 56: LD D,(HL)
    Dレジスタに、メモリアドレスHLに記憶された8ビットデータを読み込む。
  • 5E: LD E,(HL)
    Eレジスタに、メモリアドレスHLに記憶された8ビットデータを読み込む。
  • 66: LD H,(HL)
    Hレジスタに、メモリアドレスHLに記憶された8ビットデータを読み込む。
  • 6E: LD L,(HL)
    Lレジスタに、メモリアドレスHLに記憶された8ビットデータを読み込む。

 

  • 2A n2 n1: LD HL,(n1n2)
    HLレジスタに、任意のメモリアドレスn1n2に記憶された16ビットデータを読み込む。n2とn1の順序に注意。

 

キーワード: Z80A・ハンドアセンブリング・機械語・レジスタ・メモリから読み込む