TOP



 i8080 CPU


《インテル8080のマシン語》
 インテル8080のマシン語のコード数は78種類、  個である。コードで操作する数値を入れておくレジスターという入れ物の数は7つ、他にいくつかフラグやポインターがあるだけである。
 これらの少ない手段を組み合わせて駆使し、コンピューターを動かすのがマシン語プログラミングである。
1 8ビットレジスターはアキュムレーターAとB、C、D、E、H、Lの7つにフラグFを加えて8つ。
  16ビットレジスターはプログラムカウンターPCとスタックポインターSPの2つ。
  全部で10種類である。
  ビットの桁は一番下桁の0番ビットから数え、7番ビットまでで合計8ビットとなる。

2 Aレジスターはアキュムレーターといって、大方の操作はAを使って実行されるようにCPUが設計されている。よって、プログラムが進行するに連れてAの値は次々と変わっていく。

3 B、C、D、E、H、Lには1つの8ビットレジスターとしての使い方と、BC、DE、HLの組み合わせでペアレジスターとして16ビットを扱う使い方の2通りがある。
  特にHLはメモリーの番地(アドレス)を指定するために使うことが主な使用方法とされ、HLで指定される番地のメモリーに入っている数値を扱うマシン語がいくつか用意されている。ニモニックではHLで指定される番地のメモリーの数値をMで表記する。Mをレジスターの一種とみなして設計されたコードがある。
  ニモニックではペアレジスターBCで指定される番地のメモリーやそこにある数値もBと書き、ペアレジスターDEで指定される番地のメモリーやそこにある数値もDと書く。ニモニックのBが8ビットのBかペアレジスターBCで指定される番地のメモリーかは命令の種類で決まる。Dも同様。
  HLやBC、DEでメモリーの番地を指定することを間接アドレッシングという。

4 Fレジスターの各ビットはフラグを表す。
  7番ビット=S、6番ビット=Z、4番ビット=H、2番ビット=P、0番ビット=C。他は未使用。

  C
  キャリーフラグ。
  加算の結果9桁目へのキャリーが発生した場合か、減算の時に9桁目からのボロー(借り桁)を要した時に1となる。
ローテートでも使われる。

  P
  パリティフラグ。
  1バイトの数値の各ビットを調べ、1であるビットが偶数個であれば1、奇数個なら0となる。

  H
  ハーフキャリーフラグ。
  計算した時、5桁目(4番ビット)へのキャリーか5桁目(4番ビット)からのボローがあったときに1となる。

  Z
  ゼロフラグ。
  計算結果が0のとき1となる。

  S
  サインフラグ。
  演算結果がマイナスの時に1となる。又は、1の時マイナスを示す。0ならプラス。
  i8080でマイナスを表すには、循環の方法で00(16進数)の直下をFF(16進数)としてFFを十進数の‐1と見做し、マイナス方向に小さくして行き80(16進数)を十進数の‐126と見做す。マイナスを扱う時、プラスの値は 01(16進数)から7F(16進数)つまり十進数の1から125までとなる。
  この時、8桁目(7番ビット)が1の数がマイナス、0の数がプラスとなっている。


《i8080のニモニック》

 <8ビット書き込み>
1 MOV r,r' 
  r'の数値をrにコピーする。Mも可。
  5クロック。Mは7クロック。

2 MVI r,n
  数値nをrに書き込む。Mも可。
  7クロック。Mは10クロック。

3 LDAX B、LDAX D
  ペアレジスターBCで指定される番地のメモリーの数値をAにコピーする。ペアレジスターDEでも同様。
  7クロック。

4 LDA nn’
  nn'番地のメモリーの数値をAにコピーする。マシン語ではn'nの順番で記入する。
  13クロック。

5 STAX B、STAX D
  Aの数値をペアレジスターBCで指定する番地のメモリーにコピーする。
  ペアレジスターDEも同じ。
  7クロック。

