Z80 命令説明書 ( 有 ) 中日電工
目次 [ はじめに ] 1 Ⅰ. レジスタについて 1 Ⅱ. 8 ビット転送命令 1 1.LD, 1 2.LD,(HL) 1 3.LD (HL), 1 4.LD,n 1 5.LD (HL),n 1 6.LD A,(BC) 2 7.LD A,(DE) 2 8.LD A,(nn) 2 9.LD (BC),A 2 10. LD (DE),A 2 11. LD (nn),a 2 12. LD,(IX+d) 2 13. LD,(IY+d) 2 14. LD (IX+d), 2 15. LD (IY+d), 2 16. LD (IX+d),n 2 17. LD (IY+d),n 2 Ⅲ. 16 ビット転送命令 2 18. LD BC,nn 2 19. LD DE,nn 3 20. LD HL,nn 3 21. LD SP,nn 3 22. LD IX,nn 3 23. LD IY,nn 3 24. LD HL,(nn) 3 25. LD BC,(nn) 3 26. LD DE,(nn) 3 27. LD SP,(nn) 3 28. LD IX,(nn) 3 29. LD IY,(nn) 3 30. LD (nn),hl 3 31. LD (nn),bc 3 32. LD (nn),de 3 33. LD (nn),sp 3 34. LD (nn),ix 3 35. LD (nn),iy 3 36. LD SP, HL 3 37. LD SP,IX 4 38. LD SP,IY 4 39. PUSH BC 4 40. PUSH DE 4 41. PUSH HL 4 42. PUSH AF 4 43. PUSH IX 4 44. PUSH IY 4 45. POP BC 4 46.POP DE 4 47. POP HL 4 48. POP AF 4 49. POP IX 4 50. POP IY 4 Ⅳ. 交換 ブロック転送 検索命令 4 51. EX DE,HL 4 52. EX AF,AF 4 53. EXX 4 5 4. E X ( S P ), H L 4 55. EX (SP),IX 5 56. EX (SP),IY 5 フラグについての説明 5 57. LDI 5 58. LDIR 5 59. LDD 5 60. LDDR 5 61. CPI 5 62. CPIR 5 63. CPD 6 64. CPDR 6 Ⅴ. 8 ビット算術 論理演算命令 6 65. ADD A, 6 66. ADD A,n 6 67. ADD A,(HL) 6 68. ADD A,(IX+d) 6 69. ADD A,(IY+d) 6 70. ADC A, 6 71. ADC A,n 6 72. ADC A,(HL) 6 73. ADC A,(IX+d) 6 74. ADC A,(IY+d) 6 75. SUB 6 76. SUB n 6 77. SUB (HL) 6 78. SUB (IX+d) 7 79. SUB (IY+d) 7 80. SBC A, 7 81. SBC A,n 7 82. SBC A,(HL) 7 83. SBC A,(IX+d) 7 84. SBC A,(IY+d) 7 85. AND 7 86. AND n 7 87. AND (HL) 7 88. AND (IX+d) 7 89. AND (IY+d) 7 90. OR 7 91. OR n 8 92. OR (HL) 8 93. OR (IX+d) 8 94. OR (IY+d) 8 95. XOR 8 96. XOR n 8 97. XOR (HL) 8 98. XOR (IX+d) 8 99. XOR (IY+d) 8 100. CP 8 101. CP n 8 102. CP (HL) 8 103. CP (IX+d) 8 104. CP (IY+d) 8 105. INC 8 106. INC (HL) 9 107. INC (IX+d) 9 2
108. INC (IY+d) 9 109. DEC 9 110. DEC (HL) 9 111. DEC (IX+d) 9 112. DEC (IY+d) 9 Ⅵ. その他の算術演算 CPU 制御命令 9 113. DAA 9 114. CPL 9 115. NEG 9 116. CCF 9 117. SCF 9 118. NOP 9 119. HALT 10 Ⅶ. 16 ビット算術演算命令 10 120. ADD HL,BC 10 121. ADD HL,DE 10 122. ADD HL,HL 10 123. ADD HL,SP 10 124. ADC HL,BC 10 125. ADC HL,DE 10 126. ADC HL,HL 10 127. ADC HL,SP 10 128. SBC HL,BC 10 129. SBC HL,DE 10 130. SBC HL,HL 10 131. SBC HL,SP 10 132. ADD IX,BC 10 133. ADD IX,DE 10 134. ADD IX,IX 10 135. ADD IX,SP 10 136. ADD IY,BC 10 137. ADD IY,DE 11 138. ADD IY,IY 11 139. ADD IY,SP 11 140. INC BC 11 141. INC DE 11 142. INC HL 11 143. INC SP 11 144. INC IX 11 145. INC IY 11 146. DEC BC 11 147. DEC DE 11 148. DEC HL 11 149. DEC SP 11 150. DEC IX 11 151. DEC IY 11 Ⅷ. 回転 シフト命令 11 152. RLCA 11 153. RLA 11 154. RRCA 12 155. RRA 12 156. RLC 12 157. RLC (HL) 12 158. RLC (IX+d) 12 159. RLC (IY+d) 12 160. RL 12 161. RL (HL) 12 162. RL (IX+d) 12 163 RL (IY+d) 12 164. RRC 12 165. RRC (HL) 12 166. RRC (IX+d) 12 167. RRC (IY+d) 12 168. RR 12 169. RR (HL) 12 170. RR (IX+d) 12 171. RR (IY+d) 12 172. SLA 13 173.SLA (HL) 13 174. SLA (IX+d) 13 175.SLA (IY+d) 13 176. SRA 13 177. SRA (HL) 13 178. SRA (IX+d) 13 179. SRA (IY+d) 13 180. SRL 13 181. SRL (HL) 13 182. SRL (IX+d) 13 183. SRL (IY+d) 13 184. RLD 13 185. RRD 13 Ⅸ. ビットセット リセット テスト命令 14 186. BIT b, 14 187.BIT b,(hl) 14 188.BIT b,(ix+d) 14 189.BIT b,(iy+d) 14 190.SET b, 14 191.SET b,(hl) 14 192. SET b,(ix+d) 14 193.SET b,(iy+d) 15 194. RES b, 15 195.RES b,(hl) 15 196. RES b,(ix+d) 15 197. RES b,(iy+d) 15 Ⅹ. ジャンプ命令 15 198. JP nn 15 199. JP NZ,nn 15 200. JP Z,nn 15 201. JP NC,nn 15 202. JP C,nn 15 203. JP PO,nn 15 204. JP PE,nn 15 205. JP P,nn 16 206. JP M,nn 16 207. JR e 16 208. JR C,e 16 209. JR NC,e 16 210. JR Z,e 16 211. JR NZ,e 16 212. JP (HL) 16 213. JP (IX) 16 214. JP (IY) 16 215. DJNZ e 16 ⅩⅠ. コール リターン命令 16 216. CALL nn 16 217. CALL NZ,nn 16 218. CALL Z,nn 17 3
219. CALL NC,nn 17 220. CALL C,nn 17 221. CALL PO,nn 17 222. CALL PE,nn 17 223. CALL P,nn 17 224. CALL M,nn 17 225. RET 17 226. RET NZ 17 227. RET Z 17 228. RET NC 17 229. RET C 17 230. RET PO 17 231. RET PE 17 232. RET P 17 233. RET M 17 234. RETI 17 235. RETN 17 236. RST n 17 ⅩⅡ. 入出力命令 18 237. IN A,(n) 18 238. IN,(C) 18 239. INI 18 240. INIR 18 241. IND 18 242. INDR 18 243. OUT (n),a 18 244.OUT (C), 18 245. OUTI 18 246. OTIR 18 247. OUTD 18 248. OTDR 18 ⅩⅢ. 割込制御 249. DI 19 250. EI 19 251. IM 0 19 252. IM 1 19 253. IM 2 19 463 0067 名古屋市守山区守山 2-8-14 パレス守山 305 有限会社中日電工 052 791 6254 Fax052 791 1391 E mail thisida@alles.o.jp 2010.3.20 Rev. 1.0 4
Z80 命令説明書 [ はじめに ] Z80 はザイログ社が開発した 8 ビット CPU で 8080( インテル社 ) の命令の全てを含み さらにその上全く新しい多くの命令を実行することができます 8080 の命令については全く同じ命令コードで 8080 と同じ動作をしますが Z80 と 8080 はメーカーが異なるため同じ命令コードであってもニーモニックは異なっています 例 ) コード 7E のときザイログ社は LD A,(HL) インテル社は MOV A,M と表記します この説明書では Z80 ニーモニック ( ザイログニーモニック ) に従って説明してありますが 同時に 8080 ニーモニック ( インテルニーモニック ) も併記してあります 説明の後ろに ( ) で記してあるのがインテルニーモニックです インテルニーモニックが記してない命令は 8080 には無くて新たに Z80 で追加された命令です Ⅰ. レジスタについて 8 ビットレジスタ B C D E H L A F 16 ビットレジスタ SP PC については 8080 と全く同じです Z80 にはこの他に裏レジスタとして B C D E H L A F があり EX 命令で交互に使用することができますが 初心者が使用すると混乱しますので慣れるまでは使わない方が良いでしょう この他にインデックスレジスタ IX IY(16 ビット ) があります これによって相対アドレッシングが可能になっています この他 I レジスタと R レジスタがありますが普通の処理では使いません Ⅱ. 8 ビット転送命令 [ 注 ] 以下の説明中 クロックというのはその命令を実行するのに必要なサイクル数のことで CPU クロックが 6MHz のとき 1 クロックは 1/6μS(0.167μS) になります したがってたとえばクロック =7 の命令の実行時間は 0.167 7=1.134μS になります 1. LD, コード ( 表 1) クロック 4 は B C D E H L A を表します の内容を に転送します の内容は変化しません (MOV 1,2) 2. LD,(HL) コード ( 表 2) クロック 7 (HL) は HL レジスタで示されるメモリを表します (HL) の内容を に転送します (HL) の内容は変化しません (MOV,M) ( 表 1) ( 表 2) ( 表 3) B C D E H L A B 40 41 42 43 44 45 47 B 46 B 70 C 48 49 4A 4B 4C 4D 4F C 4E C 71 D 50 51 52 53 54 55 57 D 56 D 72 E 58 59 5A 5B 5C 5D 5F E 5E E 73 H 60 61 62 63 64 65 67 H 66 H 74 L 68 69 6A 6B 6C 6D 6F L 6E L 75 A 78 79 7A 7B 7C 7D 7F A 7E A 77 3. LD (HL), コード ( 表 3) クロック 7 の内容を (HL) に転送します の内容は変化しません (MOV M,) 4. LD,n コード ( 表 4) クロック 7 n はこの命令コードの次のアドレスに書かれたデータを示します 8 ビットデータ n を に転送します (MVI,n) 5. LD (HL),n コード 36 クロック10 nを (HL) に転送します ( は任意の8ビットデータを表します ) (MVI M,n) ( 表 4) ( 表 5) ( 表 6) B 06 B DD46 B FD46 C 0E C DD4E C FD4E D 16 D DD56 D FD56 E 1E E DD5E E FD5E H 26 H DD66 H FD66 L 2E L DD6E L FD6E A 3E A DD7E A FD7E 表 5 表 6の はインデックスレジスタに対する増分 dを示します 1
6. LD A,(BC) コード 0A クロック 7 (BC) は BC レジスタで示されるメモリを表します (BC) の内容を A に転送します (BC) の内容は変化しません (LDAX B) 7. LD A,(DE) コード 1A クロック 7 (DE) は DE レジスタで示されるメモリを表します (DE) の内容を A に転送します (DE) の内容は変化しません (LDAX D) 8. LD A,(nn) コード 3A クロック 13 (nn) は命令コード 3A に続く 2 バイトデータで示されるアドレスのメモリを表します (nn) の内容を A に転送します (nn) の内容は変化しません (LDA nn) この命令のように 2 バイトのデータを扱う場合には先に来るほうが下位アドレスであとに上位アドレスがきます たとえば 1234 番地の内容を転送する場合のコードは 3A3412 になります 9. LD (BC),A コード 02 クロック 7 A の内容を (BC) に転送します A の内容は変化しません (STAX B) 10. LD (DE),A コード 12 クロック 7 A の内容を (DE) に転送します A の内容は変化しません (STAX D) 11. LD (nn),a コード 32 クロック 13 A の内容を (nn) に転送します A の内容は変化しません (STAX nn) nn の実際の表記については 8.LD A,(nn) の説明を参照してください 12. LD,(IX+d) コード ( 表 5) クロック 19 (IX+d) の内容を に転送します (IX+d) はインデックスレジスタ IX で示されるアドレスに +d したアドレスのメモリを示します d は + 方向に 00~7F - 方向に FF~80 までの数が許されます FF は +FF(10 進の 255 ではなくて符号付数で -1 を意味します 00 ~7F は IX で示すアドレス値にそのまま加算されて真のアドレスを示しますが FF~80 は IX で示すアドレス値に対して FFFF~FF80 の加算が行われます 実際には 1~80 が IX の値から減算されてそれが真のアドレスになります (IX+d) の内容は変化しません 13. LD,(IY+d) コード ( 表 6) クロック 19 IX のかわりに IY を使うだけで動作は 12. と同じです 14. LD (IX+d), コード ( 表 7) クロック 19 12.LD,(IX+d) とは逆に (IX+d) に の内容を入れます 15. LD (IY+d), コード ( 表 8) クロック19 13.LD,(IY+d) とは逆に (IY+d) にの内容を入れます ( 表 7) ( 表 8) B DD70 B FD70 C DD71 C FD71 D DD72 D FD72 E DD73 E FD73 H DD74 H FD74 L DD75 L FD75 A DD77 A FD77 表 7 表 8の はインデックスレジスタに対する増分 dを示します 16. LD (IX+d),n コード DD36 クロック 19 (IX+d) にデータ n を転送します ( はインデックスレジスタの増分 d, は 8 ビットのデータ n を示します ) 17. LD (IY+d),n コード FD36 クロック 19 (IY+d) にデータ n を転送します ( はインデックスレジスタの増分 d, は 8 ビットのデータ n を示します ) 以上の他に LD A,I LD A,R LD I,A LD R,A の 4 命令がありますが一般には使いません ここでは説明を省略します Ⅲ.16 ビット転送命令 ( この命令群もフラグに影響を与えません ) 18. LD BC,nn コード 01 クロック 10 16 ビットのデータ nn をペアレジスタ BC に転送します 2
nn の実際の表記については 8.LD A,(nn) の説明を参照してください (LXI B,nn ) 19. LD DE,nn コード 11 クロック 10 nn を DE に転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください (LXI D,nn ) 20. LD HL,nn コード 21 クロック 10 nn を HL に転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください (LXI H,nn ) 21. LD SP,nn コード 31 クロック 10 nn を SP に転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください (LXI SP,nn ) 22. LD IX,nn コード DD21 クロック 14 nn を IX に転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 23. LD IY,nn コード FD21 クロック 14 nn を IY に転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 24. LD HL,(nn) コード 2A クロック 16 2 バイトのデータ nn によって示されるアドレスのメモリ内容を L に nn+1 番地のメモリ内容を H に転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください (LHLD nn ) 25. LD BC,(nn) コード ED4B クロック 20 (nn) を C へ (nn+1) を B へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 26. LD DE,(nn) コード ED5B クロック 20 (nn) を E へ (nn+1) を D へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 27. LD SP,(nn) コード ED7B クロック 20 (nn) (nn+1) を SP へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 28. LD IX,(nn) コード DD2A クロック 20 (nn) (nn+1) を IX へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 29. LD IY,(nn) コード FD2A クロック 20 (nn) (nn+1) を IY へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 30. LD (nn),hl コード 22 クロック 16 L の内容を (nn) へ H の内容を (nn+1) へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください (SHLD nn) 31. LD (nn),bc コード ED43 クロック 20 C の内容を (nn) へ B の内容を (nn+1) へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 32. LD (nn),de コード ED53 クロック 20 E の内容を (nn) へ D の内容を (nn+1) へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 33. LD (nn),sp コード ED73 クロック 20 SP の内容を (nn) (nn+1) へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 34. LD (nn),ix コード DD22 クロック 20 IX の内容を (nn) (nn+1) へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 35. LD (nn),iy コード FD22 クロック 20 IY の内容を (nn) (nn+1) へ転送します nn の実際の表記については 8.LD A,(nn) の説明を参照してください 36. LD SP,HL コード F9 クロック 6 HL の内容を SP に転送します (SPHL) 3
37. LD SP,IX コード DDF9 クロック 10 IX の内容を SP に転送します 38. LD SP,IY コード FDF9 クロック 10 IY の内容を SP に転送します 39. PUSH BC コード C5 クロック 11 ペアレジスタ BC の内容を SP で示されるプッシュダウンスタックへ転送します (SP-1) B,(SP-2) C (PUSH B) 40. PUSH DE コード D5 クロック 11 DE の内容をスタックに転送します (SP-1) D,(SP-2) E (PUSH D) 41. PUSH HL コード E5 クロック 11 HL の内容をスタックに転送します (SP-1) H,(SP-2) L (PUSH H) 42. PUSH AF コード F5 クロック 11 アキュムレータ A とフラグレジスタ F の内容をスタックに転送します (SP-1) A,(SP-2) F (PUSH PSW) 43. PUSH IX コード DDE5 クロック 15 IX の内容をスタックに転送します 44. PUSH IY コード FDE5 クロック 15 IY の内容をスタックに転送します 45. POP BC コード C1 クロック 10 スタックのトップにあるデータが BC に転送されます C (SP) B (SP+1) (POP B) 46. POP DE コード D1 クロック 10 スタックのトップにあるデータが DE に転送されます E (SP) D (SP+1) (POP D) 47. POP HL コード E1 クロック 10 スタックのトップにあるデータが HL に転送されます L (SP) H (SP+1) (POP H) 48. POP AF コード F1 クロック 10 スタックのトップにあるデータが A 及び F に転送されます F (SP) A (SP+1) (POP PSW) 49. POP IX コード DDE1 クロック 14 スタックのトップにあるデータが IX に転送されます 50. POP IY コード FDE1 クロック 14 スタックのトップにあるデータが IY に転送されます Ⅳ. 交換 ブロック転送 検索命令 51. EX DE,HL コード EB クロック 4 ペアレジスタ DE と HL の内容を交換します (XCHG) 52. EX AF,AF コード 08 クロック 4 A 及び F とこれに対応する裏レジスタ A F とを交換します なお プログラム実行のうえで 表レジスタ と 裏レジスタ とは全く同等で区別して認識することはできません したがって不用意にこの命令を用いると混乱を招きます この点については次の EXX 命令も同じです しかし スタックを使わないでレジスタの退避に用いることが出来るので使い方によっては便利な命令です その意味では次の EXX 命令は BC,DE,HL の 3 つのペアレジスタを一度に交換できるため更にメリットが大きくなります 53. EXX コード D9 クロック 4 ペアレジスタ BC と BC DE と DE HL と HL とを交換します (52.EX AF,AF 参照 ) 54. EX (SP),HL コード E3 クロック 19 スタックのトップにあるデータ (2 バイト ) とペアレジスタ HL の内容を交換します L と (SP) H と (SP+1) の内容を交換します (XT 4
HL) 55. EX (SP),IX コード DDE3 クロック 23 スタックのトップにあるデータ (2 バイト ) と IX との内容を交換します 56. EX (SP),IY コード FDE3 クロック 23 スタックのトップあるデータ (2 バイト ) と IY との内容を交換します [ フラグについて ] 以上の命令はフラグに影響を与えませんが 以下の命令はそれぞれフラグに影響を与えます なお フラグの記号が 8080 の表現と一部異なっています 念のため以下に整理しておきます C キャリーフラグ 計算結果のオーバーフローでセットされ ローティト命令でもセット リセットされる Z ゼロフラグ 計算結果がゼロのときセット P/V パリティ / オーバーフローフラグ (8080:P) 1バイト内の1になっているビット数が偶数でセット 奇数でリセット また算術演算の結 果オーバーフローでセット S サインフラグ 計算結果がマイナスのときセット (8ビット目が1の数がマイナスになる FF~80がマイナス 00~7Fがプラス ) N 加減算フラグ ADD 命令のとき0 SUB 命令のとき1(DAA 命令に使用される ) H ハーフキャリーフラグ (8080:CY4 ) 算術演算のビット3とビット4との間のキャリー ボローの有無によってSET RESETさ れる フラグレジスタ F における各フラグの位置 7 6 5 4 3 2 1 0 S Z H P/V N C は使用されない なお 以下の説明では影響を受けるフラグのみ表記します 書いてないフラグは影響を受けないことを意味します 57. LDI コード EDA0 クロック 16 HL レジスタで示されるメモリアドレスの内容を DE レジスタで示されるメモリアドレスへ転送したうえで HL DE を +1 します また同時に BC の内容を -1 します つまり (DE) (HL) HL HL+1 DE DE+1 BC BC-1 この命令の実行によって BC=0 になると P/V=0 それ以外では P/V=1 になります また N H はつねに 0 になります 58. LDIR コード EDB0 クロック 21(BC 0) 16(BC=0) とても便利な命令です (HL) から (DE) へデータ転送し HL と DE を +1 すると共に BC レジスタを -1 して BC=0 になるまでくり返し実行します 転送したいデータの先頭アドレスを HL に 転送先の先頭アドレスを DE に入れ 転送バイト数を BC に入れたうえでこの命令を実行させるだけでデータブロックの転送が行われます P/V=0 N=0 H=0 59. LDD コード EDA8 クロック 16 57.LDI と同様 (DE) (HL) を実行し BC BC-1 しますが HL,DE に対しては内容を -1 します BC=0 のとき P/V=0 B C 0 のとき P/V=1 N H は常に 0 になります 60. LDDR コード EDB8 クロック 21(BC 0) 16(BC=0) 58.LDIR と同様 (DE) (HL) を繰り返しますが DE HL は -1 され BC も -1 されます BC=0 になるまで繰り返し実行されます P/V=0 N=0 H=0 61. CPI コード EDA1 クロック 16 A-(HL) を計算しこの結果によって Z S H がセット又はリセットされ N=1 になります A,(HL) は変化しません また同時に HL が +1 され BC が -1 されます その結果 BC=0 ならば P/V=0 BC 0 なら P/V=1 になります 62. CPIR コード EDB1 クロック 21(BC 0) 16(BC=0) 上記と同じように A-(HL) を行いますがこの場合は BC=0 になるまで又は A-(HL)=0 つまり A=(HL) になるようなデータが見つかるまで繰り返し実行されます この命令の実行の結果 A-(HL)=0 のとき Z=1 A-(HL)<0 のとき S=1 BC 0 なら P/ V=1 また N はつねに 1 になります 計算結果によって H がセット リセットされます 5
63. CPD コード EDA9 クロック 16 HL が -1 される点を除いて他は 61.CPI と同じです 64. CPDR コード EDB9 クロック 21(BC 0) 16(BC=0) HL が -1 されていく点を除いて他は 62.CPIR と同じです Ⅴ. 8 ビット算術 論理演算命令 このグループの命令は INC,DEC 命令を除いてすべてアキュムレータ (A レジスタ ) との間で演算されます また すべてフラグに影響を与えます 65. ADD A, コード ( 表 9) クロック 4 アキュムレータ A とレジスタ とを加算し結果を A に入れます この結果 C Z S H がセット リセットされ N=0 になります また 結果がオーバーフローしたとき P/V=1 その他のときは P/V=0 になります (ADD) 66. ADD A,n コード C6 クロック7 Aとnとを加算し 結果をAに入れます フラグについては65.ADD A, と同じです (ADI n ) ( 表 9) ( 表 10) B 80 B 88 C 81 C 89 D 82 D 8A E 83 E 8B H 84 H 8C L 85 L 8D A 87 A 8F 67. ADD A,(HL) コード 86 クロック 7 A と HL を加算し 結果を A に入れます フラグについては 65.ADD A, と同じです (ADD M) 68. ADD A,(IX+d) コード DD86 クロック 19 A と (IX+d) を加算し 結果を A に入れます は増分 d です フラグについては 65.ADD A, と同じです 69. ADD A,(IY+d) コード FD86 クロック 19 A と (IY+d) を加算し 結果を A に入れます は増分 d です フラグについては 65.ADD A, と同じです 70. ADC A, コード ( 表 10) クロック 4 A とレジスタ とさらにキャリーフラグ C とを加算し結果を A に入れます フラグについては 65.ADD A, と同じです (ADC ) 71. ADC A,n コード CE クロック 7 A と n とキャリー C とを加算し A に入れます フラグについては 65.ADD A, と同じです (ACI n ) 72. ADC A,(HL) コード 8E クロック 7 A と (HL) とキャリー C とを加算し A に入れます フラグについては 65.ADDA, と同じです (ADC M) 73. ADC A,(IX+d) コード DD8E クロック 19 A と (IX+d) とキャリー C とを加算し A に入れます は増分 d です フラグについては 65.ADDA, と同じです 74. ADC A,(IY+d) コード FD8E クロック 19 A と (IY+d) とキャリー C とを加算し A に入れます フラグについては 65.ADDA, と同じです 75. SUB コード ( 表 11) クロック 4 A から を引いて結果を A に入れます フラグは N=1 になることを除いて 65.ADD A, と同じです (SUB ) 76. SUB n コード D6 クロック 7 A から n を引いて結果を A に入れます フラグは 75.SUB と同じです (SUI n ) 77. SUB (HL) コード 96 クロック 7 A から (HL) を引いて結果を A に入れます フラグは 75.SUB と同じです (SUB M) 6
( 表 11) ( 表 12) B 90 B 98 C 91 C 99 D 92 D 9A E 93 E 9B H 94 H 9C L 95 L 9D A 97 A 9F 78. SUB (IX+d) コード DD96 クロック 19 A から (IX+d) を引いて結果を A に入れます フラグは 75.SUB と同じです 79. SUB (IY+d) コード FD96 クロック 19 A から (IY+d) を引いて結果を A に入れます フラグは 75.SUB と同じです 80. SBC A, コード ( 表 12) クロック 4 A から を引き さらにキャリー C を引いて結果を A に入れます フラグは 75.SUB と同じです (SBB ) 81. SBC A,n コード DE クロック 7 A から n を引き さらにキャリー C を引いて結果を A に入れます フラグは 75.SUB と同じです (SBI n ) 82. SBC A,(HL) コード 9E クロック 7 A から (HL) を引き さらにキャリー C を引いて結果を A に入れます フラグは 75.SUB と同じです (SBB M) 83. SBC A,(IX+d) コード DD9E クロック 19 A から (IX+d) を引き さらにキャリー C を引いて結果を A に入れます フラグは 75.SUB と同じです 84. SBC A,(IY+d) コード FD9E クロック 19 A から (IY+d) を引き さらにキャリー C を引いて結果を A に入れます フラグは 75.SUB と同じです 85. AND コード ( 表 13) クロック 4 A とレジスタ との論理積 (AND) をとって結果を A に入れます フラグは C=0 N=0 H=1 になり 結果が 0 なら Z=1 また マイナスなら S=1 になり 結果のうち 1 のビットが偶数ならば P/V=1 となります (ANA ) ( 表 13) ( 表 14) B A0 B B0 C A1 C B1 D A2 D B2 E A3 E B3 H A4 H B4 L A5 L B5 A A7 A B7 86. AND n コード E6 クロック 7 A と n との AND をとって結果を A に入れます フラグは 85.AND と同じです (ANI n ) 87. AND (HL) コード A6 クロック 7 A と (HL) との AND をとって結果を A に入れます フラグは 85.AND と同じです (ANA M) 88. AND (IX+d) コード DDA6 クロック 19 A と (IX+d) との AND をとって結果を A に入れます フラグは 85.AND と同じです 89. AND (IY+d) コード FDA6 クロック 19 A と (IY+d) との AND をとって結果を A に入れます フラグは 85.AND と同じです 90. OR コード ( 表 14) クロック 4 A と との論理和 (OR) をとって結果を A に入れます フラグは H=0 になることを除いては 85.AND と同じです (ORA ) 7
91. OR n コード F6 クロック 7 A と n との OR をとって結果を A に入れます フラグは 90.OR と同じです (ORI n ) 92. OR (HL) コード B6 クロック 7 A と (HL) との OR をとって結果を A に入れます フラグは 90.OR と同じです (ORA M) 93. OR (IX+d) コード DDB6 クロック 19 A と (IX+d) との OR をとって結果を A に入れます フラグは 90.OR と同じです 94. OR (IY+d) コード FDB6 クロック 19 A と (IY+d) との OR をとって結果を A に入れます フラグは 90.OR と同じです 95. XOR コード ( 表 15) クロック 4 A と との排他的論理和 (Exclusive OR) をとって結果を A に入れます フラグは 90.OR と同じです (XRA ) ( 表 15) ( 表 16) B A8 B B8 C A9 C B9 D AA D BA E AB E BB H AC H BC L AD L BD A AF A BF 96. XOR n コード EE クロック 7 A と n との排他的論理和をとって結果を A に入れます フラグは 90.OR と同じです (XRI n ) 97. XOR (HL) コード AE クロック 7 A と (HL) との排他的論理和をとって結果を A に入れます フラグは 90.OR と同じです (XRA M) 98. XOR (IX+d) コード DDAE クロック 19 A と (IX+d) との排他的論理和をとって結果を A に入れます フラグは 90.OR と同じです 99. XOR (IY+d) コード FDAE クロック 19 A と (IY+d) との排他的論理和をとって結果を A に入れます フラグは 90.OR と同じです 100. CP コード ( 表 16) クロック 4 A と とを比較します 具体的には A- を計算しその結果をフラグによって示します しかし SUB 命令とは異なり A の内容は変化しません N=1 になります A- でボローが生じた時 C=1 また A= のとき Z=1 A- がマイナスの時 S=1 A- の結果 ビット 4 からのボローがあれば H=1 結果がオーバーフローなら P/V= 1 になります (CMP ) 101. CP n コード FE クロック 7 A と n とを比較します フラグは 100.CP と同じです (CPI n ) 102. CP (HL) コード BE クロック 7 A と (HL) とを比較します フラグは 100.CP と同じです (CMP M) 103. CP (IX+d) コード DDBE クロック 19 A と (IX+d) とを比較します フラグは 100.CP と同じです 104. CP (IY+d) コード FDBE クロック 19 A と (IY+d) とを比較します フラグは 100.CP と同じです 105. INC コード ( 表 17) クロック 4 レジスタ の内容を +1 します 以下の INC,DEC 命令ではキャリー C のみ変化しません 注意して下さい N=0 になります 結果が 0 なら Z=1 マイナスなら S=1 この命令の実行後 結果が 80H ならば ( つまり実行前の値が 7FH ならば )P/V=1 になります ビット 3 からキャリーが出れば H=1 になります (INR ) 8
( 表 17) ( 表 18) B 04 B 05 C 0C C 0D D 14 D 15 E 1C E 1D H 24 H 25 L 2C L 2D A 3C A 3D 106. INC (HL) コード 34 クロック 11 (HL) の内容を +1 します フラグは 105..INC と同じです (INR M) 107. INC (IX+d) コード DD34 クロック 23 (IX+d) の内容を +1 します フラグは 105.INC と同じです 108. INC (IY+d) コード FD34 クロック 23 (IY+d) の内容を +1 します フラグは 105.INC と同じです 109. DEC コード ( 表 18) クロック 4 の内容を -1 します フラグは N=1 になります また, 結果が 7FH( つまり実行前の値が 80H) ならば P/V=1 この他のフラグについては 105.INC と同じです (DCR ) 110. DEC (HL) コード 35 クロック 11 (HL) の内容を -1 します フラグは 109.DEC と同じです (DCR M) 111. DEC (IX+d) コード DD35 クロック 23 (IX+d) の内容を -1 します フラグは 109.DEC と同じです 112. DEC (IY+d) コード FD35 クロック 23 (IY+d) の内容を -1 します フラグは 109.DEC と同じです Ⅵ. その他の算術演算 CPU 制御命令 113. DAA コード 27 クロック 4 加減算後の A レジスタの内容を BCD 表示 2 桁に直します 動作はかなり複雑ですが 8 ビットの数を BCD2 桁とみなして加減算した後この命令を行うことによって 結果も BCD2 桁で得られるものです したがって 加減算を行う前の数値が BCD 表現で誤っている場合 ( 例えば AB とか 7D) は DAA 命令によっても正しい結果は得られません ここでいう加算とは ADD ADC INC 命令であり 減算とは SUB SBC DEC 及び NEG( 後退 ) 命令です 結果が 0 のとき Z=1 マイナスの時 S=1 また 結果のビットが 1 であるものが偶数個あるとき P/V=1 またさらに上位桁へのキャリー ボローが出た場合は C=1 になります (DAA) 114. CPL コード 2F クロック 4 A の内容の 1 0 を反転します ( 各ビット毎 1 0 0 1 にする ) フラグは N=1 H=1 他は変化しません (CMA) 115. NEG コード ED44 クロック 8 0-A を計算して A に入れます (A の符号を逆にする ) ただし 80H(-128) は変化しないので注意して下さい N=1 結果が 0 なら Z=1 マイナスなら S=1 ビット 4 からボローがあれば H=1 命令実行前の A の内容が 0 ならば C=0 また実行前の内容が 8 0H ならば P/V=1 になります 116. CCF コード 3F クロック 4 キャリーフラグ C を反転します 同時に N=0 になり H は実行前の C の内容と同じになります 他のフラグは不変です (CMC) 117. SCF コード 37 クロック 4 キャリーフラグ C をセットします N=0 H=0 になります (STC) 118. NOP コード 00 クロック 4 何も実行しないで次の命令に進みます No Opeation(NOP) 9
119. HALT コード 76 クロック 4 割込かリセットがかかるまで CPU の実行を停止します (HLT) Ⅶ. 16 ビット算術演算命令 120. ADD HL,BC コード 09 クロック 11 HL の内容と BC の内容を加算し 結果を HL に入れます N=0 になります ビット 17 からのキャリーがあれば C=1 になります ビット 11 からのキャリーがあれば H=1 になります (DAD B) 121. ADD HL,DE コード 19 クロック 11 HL と DE とを加算し 結果を HL に入れます フラグについては 120.ADD HL,BC と同じです (DAD D) 122. ADD HL,HL コード 29 クロック 11 HL の内容を 2 倍にします フラグは 120.ADD HL,BC と同じです (DAD H) 123. ADD HL,SP コード 39 クロック 11 HL と SP とを加算し 結果を HL に入れます フラグは 120.ADD HL,BC と同じです (DAD SP) 124. ADC HL,BC コード ED4A クロック 15 HL と BC とキャリー C とを加算し 結果を HL に入れます N=0 H= 不明 ビット 15 からのキャリーがあれば C=1 また結果が 0 ならば Z=1 マイナスなら S=1 オーバーフローなら P/V=1 になります 125. ADC HL,DE コード ED5A クロック 15 HL と DE とキャリー C とを加算し 結果を HL に入れます フラグは 124.ADC HL, BC と同じです 126. ADC HL,HL コード ED6A クロック 15 HL の内容を 2 倍し キャリー C を加えます フラグは 124.ADC HL,BC と同じです 127. ADC HL,SP コード ED7A クロック 15 HL と SP とキャリー C とを加算し 結果を HL に入れます フラグは 124.ADC HL, BC と同じです 128. SBC HL,BC コード ED42 クロック 15 HL から BC 及びキャリー C を減算し 結果を HL に入れます N=0 になること以外は フラグについては 124.ADC HL,BC と同じです 129. SBC HL,DE コード ED52 クロック 15 HL から DE 及びキャリー C を減算し 結果を HL に入れます フラグは 128.SBC HL,BC と同じです 130. SBC HL,HL コード ED62 クロック 15 HL から HL 及びキャリー C を減算し 結果を HL に入れます フラグは 128.SBC HL,BC と同じです 131. SBC HL,SP コード ED72 クロック 15 HL から SP 及びキャリー C を減算し 結果を HL に入れます フラグは 128.SBC HL,BC と同じです 132. ADD IX,BC コード DD09 クロック 15 インデックスレジスタ IX と BC との内容を加え IX に入れます N=0 になります ビット 17 からのキャリーがあれば C=1 になります ビット 11 からのキャリーがあれば H=1 になります 133. ADD IX,DE コード DD19 クロック 15 IX+DE の結果を IX に入れます フラグは 132.ADD IX,BC と同じです 134. ADD IX,IX コード DD29 クロック 15 IX+IX の結果を IX に入れます (IX の内容を倍にする ) フラグは 132.ADD IX,BC と同じです 135. ADD IX,SP コード DD39 クロック 15 IX+SP の結果を IX に入れます フラグは 132.ADD IX,BC と同じです 136. ADD IY,BC コード FD09 クロック 15 IY+BC の結果を IY に入れます フラグは 132.ADD IX,BC と同じです 10
137. ADD IY,DE コード FD19 クロック 15 IY+DE の結果を IY に入れます フラグは 132.ADD IX,BC と同じです 138. ADD IY, IY コード FD29 クロック 15 IY の内容を倍にします フラグは 132.ADD IX,BC と同じです 139. ADD IY,SP コード FD39 クロック 15 IY+SP を計算して結果を IY に入れます フラグは 132.ADD IX,BC と同じです 140. INC BC コード 03 クロック 6 BC の内容を +1 します フラグは変化しません (INX B) 141. INC DE コード 13 クロック 6 DE の内容を +1 します (INX D) 142. INC HL コード 23 クロック 6 HL の内容を +1 します (INX H) 143. INC SP コード 33 クロック 6 SP の内容を +1 します (INX SP) 144. INC IX コード DD23 クロック10 IXの内容を+1します 145. INC IY コード FD23 クロック10 IYの内容を+1します 146. DEC BC コード 0B クロック 6 BC の内容を -1 します (DCX B) 147. DEC DE コード 1B クロック 6 DE の内容を -1 します (DCX D) 148. DEC HL コード 2B クロック 6 HL の内容を -1 します (DCX H) 149. DEC SP コード 3B クロック 6 SP の内容を -1 します (DCX SP) 150. DEC IX コード DD2B クロック10 IXの内容を-1します 151. DEC IY コード FD2B クロック10 IYの内容を-1します Ⅷ. 回転 シフト命令 152. RLCA コード 07 クロック 4 A レジスタの内容を 1 ビット左にシフトし ビット 7 のデータをビット 0 に入れると共にキャリー C にも入れます N=0 H=0 となり C はシフト前のビット 7 が 1 のときセットされます (RLC) 153. RLA コード 17 クロック 4 キャリーを含め 9 ビットのデータを左に 1 ビット回転させます フラグは 152.RLCA と同じです (RAL) 11
154. RRCA コード 0F クロック 4 A の内容を右に 1 ビットシフトさせると共にビット 0 のデータをキャリー C にも入れます フラグはシフト前のビット 0 の内容が C に入る以外は 152.RLCA と同じです (RRC) 155.RRA コード 1F クロック 4 キャリーを含め 9 ビットのデータを 1 ビット右に回転させます フラグは 154.RRCA と同じです (RAR) 156.RLC コード ( 表 19) クロック 8 152.RLCA と同じ動作を について行います N=0 H=0 C が変化する他に結果のレジスタの値によって Z S がセット リセットされまた 1 のビット数により P/V がセット リセットされます 157.RLC (HL) コード CB06 クロック 15 152.RLCA と同じ動作を (HL) について行います フラグについては 156.RLC と同じです 158.RLC (IX+d) コード DDCB 06 クロック 23 152.RLCA と同じ動作を (IX+d) について行います フラグについては 156.RLC と同じです ( 表 19) B C D E H L A CB00 CB01 CB02 CB03 CB04 CB05 CB07 159.RLC (IY+d) コード FDCB 06 クロック 23 152.RLCA と同じ動作を (IY+d) について行います フラグについては 156.RLC と同じです 160.RL コード ( 表 20) クロック 8 153.RLA と同じ動作を について行います フラグは 156.RLC と同じです 161.RL (HL) コード CB16 クロック 15 153.RLA と同じ動作を (HL) ついて行います フラグは 156.RLC と同じです 162.RL (IX+d) コード DDCB 16 クロック 23 153.RLA と同じ動作を (IX+d) について行います フラグは 156.RLC と同じです ( 表 20) B C D E H L A CB10 CB11 CB12 CB13 CB14 CB15 CB17 163.RL (IY+d) コード FDCB 16 クロック 23 153.RLA と同じ動作を (IY+d) について行います フラグは 156.RLC と同じです 164.RRC コード ( 表 21) クロック 8 154.RRCA と同じ動作を について行います フラグは 156.RLC と同じです 165.RRC (HL) コード CB0E クロック 15 154.RRCA と同じ動作を (HL) について行います フラグは 156.RLC と同じです 166.RRC (IX+d) コード DDCB 0E クロック 23 154.RRCA と同じ動作を (IX+d) について行います フラグは 156.RLC と同じです ( 表 21) B C D E H L A CB08 CB09 CB0A CB0B CB0C CB0D CB0F 167.RRC (IY+d) コード FDCB 0E クロック 23 154.RRCA と同じ動作を (IY+d) について行います フラグは 156.RLC と同じです 168.RR コード ( 表 22) クロック 8 155.RRA と同じ動作を について行います フラグは 156.RLC と同じです 169.RR (HL) コード CB1E クロック 15 155.RRA と同じ動作を (HL) について行います フラグは 156.RLC と同じです 170.RR (IX+d) コード DDCB 1E クロック 23 155.RRA と同じ動作を (IX+d) について行います フラグは 156.RLC と同じです ( 表 22) B C D E H L A CB18 CB19 CB1A CB1B CB1C CB1D CB1F 171.RR (IY+d) コード FDCB 1E クロック 23 155.RRA と同じ動作を (IY+d) について行います フラグは 156.RLC と同じです 12
172.SLA コード ( 表 23) クロック 8 を左に 1 ビットシフトし ビット 7 のデータをキャリー C に入れ またビット 0 には 0 を入れます フラグは 156.RLC と同じです C 7 0 0 173.SLA (HL) コード CB26 クロック 15 172.SLA と同じ動作を (HL) について行います フラグは 156.RIC と同じです 174.SLA (IX+d) コード DDCB 26 クロック 23 172.SLA と同じ動作を (IX+d) について行います フラグは 156.RLC と同じです ( 表 23) B C D E H L A CB20 CB21 CB22 CB23 CB24 CB25 CB27 175.SLA (IY+d) コード FDCB 26 クロック 23 172.SLA と同じ動作を (IY+d) について行います フラグは 156.RLC と同じです 176.SRA コード ( 表 24) クロック 8 の内容を 1 ビット右にシフトし ビット 0 のデータをキャリー C に転送しますが ビット 7 は変化しません つまりビット 7 とビット 6 はつねに同じになります フラグは 156.RLC と同じです 7 0 C 177.SRA (HL) コード CB2E クロック 15 176. と同じ動作を (HL) について行います フラグは 156.RLC と同じです 178.SRA (IX+d) コード DDCB 2E クロック 23 176. と同じ動作を (IX+d) について行います フラグは 156.RLC と同じです 179.SRA (IY+d) コード FDCB 2E クロック 23 176. と同じ動作を (IY+d) について行います フラグは 156.RLC と同じです 180.SRL コード ( 表 25) クロック 8 の内容を 1 ビット右にシフトし ビット 0 のデータをキャリー C に入れます ビット 7 には 0 を入れます フラグは 156.RLC と同じです 0 7 0 C ( 表 24) B C D E H L A ( 表 25) B C D E H L A CB28 CB29 CB2A CB2B CB2C CB2D CB2F CB38 CB39 CB3A CB3B CB3C CB3D CB3F 181.SRL (HL) コード CB3E クロック 15 180.SRL と同じ動作を (HL) について行います フラグは 156.RLC と同じです 182.SRL (IX+d) コード DDCB 3E クロック 23 180.SRL と同じ動作を (IX+d) について行います フラグは 156.RLC と同じです 183.SRL (IY+d) コード FDCB 3E クロック 23 180.SRL と同じ動作を (IY+d) について行います フラグは 156.RLC と同じです 184.RLD コード ED6F クロック 18 アキュムレータ A とメモリ (HL) との間で下図のようなデータの交換が行われます まず (HL) の下 4 ビットが上 4 ビットへ移され (H L) の上 4 ビットは A の下 4 ビットへ移され A の下 4 ビットは (HL) の下 4 ビットへ移されます フラグはキャリー C が変化しない点をのぞいて 156.RLC と同じです 7 4 3 0 7 4 3 0 Aレジスタ (HL) 185.RRD コード ED67 クロック 18 (HL) の下位 4 ビットを A の下位 4 ビットに移し A の下位 4 ビットを (HL) の上位 4 ビットに移し (HL) の上位 4 ビットを下位 4 ビットに移します フラグは 184.RLD と同じです 13
7 4 3 0 7 4 3 0 Aレジスタ (HL) Ⅸ. ビットセット リセット テスト命令 186.BIT b, コード CBxx (xx は下図参照 ) クロック 8 レジスタのうち b で指定したビットを調べ それが 0 なら Z=1 1 なら Z=0 にします N=0 H=1 になりますが P/V S は不定です xx(8ビット ) の内容 bbb ビット位置 レジスタ 01 bbb 000 0 000 B 001 1 001 C 010 2 010 D 011 3 011 E 100 4 100 H 101 5 101 L 110 6 111 A 111 7 ( 例 )D レジスタのビット 5 を調べる命令コードは bbb=101 =010 なので CB6A になります (6A=01101010) 187.BIT b,(hl) コード CBxx (xxは下図参照) クロック12 (HL) のうちビットbの状態を調べます 動作 フラグについては 186.BIT b,と同じです xx(8 ビット ) の内容 01 bbb 110 bbb は 186. の表参照 ( 例 ) ビット 3 のチェックならコードは CB5E になります 188. BIT b,(ix+d) コード DDCB xx (xx は下図参照 ) クロック 20 (IX+d) のうちビット b の状態を調べます は増分 d です 動作 フラグについては 186..BIT b, と同じです xx(8 ビット ) の内容 01 bbb 110 bbb は 186. の表参照 189. BIT b,(iy+d) コード FDCB xx (xx は下図参照 ) クロック 20 (IY+d) のうちビット b の状態を調べます は増分 d です 動作 フラグについては 186.BIT b, と同じです xx(8 ビット ) の内容 01 bbb 110 bbb は 186. の表参照 190. SET b, コード CBxx (xx は下図参照 ) クロック 8 レジスタ のビット b をセットします フラグは変化しません xx(8 ビット ) の内容 11 bbb bbb は 186. の表参照 191. SET b,(hl) コード CBxx (xx は下図参照 ) クロック 15 HL のビット b をセットします xx(8 ビット ) の内容 11 bbb 110 bbb は 186. の表参照 192. SET b,(ix+d) コード DDCB xx (xx は下図参照 ) クロック 23 (IX+d) のビット b をセットします は増分 d です 14
xx(8 ビット ) の内容 11 bbb 110 bbb は 186. の表参照 193. SET b,(iy+d) コード FDCB xx (xx は下図参照 ) クロック 23 (IY+d) のビット b をセットします は増分 d です xx(8 ビット ) の内容 11 bbb 110 bbb は 186. の表参照 194.RES b, コード CBxx (xx は下図参照 ) クロック 8 レジスタ のビット b をリセットします フラグは変化しません xx(8 ビット ) の内容 10 bbb bbb は 186. の表参照 195. RES b,(hl) コード CBxx (xx は下図参照 ) クロック 15 (HL) のビット b をリセットします xx(8 ビット ) の内容 10 bbb 110 bbb は 186. の表参照 196. RES b,(ix+d) コード DDCB xx (xx は下図参照 ) クロック 23 (IX+d) のビット b をリセットします は増分 d です xx(8 ビット ) の内容 10 bbb 110 bbb は 186. の表参照 197. RES b,(iy+d) コード FDCB xx (xx は下図参照 ) クロック 23 (IY+d) のビット b をリセットします は増分 d です xx(8 ビット ) の内容 10 bbb 110 bbb は 186. の表参照 Ⅹ. ジャンプ命令このグループの命令は フラグに影響を与えません 198. JP nn コード C3 クロック 10 16 ビットのデータ nn で示されるアドレスにジャンプします については 8.LD A,(DE) 参照 ジャンプ先アドレスとしては命令コードの第一バイトが書かれているアドレスを指定します オペランドを含めて 2 バイト以上の長さの命令の第一バイト以外の途中のアドレスを指定するとジャンプ命令の実行後に暴走してしまいます (JMP nn ) 199. JP NZ,nn コード C2 クロック 10 Z フラグがセットされていなければ nn へジャンプします ジャンプ先アドレスについては 198.JP nn を参照してください (JNZ n n ) 200. JP Z,nn コード CA クロック 10 Z フラグがセットされていたら nn へジャンプします ジャンプ先アドレスについては 198.JP nn を参照してください (JZ nn ) 201. JP NC,nn コード D2 クロック 10 C フラグがセットされていなければ nn へジャンプします ジャンプ先アドレスについては 198.JP nn を参照してください (JNC n n ) 202. JP C,nn コード DA クロック 10 C フラグがセットされていたら nn へジャンプします ジャンプ先アドレスについては 198.JP nn を参照してください (JC nn ) 203. JP PO,nn コード E2 クロック 10 P/V フラグがセットされていなければ nn へジャンプします ジャンプ先アドレスについては 198.JP nn を参照してください (JPO nn ) 204. JP PE,nn コード EA クロック 10 15
P/V フラグがセットされていたら nn へジャンプします ジャンプ先アドレスについては 198.JP nn を参照してください (JPE n n ) 205. JP P,nn コード F2 クロック 10 S フラグがセットされていなければ nn へジャンプします ジャンプ先アドレスについては 198.JP nn を参照してください (JP n n ) 206. JP M,nn コード FA クロック 10 S フラグがセットされていたら nn へジャンプします ジャンプ先アドレスについては 198.JP nn を参照してください (JM nn ) 207. JR e コード 18 クロック 12 この命令の書かれている番地から e 番地先へジャンプします なお 命令のオペランド部 ( ) には e-2 を書きます 下のように 5 バイト先にジャンプさせたい時オペランドは 5-2=3 となります ジャンプ先アドレスとしては命令コードの第一バイトが書かれているアドレスを指定します オペランドを含めて 2 バイト以上の長さの命令の第一バイト以外の途中のアドレスを指定するとジャンプ命令の実行後に暴走してしまいます + 方向に進むときオペランドには 00~7F(0~127) の範囲の数を使います FE~80(-2~-128) を使うと - 方向にジャンプします FE(-2) は無限ループになります FF(-1) は使えません ( 暴走します ) アドレス命令コード 8010 1803 8012 8013 8014 8015 ここにジャンプする 208. JR C,e コード 38 クロック 7(C=0) または 12(C=1) C フラグがセットされていれば e 番地先へジャンプします e については 207.JR e 参照 209. JP NC,e コード 30 クロック 7(C=0) または 12(C=1) C フラグがセットされていなければ e 番地先へジャンプします e については 207.JR e 参照 210. JR Z,e コード 28 クロック 7(Z=0) または 12(Z=1) Z フラグがセットされていれば e 番地先へジャンプします e については 207.JR e 参照 211. JR NZ,e コード 20 クロック 7(Z=1) または 12(Z=0) Z フラグがセットされていなければ e 番地先へジャンプします e については 207.JR e 参照 212. JP (HL) コード E9 クロック 4 ペアレジスタ HL の内容をプログラムカウンタ PC にロードします つまり HL で示されるアドレスへジャンプします (PCHL) 213. JP (IX) コード DDE9 クロック 8 インデックスレジスタ IX で示されるアドレスへジャンプします 214. JP (IY) コード FDE9 クロック 8 インデックスレジスタ IY で示されるアドレスへジャンプします 215. DJNZ e コード 10 クロック 8(B=0) または 13(B 0) 少しかわった命令です B レジスタから 1 を引き その結果が 0 でなければ e 番地先へジャンプします (e については 207.J R e 参照 ) 例えば ある処理を何回か繰り返し行うようなプログラムに利用します B レジスタに繰り返し回数を入れて使用します ⅩⅠ. コール リターン命令 このグループの命令はフラグに影響を与えません 216. CALL nn コード CD クロック 17 nn で示されるアドレスからはじまるサブルーチンをコールします なおこのとき この CALL 命令の次の命令のアドレスがスタックに退避されます この結果 SP は 2 減じられます サブルーチンの最後にリターン命令を使うとスタックに退避されていたアドレスが PC に入れられて その結果コール命令の次の命令のアドレスへ戻って処理が続けられます (CALL nn ) 217. CALL NZ,nn コード C4 クロック 10(Z=1) または 17(Z=0) 16
Z フラグがセットされていなければ nn からはじまるサブルーチンをコールします (CNZ nn ) 218. CALL Z,nn コード CC クロック 10(Z=0) または 17(Z=1) Z フラグがセットされていたら nn からはじまるサブルーチンをコールします (CZ nn ) 219. CALL NC,nn コード D4 クロック 10(C=1) または 17(C=0) C フラグがセットされていなければ nn からはじまるサブルーチンをコールします (CNC nn ) 220. CALL C,nn コード DC クロック 10(C=0) または 17(C=1) C フラグがセットされていたら nn からはじまるサブルーチンをコールします (CC nn ) 221. CALL PO,nn コード E4 クロック 10(P/V=1) または 17(P/V=0) P/V フラグがセットされていなければ nn からはじまるサブルーチンをコールします (CPO nn ) 222. CALL PE,nn コード EC クロック 10(P/V=0) または 17(P/V=1) P/V フラグがセットされていたら nn からはじまるサブルーチンをコールします (CPE nn ) 223. CALL P,nn コード F4 クロック 10(S=1) または 17(S=0) S フラグがセットされていなければ nn からはじまるサブルーチンをコールします (CP nn ) 224. CALL M,nn コード FC クロック 10(S=0) または 17(S=1) S フラグがセットされていたら nn からはじまるサブルーチンをコールします (CM nn ) 225. RET コード C9 クロック 10 スタックのトップに退避されていたアドレスデータを PC に入れ そのアドレスにリターンします この結果 PC は +2 されます (RET) 226. RET NZ コード C0 クロック 5(Z=1) または 11(Z=0) Z フラグがセットされていなければリターンします (RNZ) 227. RET Z コード C8 クロック 5(Z=0) または 11(Z=1) Z フラグがセットされていたらリターンします (RZ) 228. RET NC コード D0 クロック 5(C=1) または 11(C=0) C フラグがセットされていなければリターンします (RNC) 229. RET C コード D8 クロック 5(C=0) または 11(C=1) C フラグがセットされていたらリターンします (RC) 230. RET PO コード E0 クロック 5(P/V=1) または 11(P/V=0) P/V フラグがセットされていなければリターンします (RPO) 231. RET PE コード E8 クロック 5(P/V=0) または 11(P/V=1) P/V フラグがセットされていたらリターンします (RPE) 232. RET P コード F0 クロック 5(S=1) または 11(S=0) S フラグがセットされていなければリターンします (RP) 233. RET M コード F8 クロック 5(S=0) または 11(S=1) S フラグがセットされていたらリターンします (RM) 234. RETI コード ED4D クロック 14 割込みサービスルーチンの最後に使用します 割込み処理を終了してもとのプログラムに戻るとともに 割込み発生元 (Z80 ファミリー IC または割込みコントローラ ) に割込み処理の終了を知らせます 235. RETN コード ED45 クロック 14 ノンマスカブルインタラプト処理ルーチンの最後に使用します 236. RST n(n=0~7) コード ( 下表 ) クロック 11 1 バイトで実行できるコール命令です ただしコールできるアドレスは下表の 8 種に固定されています (RST n) 17
ニーモニックコードアドレス RST 0 C7 0000 RST 1 CF 0008 RST 2 D7 0010 RST 3 DF 0018 RST 4 E7 0020 RST 5 EF 0028 RST 6 F7 0030 RST 7 FF 0038 例えば RST 3( コードDF) は CALL $0018( コードCD1800) と同じ動作になります ⅩⅡ. 入出力命令 237. IN A,(n) コード DB クロック 11 n で指定されるアドレスの I/O デバイスからデータをアキュムレータ A に入力します フラグは変化しません (IN n ) 238. IN,(C) コード ( 表 26) クロック 12 レジスタ C の内容で指定されるアドレスの I/O デバイスから レジスタにデータを入力します N=0 H=0 になりますが C フラグは変化しません 入力データが 0 のとき Z=1 マイナスのとき S=1 になります また入力データのビット 1 の数が偶数のとき P/V=1 になります 239. INI コード EDA2 クロック 16 レジスタ C で指定する I/O デバイスからデータを入力し HL レジスタで指定するメモリに転送します この後にレジスタ B の内容を -1 し HL の内容を +1 します N=1 C は変化しません B が 0 になれば Z=1 他のフラグは不定です 240. INIR コード EDB2 クロック 16(B=0) または 21(B 0) 上記 239..INI と同じ動作をしますが B が 0 になるまで繰り返し実行されます C は変化しません N=1 Z=1 他は不定 ( 表 26) B C D E H L A ED40 ED48 ED50 ED58 ED60 ED68 ED78 241. IND コード EDAA クロック 16 239.INI と同じ動作ですが違うところは最後に HL レジスタが +1 されるのではなく -1 される点です フラグは 239.INI と同じです 242. INDR コード EDBA クロック 16(B=0) または 21(B 0) 240.INIR と同じ動作ですが HL レジスタは -1 されて行きます フラグは 240.INIR と同じです 243. OUT (n),a コード D3 クロック 11 n で指定されるアドレスの I/O デバイスに A レジスタのデータを出力します フラグは変化しません (OUT n ) 244. OUT (C), コード ( 表 27) クロック 12 レジスタ C で指定する I/O デバイスにレジスタ の内容が出力されます フラグは変化しません ( 表 27) B C D E H L A ED41 ED49 ED51 ED59 ED61 ED69 ED79 245. OUTI コード EDA3 クロック 16 レジスタ C で指定する I/O デバイスに HL レジスタで示されるメモリの内容が出力されます このあと B レジスタの内容が -1 され H L の内容は +1 されます フラグは 239.INI と同じです 246. OTIR コード EDB3 クロック 16(B=0) または 21(B 0) 上記 245.OUTI と同じ動作をしますが B が 0 になるまで繰り返し実行されます フラグは 240.INIR と同じです 247. OUTD コード EDAB クロック 16 上記 245.OUTI と同じ動作をしますが HL は +1 されるのではなく -1 されます フラグは 239.INI と同じです 248. OTDR コード EDBB クロック 16(B=0) または 21(B 0) 上記 246.OTIR と同じ動作をしますが HL は -1 されて行きます フラグは 240.INIR と同じです 18
ⅩⅢ. 割込制御 249. DI コード F3 クロック 4 割込を禁止します DI 命令の実行後は INT 信号が入力されても新たな割込は発生しません リセット後は割込禁止状態になります (DI) 250. EI コード FB クロック 4 EI 命令が実行されると その次の命令の実行後から割込が受け付け可能状態になります EI 命令の実行後ではなくて その次の命令の実行後から 割込みの受け付けが可能になるようにしている理由は 割込み処理プログラムの最後は通常 RET 命令で終わっているために もし EI 命令の実行後に割込みの受け付けが可能になっていると 割込み処理が終わってメインプログラムに戻るための RET 命令が実行される前に次の割込みが受け付けられてしまい 二重に割込みが実行されてしまう可能性が出てくることを避けるためです (EI) 251. IM 0 コード ED46 クロック 8 Z80 のマスク可能な割込みはモード 0 モード 1 モード 2 の 3 種類あります IM 0 の実行によってモード 0 の割込みが選択されます モード 0 の割込みは 8080 の割込みと同じ動作になります INT 信号の入力とともに データバスに RST 0~RST 7 の命令コードを入力することによって 0000 から 8 番地とびに置かれた割込み処理プログラムが実行されます RST 命令については 236.R ST n を参照してください リセット後はモード 0 が選択されます 252. IM 1 コード ED56 クロック 8 マスク可能な割込みをモード 1 に設定します モード 0 は INT 信号とともにデータバスに RST 0~RST 7 の命令コードを入力することで 8 通りの割込み処理ルーチンを選択できますが モード 1 はそのうちの RST 7 割込み動作に特化した割込みモードです モード 1 は INT 信号の入力によってつねに 0038 番地の割込み処理プログラムが実行されますが そのときデータバスに命令コードを入力する必要はなく INT 信号のみで割込み処理が行われます 253. IM 2 コード ED5E クロック 8 モード 2 は割込みベクタレジスタ (I レジスタ ) を使う高度な割込み処理モードです あらかじめ割込み処理プログラムアドレスを配置したテーブルをメモリ内に用意しておき そのテーブルアドレスの上位アドレスを I レジスタに入れておきます INT 割込みとともにデータバスに テーブルアドレスの下位アドレスを入力することによって メモリの広い範囲に数を制限されることなく必要な割込み処理プログラムを置くことができます 19