6 STA nn'
  Aの数値をnn'番地のメモリーにコピーする。マシン語ではn'nの順番で記入する。
  13クロック。

 <16ビット書き込み> 7 LXI B,nn'、LXI D,nn'、LXI H,nn'、LXI SP,nn'   ペアレジスタBCにnn'を書き込む。マシン語ではn'nの順番で記入する。   ペアレジスタDE、HLもスタックポインターSPも同じ。   10クロック。 8 LHLD nn'   nn'番地のメモリーの数値をLにコピーし、nn'+1番地のメモリーの数値をHにコピーする。   16クロック。 9 SHLD nn'   Lの数値をnn'番地のメモリーに、Hの数値をnn'+1番地のメモリーにコピーする。   16クロック。 10 SPHL   HLの数値をSPにコピーする。   5クロック。 11 PUSH B、PUSH D、PUSH H、PUSH PSW   ペアレジスタBCのCの数値をSP-2番地のメモリーに、Bの数値をSP-1番地のメモリーにコピーする。SPの数値はSP-2に変わる。   ペアレジスタDE、HLも同じ。PSWはAFのペアであり、同じ。   11クロック。 12 POP B、POP D、POP H、POP PSW   ペアレジスタBCのCにSP番地のメモリーの数値をコピーし、BにSP+1番地のメモリーの数値をコピーする。SPの数値はSP+2に変わる。   ペアレジスタDE、HLも同じ。PSWはAFのペアであり、同じ。   10クロック。  <交換> 13 XCHG   ペアレジスタDEとHLの数値を交換する。   4クロック。 14 XTHL   HとSP+1番地のメモリーの数値、LとSP番地のメモリーの数値を交換する。SPは不変。   18クロック。  <8ビット演算> 15 ADD r   Aにrを加算する。Mも可。   フラグが変化する。   4クロック。Mは7クロック。 16 ADI n   Aにnを加算する。   フラグが変化する。   7クロック。 17 ADC r   AにCフラグの値(0か1)とrを加算する。Mも可。   フラグが変化する。   4クロック。Mは7クロック。 18 ACI n   AにCフラグの値(0か1)とnを加算する。   フラグが変化する。   7クロック。 19 SUB r   Aからrを減算する。Mも可。   フラグが変化する。   4クロック。Mは7クロック。 20 SUI n   Aからnを減算する。   フラグが変化する。   7クロック。 21 SBB r   AからCフラグの値(0か1)とrを減算する。Mも可。   フラグが変化する。   4クロック。Mは7クロック。 22 SBI n   AからCフラグの値(0か1)とnを減算する。   フラグが変化する。   7クロック。 23 ANA r   AとrのAND算の結果をAに入れる。Mも可。   フラグが変化するが、CフラグとHフラグはリセットされる。   4クロック。Mは7クロック。 24 ANI n   AとnのAND算の結果をAに入れる。   フラグが変化するが、CフラグとHフラグはリセットされる。   7クロック。 25 ORA r   AとrのOR算の結果をAに入れる。Mも可。   フラグが変化するが、CフラグとHフラグはリセットされる。   4クロック。Mは7クロック。 26 ORI n   AとnのOR算の結果をAに入れる。   フラグが変化するが、CフラグとHフラグはリセットされる。   7クロック。 27 XRA r   AとrのXOR算の結果をAに入れる。Mも可。   フラグが変化するが、CフラグとHフラグはリセットされる。   4クロック。Mは7クロック。 28 XRI n   AとnのXOR算の結果をAに入れる。   フラグが変化するが、CフラグとHフラグはリセットされる。   7クロック。 29 INR r   rに1加算する。Mも可。   Cフラグを除いて、フラグが変化する。   5クロック。Mは10クロック。 30 DCR r   rから1減算する。Mも可。   Cフラグを除いて、フラグが変化する。   5クロック。Mは10クロック。  <8ビット比較> 31 CMP r   A-rを計算したとしてフラグを変化させる。Mも可。   Aとrは変化しない。   4クロック。Mは7クロック。 32 CPI n   A-nを計算したとしてフラグを変化させる。   Aとrは変化しない。   7クロック。  <16ビット演算> 33 DAD B、DAD D、DAD H、DAD SP   HLにペアレジスタやSPの数値を加算する。   BはBC、DはDE、HはHL。   Cフラグが変化する。Hフラグは上位桁になるレジスタB、D、HのハーフキャリーやSPの11番か らのキャリーで変化する。   10クロック。 34 INX B、INX D、INX H、INX SP   ペアレジスタやSPに1加算する。   BはBC、DはDE、HはHL。   フラグは変化しない。   5クロック。 35 DCX B、DCX D、DCX H、DCX SP   ペアレジスタやSPから1減算する。   BはBC、DはDE、HはHL。   フラグは変化しない。   5クロック。  <回転、シフト、操作> 36 RLC   Aの0番ビットを右端に置き、各ビットを左回転でシフトさせて、7番ビットは0番ビットに移すと同時にCフラグにもコピーする。   Cフラグのみ変化する。   4クロック。 37 RAL   Aの0番ビットを右端に置いて7番ビットの左隣にCフラグを置いて、各ビットを左回転でシフトさせてCフラグは0番ビットに移す。   Cフラグのみ変化する。   4クロック。 38 RRC   Aの0番ビットを右端に置き、各ビットを右回転でシフトさせて、0番ビットは7番ビットに移すと同時にCフラグにもコピーする。   Cフラグのみ変化する。   4クロック。 39 RAR   Aの0番ビットを右端に置いて0番ビットの更に右隣にCフラグを置いて、各ビットを右回転でシフトさせてCフラグは7番ビットに移す。   Cフラグのみ変化する。   4クロック。 40 DAA   ADDやADCでAに加算後、Aの数値をBCD2桁の十進数に直す。16進数の63=十進数の99までの範囲に限られる。   フラグが変化する。   4クロック。 41 CMA   Aの各ビットを反転させる。   フラグは変化しない。   4クロック。 42 CMC   Cフラグを反転させる。   Cフラグのみ変化する。   4クロック。 43 STC   Cフラグを1にする。   Cフラグのみ変化する。   4クロック。  <CPU制御> 44 NOP   何もしない。   4クロック。 45 HLT   割り込みが起こされるまでCPUを停止させる。   7クロック。 46 DI   割り込みを禁止する。   4クロック。 47 EI   EIの次のコードを実行後から割り込みを解禁する。   4クロック。  <ジャンプ> 48 JMP nn'   nn'番地にジャンプする。マシン語ではn'n(下桁上桁)の順番で記入する。   10クロック。 49 JNZ nn'   Zフラグが0ならnn'番地にジャンプする。マシン語ではn'n(下桁上桁)の順番で記入する。   10クロック。 50 JZ nn'   Zフラグが1ならnn'番地にジャンプする。マシン語ではn'n(下桁上桁)の順番で記入する。   10クロック。 51 JNC nn'   Cフラグが0ならnn'番地にジャンプする。マシン語ではn'n(下桁上桁)の順番で記入する。   10クロック。 52 JC nn'   Cフラグが1ならnn'番地にジャンプする。マシン語ではn'n(下桁上桁)の順番で記入する。   10クロック。 53 JPO nn'   Pフラグが0ならnn'番地にジャンプする。マシン語ではn'n(下桁上桁)の順番で記入する。   10クロック。 54 JPE nn'   Pフラグが1ならnn'番地にジャンプする。マシン語ではn'n(下桁上桁)の順番で記入する。   10クロック。 55 JP nn'   Sフラグが0ならnn'番地にジャンプする。マシン語ではn'n(下桁上桁)の順番で記入する。   10クロック。 56 JM nn'   Sフラグが1ならnn'番地にジャンプする。マシン語ではn'n(下桁上桁)の順番で記入する。   10クロック。 57 PCHL   HLの数値をプログラムカウンターPCに入れる。つまりHLで示した番地へジャンプする。   8クロック。  <コール、リターン> 58 CALL nn'   続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでからnn'番地にジャンプする。SPは-2。サブルーチンをコールした事になる。マシン語ではn'n(下桁上桁)の順番で記入する。   17クロック。 59 CNZ nn'   Zフラグが0なら、続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでからnn'番地にジャンプする。SPは-2。サブルーチンをコールした事になる。マシン語ではn'n(下桁上桁)の順番で記入する。   17クロック。Zフラグが1でジャンプしなかった時は10クロック。 60 CZ nn'   Zフラグが1なら、続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでからnn'番地にジャンプする。SPは-2。サブルーチンをコールした事になる。マシン語ではn'n(下桁上桁)の順番で記入する。   17クロック。Zフラグが0でジャンプしなかった時は10クロック。 61 CNC nn'   Cフラグが0なら、続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでからnn'番地にジャンプする。SPは-2。サブルーチンをコールした事になる。マシン語ではn'n(下桁上桁)の順番で記入する。   17クロック。Cフラグが1でジャンプしなかった時は10クロック。 62 CC nn'   Cフラグが1なら、続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでからnn'番地にジャンプする。SPは-2。サブルーチンをコールした事になる。マシン語ではn'n(下桁上桁)の順番で記入する。   17クロック。Cフラグが0でジャンプしなかった時は10クロック。 63 CPO nn'   Pフラグが0なら、続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでからnn'番地にジャンプする。SPは-2。サブルーチンをコールした事になる。マシン語ではn'n(下桁上桁)の順番で記入する。   17クロック。フラグが1でジャンプしなかった時は10クロック。 64 CPE nn'   Cフラグが1なら、続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでからnn'番地にジャンプする。SPは-2。サブルーチンをコールした事になる。マシン語ではn'n(下桁上桁)の順番で記入する。   17クロック。Cフラグが0でジャンプしなかった時は10クロック。 65 CP nn'   Sフラグが0なら、続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでからnn'番地にジャンプする。SPは-2。サブルーチンをコールした事になる。マシン語ではn'n(下桁上桁)の順番で記入する。   17クロック。フラグが1でジャンプしなかった時は10クロック。 66 CM nn'   Sフラグが1なら、続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでからnn'番地にジャンプする。SPは-2。サブルーチンをコールした事になる。マシン語ではn'n(下桁上桁)の順番で記入する。   17クロック。Cフラグが0でジャンプしなかった時は10クロック。 67 RET   スタックポインターSPで示す番地のメモリーに書き込んである数値をプログラムカウンターPCに入れる。つまりジャンプしてメインルーチンにリターンする事になる。又、SPに2加算する。   10クロック。 68 RNZ   Zフラグが0なら、スタックポインターSPで示す番地のメモリーに書き込んである数値をプログラムカウンターPCに入れる。つまりジャンプしてメインルーチンにリターンする事になる。又、SPに2加算する。   11クロック。Zフラグが1でジャンプしなかった時は5クロック。 69 RZ   Zフラグが1なら、スタックポインターSPで示す番地のメモリーに書き込んである数値をプログラムカウンターPCに入れる。つまりジャンプしてメインルーチンにリターンする事になる。又、SPに2加算する。   11クロック。Zフラグが0でジャンプしなかった時は5クロック。 70 RNC   Cフラグが0なら、スタックポインターSPで示す番地のメモリーに書き込んである数値をプログラムカウンターPCに入れる。つまりジャンプしてメインルーチンにリターンする事になる。又、SPに2加算する。   11クロック。Cフラグが1でジャンプしなかった時は5クロック。 71 RC   Cフラグが1なら、スタックポインターSPで示す番地のメモリーに書き込んである数値をプログラムカウンターPCに入れる。つまりジャンプしてメインルーチンにリターンする事になる。又、SPに2加算する。   11クロック。Cフラグが0でジャンプしなかった時は5クロック。 72 RPO   Pフラグが0なら、スタックポインターSPで示す番地のメモリーに書き込んである数値をプログラムカウンターPCに入れる。つまりジャンプしてメインルーチンにリターンする事になる。又、SPに2加算する。   11クロック。Pフラグが1でジャンプしなかった時は5クロック。 73 RPE   Pフラグが1なら、スタックポインターSPで示す番地のメモリーに書き込んである数値をプログラムカウンターPCに入れる。つまりジャンプしてメインルーチンにリターンする事になる。又、SPに2加算する。   11クロック。Pフラグが0でジャンプしなかった時は5クロック。 74 RP   Sフラグが0なら、スタックポインターSPで示す番地のメモリーに書き込んである数値をプログラムカウンターPCに入れる。つまりジャンプしてメインルーチンにリターンする事になる。又、SPに2加算する。   11クロック。Sフラグが1でジャンプしなかった時は5クロック。 75 RM   Sフラグが1なら、スタックポインターSPで示す番地のメモリーに書き込んである数値をプログラムカウンターPCに入れる。つまりジャンプしてメインルーチンにリターンする事になる。又、SPに2加算する。   11クロック。Sフラグが0でジャンプしなかった時は5クロック。 76 RST p   続きの番地をスタックポインターSPとSP-1で示す番地のメモリーに書き込んでから、0〜7のpの数値ごとに設定されている番地にジャンプする。SPは-2。サブルーチンをコールした事になる。   p=0で0000番地、1で0008番地、2で0010番地、3で0018番地、4で0020番地、5で0028番地、6で0030番地、7で0038番地。   11クロック。  <入力、出力> 77 IN n   Aにn番のI/Oポートからの数値を入れる。   10クロック。 78 OUT n   n番のI/OポートにAの数値を出力する。   10クロック。



  
©2025 MB All Rights Reserved.