第 3 章 TLCS-900/H1 CPU セミコンダクター社 TLCS-900H1 CPU 900, 900/L, 900/H, 900/L1, 900/H2, 900/H1 CPU コアの違いについて TLCS-900 シリーズには、CPU コアとして (1) 900, (2) 900/L, (3) 900/H, (4) 900/L1, (5) 900/H2, (6) 900/H1 の 6 種の CPU コアがあり、それぞれに示す点が異なります。 CPU コア 相違点 CPU 相違内容 900 900/L 900/H, 900/L1 900/H2, 900/H1 最大アドレスバス幅 24 ビット ← ← ← 最大データバス幅 16 ビット ← ← 32 ビット 命令キューバッファ 4 バイト ← ← 命令セット 分岐命令実行時の コードフェッチ マイクロ DMA CPU 特権モード CPU レジスタモード TLCS-900 分岐条件が真のときの み、分岐先コードを フェッチする 4 チャネル システムモード、 ノーマルモード MIN モード、 MAX モード ( リセット後 MIN モード ) TLCS-900 から 以下の命令を削除 NORMAL MAX 以下の命令を追加 MIN TLCS-900 から 以下の命令を削除 NORMAL MAX 12 バイト TLCS-900 から 以下の命令を削除 NORMAL MAX LDX ← ← 分岐条件に関係なく、常 に分岐先コードを先行 フェッチする ← ← 8 チャネル システムモードのみ ← ← ← MAX モードのみ ← ( リセット後 MAX モード ) リスタート方式 ベクタ方式 ← ← ノーマルスタック ポインタ XNSP あり なし ← ← 割り込みネスティング カウンタ INTNEST ( 主に OS 用 ) なし あり ← ← 割り込み方式 Page 1 TLCS-900H1 CPU 1. 概要 TLCS-900/H1 シリーズは、東芝オリジナルの高性能 32 ビット CPU を内蔵しています。 この CPU と多様な I/O 機能ブロック ( タイマ , シリアル I/O, AD など ) をワンチップ化した TLCS900/H1 シリーズは、多彩な応用分野に適用可能です。 TLCS-900/H1 の CPU は、32 ビット CPU です。内蔵汎用レジスタは 32 ビット構成のレジスタバンク方 式を採用しているため、特に組み込み制御などに最適です。 TLCS-900/H1 の CPU の特長は以下のとおりです。 (1) 汎用レジスタマシン • 8 本のレジスタがすべてアキュムレータとして使用可能 (2) レジスタバンク方式 (4 本のレジスタをバンク化 ) • 32 ビット幅 4 バンク (3) 広大なリニアアドレス空間 (16 M バイト ) と豊富なアドレッシングモード (9 種 ) (4) ダイナミックバスサイジングシステム • 8 ビットまたは 16 ビット、32 ビットの外部データバスが混在可能 (5) 直交性のある豊富な命令セット • 8/16/32 ビットのデータ転送 / 演算命令 • 16 ビット乗除算命令 16 × 16 → 32 ビット ( 符号なし / 付き ) 32 ÷ 16 → 16 ビット…16 ビット ( 符号なし / 付き ) • ビット演算を含む多様なビット処理命令 • C コンパイラ対応命令 • フィルタ演算命令 : 積和演算 / モジュロ増加命令 (6) 高速処理 • 最小命令実行時間 : 1 クロック (50 ns @ 20 MHz の場合 ) • 12 バイトの命令キューバッファを内蔵したパイプラインシステム • 32 ビット ALU Page 2 TLCS-900H1 CPU 2. リソース CPU が取り扱い可能なリソースは、以下のものがあります。 (1) 汎用レジスタ : • 4 本の 32 ビット汎用レジスタ × 4 バンク • 4 本の 32 ビット汎用レジスタ ( スタックポインタ XSP を含みます ) (2) ステータスレジスタ (SR) (3) プログラムカウンタ (PC): 32 ビットで実装されていますが、下位 24 ビットのみがアドレスバスに 出力されます。 (4) コントロールレジスタ : マイクロ DMA の制御レジスタと、割り込みネスティングカウンタ INTNEST があります。 (5) CPU の全命令 (6) 内蔵 I/O レジスタのすべて (7) 実装されているメモリのすべて なお、900/H1 には、900/L や 900/H と同様に、タスクの相互干渉をハード的に防ぐために使用される保 護機能 ( 特権モード , システムモード , スーパーバイザモードなどで呼ばれる機能 ) はありません。 Page 3 TLCS-900H1 CPU 3. レジスタ 3.1 レジスタ構成……16 M バイトのプログラム空間 /16 M バイトのデータ空間 レジスタ構成を図 3.1.1 に示します。 汎用レジスタ 4 本 (32 ビット幅 ) × 4 バンク + 汎用レジスタ 4 本 (32 ビット幅 ) + プログラムカウンタ (32 ビット幅 ) + ステータスレジスタ 4 XWA W A XBC B C XDE D E XHL H L XIX I X XIY I Y XIZ I Z XSP S P F' F SR P C 32 図 3.1.1 レジスタ構成 Page 4 TLCS-900H1 CPU 3.2 3.2.1 レジスタの詳細 汎用バンクレジスタ 4 バンクよりなる下図に示す 4 本の 32 ビット汎用レジスタがあり、それぞれのバンクにおけるレジ スタ構成は下図のとおりです。 4 本の 32 ビットレジスタ (XWA, XBC, XDE, XHL) は汎用レジスタであり、アキュムレータ、イン デックスレジスタとして使用できます。それぞれの 32 ビットレジスタは 16 ビットレジスタ (WA, BC, DE, HL) としても使用でき、32 ビットレジスタの下位 16 ビットに割り付けられています。 16ビットレジスタはアキュムレータおよびインデックスアドレッシングモードのインデックスレジ スタ、ディスプレースメントレジスタとして使用できます。さらに 16 ビットレジスタは 2 つの 8 ビッ ト汎用レジスタ (W, A, B, C, D, E, H, L) としても使用することができ、アキュムレータなどになりま す。 32 16 8 XWA W (WA) A XBC B (BC) C XDE D (DE) E XHL H (HL) L ( ): 3.2.2 8 16 32 ビット汎用レジスタ 4 本の 32 ビット汎用レジスタ (XIX, XIY, XIZ, XSP) があり、レジスタ構成は下記のとおりです。 このレジスタもアキュムレータ、インデックスレジスタ、ディスプレースメントレジスタとして使 用でき、16 ビットレジスタ /8 ビットレジスタ (8 ビットレジスタとして使用する場合のレジスタ名称 は後述 ) として取り扱うことができます。 レジスタ (XSP) はスタックポインタと呼ばれ、割り込み、CALL 命令実行時のスタックポインタと して動作します。 リセットにより、XSP は “00000000H” に初期化されます。 32 16 XIX IX XIY IY XIZ IZ XSP SP Page 5 TLCS-900H1 CPU 3.2.3 ステータスレジスタ (SR) ステータスレジスタには、CPU の状態 (CPU 動作モード、レジスタ構成など ) と、演算結果の状態 を表すフラグが格納されます。このレジスタは上位バイトと下位バイトの 2 つの部分で構成されてい ます。ステータスレジスタの上位バイト ( ビット 8~15) は CPU の状態を表します。下位バイト ( ビッ ト 0~7) は通常フラグレジスタ (F) と呼ばれ、演算結果の状態を表しています。2 つのフラグレジスタ (F/F’ ) を持っており、EX 命令で交替を行うことができます。 (1) ステータスレジスタ “SR” の上位バイト 15 14 13 12 11 10 9 8 “1” IFF2 IFF1 IFF0 “1” “0” RFP1 RFP0 ① IFF2~IFF0 (Interrupt mask F/F 2~0): 割り込みレベルのマスクレジスタです。割り込み要求レベルは 1~7 まであり、7 が最も優先 順位の高い割り込み要求レベルです。 リセットにより “111” に初期化されます。割り込みが受け付けられたとき、その割り込みレ ベルより 1 だけ高い値がセットされます。 000 レベル 1 以上の割り込みを許可 001 レベル 1 以上の割り込みを許可 010 レベル 2 以上の割り込みを許可 011 レベル 3 以上の割り込みを許可 100 レベル 4 以上の割り込みを許可 101 レベル 5 以上の割り込みを許可 110 レベル 6 以上の割り込みを許可 111 レベル 7 の割り込み ( ノンマスカブル割り込み ) だけを許可 同じです。 ただし、レベル 7 の割り込み受け付け時は、“111” がセットされます。 ② RFP1~RFP0 (Register file pointer1~0): 現在使用しているレジスタファイル ( レジスタバンク ) のナンバーを示しています。リセッ トにより “00” に初期化されます。 この値は、下に示すレジスタバンクの切り替え命令 (3 種 ) で操作することができます。 • LDF imm ; RFP ← imm (0~3) • INCF ; RFP ← RFP + 1 • DECF ; RFP ← RFP − 1 Page 6 TLCS-900H1 CPU (2) フラグレジスタ “F” 7 6 5 4 3 2 1 0 S Z “0” H “0” V N C : R/W ① S (Sign flag) サインフラグ。 演算結果が負のとき “1” がセットされ、正のとき “0” がセットされます。 ( 演算結果の最上位ビット (MSB) の値がコピーされます。) ② Z (Zero flag) ゼロフラグ。 演算結果がゼロのとき “1” にセットされ、それ以外のときは “0” にセットされます。 ③ H (Half carry flag) ハーフキャリーフラグ。 演算の結果、ビット 3 からビット 4 へキャリーまたはボローが発生したとき “1” にセットさ れ、それ以外のときは “0” にセットされます。ただし、32 ビット演算命令の場合は、不定値が セットされます。 ④ V (Parity/Over-flow flag) パリティ / オーバフローフラグ。 演算の種類によってパリティを示す場合とオーバフローを示す場合があります。 パリティ (P): 演算の結果、1 にセットされているビットの数が奇数のとき “0” にセット され、偶数のとき “1” にセットされます。ただし、32 ビット演算命令の 場合は、不定値がセットされます。 オーバフロー (V): 演算の結果、オーバフローなしのとき “0” にセットされ、オーバフローの とき “1” にセットされます。 ⑤ N (Negative) ADD/SUB フラグ。 加算 (ADD など ) 命令実行後 “0” にセットされ、減算 (SUB など ) 命令実行後 “1” にセット されます。 このフラグは、DAA (10 進補正 ) 命令実行時に使用されます。 ⑥ C (Carry) キャリーフラグ。 演算の結果、キャリーまたはボローが発生したとき “1” にセットされ、それ以外のときは “0” にセットされます。 ステータスレジスタのリード / ライト方法 ビット 0~15 のリード ① PUSH POP SR dst ビット 0~15 のライト ① POP SR ビット 14~12 のみ <IFF2:0> ① EI num num の値がライトされます。 ビット 9~8 のみ <RFP1:0> ① ② ③ LDF INCF DECF ビット 7~0 のみ ① ② ③ PUSH F/POP F EX F, F′ 演算命令などの実行により間接的にフラグがセットされます。 imm Page 7 TLCS-900H1 CPU 3.2.4 プログラムカウンタ (PC) プログラムカウンタは、次に実行するメモリアドレスを示すポインタです。最大 16 M バイトのプ ログラム空間が、リニア空間としてアクセス可能です。 なお、プログラムカウンタは、CPU 内部では 32 ビット幅で実装されていますが、アドレスバスに は下位 24 ビットしか接続されていません。 リセット後の PC リセットによりベクタベース番地に格納されているリセットベクタをリードした後、その値を PC にセットし、そのベクタ以降のプログラムをリードし、実行します。 ベクタベース番地は、下記のように定義されています。 ベクタベース番地 3.2.5 リセット後の PC 設定シーケンス PC (7:0) ← 0FFFF00H 番地の値 PC (15:8) ← 0FFFF01H 番地の値 PC (23:16) ← 0FFFF02H 番地の値 0FFFF00H コントロールレジスタ (CR) コントロールレジスタは、マイクロ DMA の動作を制御するレジスタと、割り込みのネスト値をカ ウントする割り込みネスティングカウンタよりなっています。コントロールレジスタは、LDC 命令で、 アクセスできます。 コントロールレジスタは以下のとおりです。 <DMA S0> <DMA S1> <DMA S2> DMA <DMA S3> ソース レジスタ <DMA S4> <DMA S5> <DMA S6> <DMA S7> <DMA D0> <DMA D1> <DMA D2> <DMA D3> DMA <DMA D4> ディストネーション レジスタ <DMA D5> <DMA D6> <DMA D7> DMAM0 (DMA C0) DMAM1 (DMA C1) DMAM2 (DMA C2) DMA DMAM3 (DMA C3) モード / カウンタ DMAM4 (DMA C4) レジスタ DMAM5 (DMA C5) DMAM6 (DMA C6) DMAM7 (DMA C7) (INTN EST) 割り込みネスティング カウンタ ( ): ワードレジスタ (16 ビット ) 名 < >: ロングワードレジスタ (32 ビット ) 名 マイクロ DMA については、TLCS-900/H1 個別製品の説明の章に詳細が記載されています。 Page 8 TLCS-900H1 CPU 3.3 レジスタバンクの切り替え レジスタバンクは以下の 3 つに大別されます。 カレントバンクレジスタ プレビアスバンクレジスタ アブソリュートバンクレジスタ カレントバンクは、レジスタファイルポインタ <RFP> ( ステータスレジスタ : SR のビット 8~9) が指 し示しているレジスタバンクです。カレントバンクにあるレジスタは、前節で説明した汎用レジスタ として使用されます。この <RFP> の内容を変更することにより、ほかのレジスタバンクがカレントレ ジスタバンクとなります。 プレビアスバンクは、レジスタファイルポインタ <RFP> から “1” を減じた値により指し示される、 レジスタバンクです。例えば、カレントバンクが “ バンク 3” のときには、“ バンク 2” がプレビアスバ ンクとなります。プレビアスバンクのレジスタは、“ ダッシュ ” の付いたレジスタ名 (WA’, BC’, DE’, HL’ など ) で取り扱われ、カレントバンクとの入れ替えを EX 命令 (EX A, A’ など ) で行うことができ ます。 すべてのバンクレジスタ ( カレントバンク、プレビアスバンクを含む ) には、バンクを表す数値 ( アブソリュートバンクナンバー ) が付けられており、この数値付きのレジスタ名を使って、全バンク のレジスタを使用することができます。この方法でアクセスできるレジスタ ( 全レジスタ ) を、アブ ソリュートバンクレジスタと呼びます。 TLCS-900/H1 の CPU は、カレントバンクのレジスタをワーキングレジスタとして動作させたとき に、最大のパフォーマンスを出すように、設計されています。上述のとおり、CPU は他バンクのレジ スタを使用することも可能ですが、他バンクのレジスタを使用すると、パフォーマンスが若干低下し ます。CPU の最大効率を引き出すために、TLCS-900/H1 では、レジスタバンクを簡単に切り替える機 能が付いています。 このバンク切り替え機能により • CPU は最大効率で動作可能となる。 • プログラムのコード量低減が可能となる。 • 特に、割り込みサービスルーチンのコンテキストスイッチとして使用した場合に、応答スピー ド / コード量で有利。 などの優位性が得られます。 バンクの切り替えは、下記の命令を用いて行います。 LDF imm: イミディエートの内容を <RFP> にセット imm: 0~3 INCF: <RFP> を “1” 増加させる。 DECF: <RFP> を “1” 減少させる。 LDF 命令のイミディエート値は、0~3 になります。また、INCF/DECF 命令を用いて、キャリー / ボ ローが発生したときには、そのキャリー / ボローは無視され、<RFP> の値は巡回されます。例えば、“ バンク 3” で INCF を実行すると “ バンク 0” となり、“ バンク 0” で DECF を実行すると “ バンク 3” に なります。 Page 9 TLCS-900H1 CPU • レジスタバンクの使用例 TLCS-900/H1 のレジスタはバンク構成をとっており、各バンクは処理用途や割り込みレベル によって使い分けることができます。以下にその例を示します。 < 例 1> 各レジスタバンクを、それぞれの割り込み処理ルーチン専用に割り当てる使用例 レジスタバンク 0 = メインプログラムと下記以外の割り込み処理用 レジスタバンク 1 = INT0 処理専用 レジスタバンク 2 = タイマ 0 処理専用 レジスタバンク 3 = タイマ 1 処理専用 例えば、メインプログラム実行中、タイマ 1 の割り込みが発生し、その処理ルーチンへ 分岐した場合、その処理ルーチンは下記のようになり、レジスタの PUSH/POP が不要にな ります。 LDF 3 ; レジスタバンクを “3” にする。 : : RETI ; <RFP> ( レジスタバンク ) も含めて割り込み以前の状態に戻す。 < 例 2> 各レジスタバンクを、それぞれの割り込みレベルのネスティング専用に割り当てる例 1 2 3 INCF INCF INCF RETI RETI RETI ( 補足 ) INCF 命令は、<RFP> ← <RFP> + 1 を行う命令です。 Page 10 TLCS-900H1 CPU 3.4 汎用レジスタのアクセス 命令コードは、バイト単位で可変長になっています。カレントバンクのレジスタは、最短コード長 でアクセスできます。また、命令コードが 1 バイト長くなりますが、すべての汎用レジスタをアクセ スすることも可能です。“ すべての汎用レジスタ ” とは、下記のとおりです。 ① カレントバンクの汎用レジスタ QW ( Q WA) QA < X WA> W ( W A) A QB ( Q BC) QC < X BC> B ( B C) C QD ( Q DE) QE < X DE> D ( D E) E QH ( Q HL) QL < X HL> H ( H L) L ( ): ワードレジスタ (16 ビット ) 名 < >: ロングワードレジスタ (32 ビット ) 名 ②プレビアスバンクの汎用レジスタ QW’ ( Q WA’) QA’ < X WA’> W’ ( W A’) A’ QB’ ( Q BC’) QC’ < X BC’> B’ ( B C’) C’ QD’ ( Q DE’) QE’ < X DE’> D’ ( D E’) E’ QH’ ( Q HL’) QL’ < X HL’> H’ ( H L’) L’ ③ 32 ビット汎用レジスタ QIXH ( Q IX) QIXL < X IX> IXH ( I X) IXL QIYH ( Q IY) QIYL < X IY> IYH ( I Y) IYL QIZH ( Q IZ) QIZL < X IZ> IZH ( I Z) IZL QSPH ( Q SP) QSPL < X SP> SPH ( S P) SPL ④アブソリュートバンクレジスタ QW0 ( QWA 0) QA0 < XWA 0> RW0 ( RWA 0) RA0 QB0 ( QBC 0) QC0 < XBC 0> RB0 ( RBC 0) RC0 QD0 ( QDE 0) QE0 < XDE 0> RD0 ( RDE 0) RE0 QH0 ( QHL 0) QL0 < XHL 0> RH0 ( RHL 0) RL0 QW1 ( QWA 1) QA1 < XWA 1> RW1 ( RWA 1) RA1 QB1 ( QBC 1) QC1 < XBC 1> RB1 ( RBC 1) RC1 QD1 ( QDE 1) QE1 < XDE 1> RD1 ( RDE 1) RE1 QH1 ( QHL 1) QL1 < XHL 1> RH1 ( RHL 1) RL1 QW2 ( QWA 2) QA2 < XWA 2> RW2 ( RWA 2) RA2 QB2 ( QBC 2) QC2 < XBC 2> RB2 ( RBC 2) RC2 QD2 ( QDE 2) QE2 < XDE 2> RD2 ( RDE 2) RE2 QH2 ( QHL 2) QL2 < XHL 2> RH2 ( RHL 2) RL2 QW3 ( QWA 3) QA3 < XWA 3> RW3 ( RWA 3) RA3 QB3 ( QBC 3) QC3 < XBC 3> RB3 ( RBC 3) RC3 QD3 ( QDE 3) QE3 < XDE 3> RD3 ( RDE 3) RE3 QH3 ( QHL 3) QL3 < XHL 3> RH3 ( RHL 3) RL3 ( ): ワードレジスタ (16 ビット ) 名 < >: ロングワードレジスタ (32 ビット ) 名 Page 11 バンク 0 バンク 1 バンク 2 バンク 3 TLCS-900H1 CPU 4. アドレッシングモード TLCS-900/H1 には、9 種類のアドレッシングモードがあります。これらは、ほとんどの命令と組み合わ されて、CPU の処理能力を向上させています。 アドレッシングモードは、下記のようになっています。 アドレッシングモード No. 記述 1. レジスタ reg8 reg16 reg32 2. イミディエート n8 n16 n32 3. レジスタ間接 (reg) 4. レジスタ間接 プリデクリメント (−reg) 5. レジスタ間接 ポストインクリメント (reg+) 6. インデックス (reg + d8) (reg + d16) 7. レジスタインデックス (reg + reg8) (reg + reg16) 8. 絶対 (n8) (n16) (n24) 9. 相対 (PC + d8) (PC + d16) reg8: W, A, B, C, D, E, H, L, などの全 8 ビットレジスタ reg16: WA, BC, DE, HL, IX, IY, IZ, SP, などの全 16 ビットレジスタ reg32: XWA, XBC, XDE, XHL, XIX, XIY, XIZ, XSP, などの全 32 ビットレジスタ 注 1) reg: XWA, XBC, XDE, XHL, XIX, XIY, XIZ, XSP, などの全 32 ビットレジスタ d8: 8 ビットディスプレースメント (−80H~+7FH) d16: 16 ビットディスプレースメント (−8000H~+7FFFH) n8: 8 ビット定数 (00H~FFH) n16: 16 ビット定数 (0000H~FFFFH) n32: 32 ビット定数 (00000000H~FFFFFFFFH) 相対アドレッシングモードは、下記の命令でのみ使用可能です。 LDAR, JR, JRL, DJNZ, CALR 注 2) 汎用レジスタは 32 ビット幅ですが、当製品のアドレス幅は 24 ビット幅となっています。間 接アドレスなどにより 32 ビット幅を指定しても 24 ビット分のみに反映されます。 Page 12 TLCS-900H1 CPU (1) レジスタ オペランドは、指定されたレジスタになります。 例 : LD HL, IX CPU HL 1 2 3 4 IX 1 2 3 4 IX レジスタの内容 1234H が、HL レジスタへロードされます。 (2) イミディエート オペランドは、その命令コード中になります。 例 : LD HL, 5678H CPU (OP 33 HL 5 6 7 8 ) 78 56 イミディエートデータ 5678H が、HL レジスタへロードされます。 (3) レジスタ間接 オペランドは、レジスタの内容で指定されるメモリ番地になります。 例 : LD HL, (XIX) CPU HL XIX 1 2 3 4 2 5 2 6 3 7 3 33 345678H 22 345679H 8 345678H 番地のメモリデータ 2233H が、HL レジスタへロードされます。 Page 13 TLCS-900H1 CPU (4) レジスタ間接プリデクリメント まず、レジスタ内容がオペランドサイズ分、減算されます。そして、オペランドは、減算されたレ ジスタの内容で指定されるメモリ番地になります。 例 1: LD HL, (−XIX) CPU HL XIX 1 2 3 4 6 5 6 6 7 7 7 77 345676H 66 345677H 8 2 XIX 1 2 3 4 5 6 7 6 プリデクリメント数は、下記のようになります。 オペランドサイズが バイト (8 ビット ) のとき = −1 オペランドサイズが ワード (16 ビット ) のとき = −2 オペランドサイズが ロング (32 ビット ) のとき = −4 例 2: LD XIX, (−XBC) CPU XIX XBC 2 2 3 3 4 4 5 5 1 2 3 4 0 0 0 2 4 XBC 1 2 3 3 F F F E Page 14 55 33FFFEH 44 33FFFFH 33 340000H 22 340001H TLCS-900H1 CPU (5) レジスタ間接ポストインクリメント オペランドは、レジスタの内容で指定されるメモリ番地になります。その後、レジスタの内容がオ ペランドサイズ分、加算されます。 例 1: LD HL, (XIX+) CPU HL XIX 1 2 3 8 4 5 8 6 9 7 + XIX 1 2 3 4 9 99 345678H 88 345679H 55 345678H 8 2 5 6 7 A 例 2: LD A, (XBC+) CPU A XBC 1 2 3 4 5 6 5 7 + XBC 1 2 3 4 5 8 1 5 6 7 9 Page 15 TLCS-900H1 CPU (6) インデックス オペランドは、命令コード中の 8 ビットまたは 16 ビットのディスプレースメント値と、ベースに 指定されたレジスタ (32 ビット ) の内容を加算して得られるメモリ番地になります。 例 1: LD HL, (XIX + 13H) CPU HL XIX 1 2 3 5 4 5 5 6 6 7 6 66 345683H 55 345684H 66 33F000H 55 33F001H 0 + 13 例 2: LD HL, (XBC − 1000H) CPU XBC 1 2 3 HL 5 5 6 6 4 0 0 0 0 1 0 0 0 なお、ディスプレースメント値の範囲は、8000H~+7FFFH に限られます。 Page 16 TLCS-900H1 CPU (7) レジスタインデックス オペランドは、ディスプレースメント ( 符号付きの 8 ビットまたは 16 ビット整数 ) に指定された レジスタと、ベースに指定されたレジスタ (32 ビット ) の内容を加算して得られるメモリ番地になり ます。 例 1: LD HL, (XIX + A) CPU XIX 1 2 3 HL 2 2 3 3 4 5 6 7 0 13 33 345683H 22 345684H 33 347678H 22 347679H A 例 2: LD HL, (XBC + DE) CPU XBC 1 2 3 HL 2 2 3 3 4 5 6 7 8 2 0 30 0 DE Page 17 TLCS-900H1 CPU (8) 絶対 オペランドは、命令コード中の 1~3 バイトで指定されるメモリ番地になります。 000000H~0000FFH 番地は、1 バイトで指定できます。000000H~00FFFFH 番地は、2 バイトで指定で き、000000H~FFFFFFH 番地は、3 バイトで指定できます。 例 1: LD HL, (80H) CPU HL 2 2 3 3 33 000080H 22 000081H 55 001234H 44 001235H 77 56789AH 66 56789BH 例 2: LD HL, (1234H) CPU HL 4 4 5 5 例 3: LD HL, (56789AH) CPU HL 6 6 7 7 Page 18 TLCS-900H1 CPU (9) 相対 オペランドは、現在実行中の命令コードのある番地と、8 ビットまたは 16 ビットのディスプレー スメント値を加算して得られるメモリ番地になります。 このアドレッシングモードを使用できる命令は、限定されており、下記の 5 種類です。 LDAR R, $ + 4 + d16 JR cc, $ + 2 + d8 JRL cc, $ + 3 + d16 CALR $ + 3 + d16 DJNZ r, $ + 3 + d8 ($: 命令コードの先頭番地 ) なお、ディスプレースメントのオブジェクトコード値の計算は、命令の種類によって、補正値が異 なります (+2~+4) 。 例 1: JR 2034H JR 68 2000H 32 2001H 上記の例での、ディスプレースメントのオブジェクトコード値は、 2034H − (2000H + 2) であり、32H となります。 Page 19 TLCS-900H1 CPU 5. 命令 TLCS-900/H1 には、豊富なアドレッシングモードとともに、強力な命令セットを持っています。 基本命令は、大別して以下の 9 グループに分類されます。 • 転送命令 (8/16/32 ビット ) • 交換命令 (8/16 ビット ) • ブロック転送 / ブロックサーチ命令 (8/16 ビット ) • 算術演算命令 (8/16/32 ビット ) • 論理演算命令 (8/16/32 ビット ) • ビット操作命令 (1 ビット ) • 特別演算、CPU 制御命令 • ローテート、シフト命令 (8/16/32 ビット ) • ジャンプ、コール、リターン命令 表 5.1.1 に、TLCS-900/H1 の基本命令を示します。 付録 A に「命令の詳細」を、付録 B に「命令一覧表」を、付録 C に「命令コードマップ」を示します。 Page 20 TLCS-900H1 CPU 表 5.1.1 TLSC-900/H1 基本命令 LD dst, src データ転送命令。dst ← src PUSH src src のデータをスタックへ PUSH します。 SP ← SP − size: (SP) ← src POP dst スタックから dst へデータを POP します。 dst ← (SP): SP ← SP + size LDA dst, src src の実効アドレスを dst にセットします。 LDAR dst, PC + dd PC 相対アドレス値を dst にセットします。dst ← PC + dd EX dst1, dst2 dst1 と dst2 のデータを交換します。 MIRR dst dst のビットパターンをミラー反転します。 LDI ブロック転送命令。 LDIR ブロック転送命令。 LDD ブロック転送命令。 LDDR ブロック転送命令。 CPI ブロック比較命令。 CPIR ブロック比較命令。 CPD ブロック比較命令。 CPDR ブロック比較命令。 ADD dst, src 加算命令。 dst ← dst + src ADC dst, src 拡張加算命令。 dst ← dst + src + CY SUB dst, src 減算命令。 dst ← dst − src SBC dst, src 拡張減算命令。 dst ← dst − src − CY CP dst, src 比較命令。 dst − src AND dst, src 論理積命令。 dst ← dst AND src OR dst, src 論理和命令。 dst ← dst OR src XOR dst, src 排他的論理和命令。 dst ← dst XOR src INC imm, dst 増加命令。 dst ← dst + imm DEC imm, dst 減少命令。 dst ← dst − imm MUL dst, src 符号なし乗算命令。 dst ← dst (low) × src dst ← dst (low) × src MULS dst, src 符号付き乗算命令。 DIV dst, src 符号なし除算命令。 dst (low) ← dst ÷ src dst (high) ← 余り 0 による除算またはオーバフローで、V フラグがセットされます。 DIVS dst, src 符号付き除算命令。 dst (low) ← dst ÷ src dst (high) ← 余り ; 符号は常に被除数と同じです。 0 による除算またはオーバフローで、V フラグがセットされます。 MULA dst 符号付き積和演算命令。 MINC1 num, dst モジュロインクリメント (+1)。 MINC2 num, dst モジュロインクリメント (+2)。 MINC4 num, dst モジュロインクリメント (+4)。 MDEC1 num, dst モジュロデクリメント (−1)。 MDEC2 num, dst モジュロデクリメント (−2)。 MDEC4 num, dst モジュロデクリメント (−4)。 NEG dst 2 の補数。dst ← 0 − dst CPL dst 1 の補数。dst ← not dst EXTZ dst ゼロ拡張。dst の上位データを 0 にセットします。 EXTS dst 符号拡張。dst の下位データの MSB 値を上位にコピーします。 DAA dst 10 進補正。 PAA dst ポインタ補正。dst が奇数のとき、+1 を加えて偶数にします。 if dst (0) = 1 then dst ← dst + 1. Page 21 dst ← dst + (XDE) × (XHL−) 32bit 32bit 16bit 16bit TLCS-900H1 CPU LDCF bit, src src<bit> の値を、C フラグにコピーします。 STCF bit, dst C フラグの値を、dst<bit> へコピーします。 ANDCF bit, src src<bit> の値と C フラグの AND をとり、C フラグへ格納します。 ORCF bit, src src<bit> の値と C フラグの OR をとり、C フラグへ格納します。 XORCF bit, src src<bit> の値と C フラグの XOR をとり、C フラグへ格納します。 C フラグを 0 に、リセットします。 RCF SCF C フラグを 1 に、セットします。 CCF C フラグの値を、反転します。 ZCF Z フラグの反転値を、C フラグへコピーします。 BIT bit, src ビットテスト命令。Z フラグ ← not src<bit> RES bit, dst ビットリセット命令。dst<bit> ← 0 SET bit, dst ビットセット命令。dst<bit> ← 1 CHG bit, dst ビットチェンジ命令。dst<bit> ← not dst<bit> TSET bit, dst ビットテスト & セット命令。 Z フラグ ← not dst<bit> dst<bit> ← 1 BS1F A, dst dst 中にある最初の 1 のビットを、Forward (LSB) からサーチし、そのビット番号を A レジスタ にセットします。 BS1B A,dst dst 中にある最初の 1 のビットを、Backward (MSB) からサーチし、そのビット番号を A レジス タにセットします。 ノーオペレーション。 NOP EI imm DI 割り込みフラグの設定をします。 IFF ← imm マスカブル割り込みを禁止します。 IFF ← 7 ステータスレジスタを PUSH します。 PUSH SR POP SR ステータスレジスタを POP します。 SWI imm ソフトウエア割り込み。 CPU を停止します。 HALT LDC CTRL − REG, reg レジスタの内容を、CPU のコントロールレジスタへコピーします。 LDC reg, CTRL − REG CPU のコントロールレジスタの内容を、レジスタへコピーします。 LINK reg, dd スタックフレームを生成します。 PUSH reg LD reg, XSP ADD XSP, dd UNLK reg スタックフレームを削除します。 LD XSP, reg POP reg LDF imm レジスタバンクを指定します。 RFP ← imm INCF 新しいレジスタバンクへ移ります。 RFP ← RFP + 1 DECF 以前のレジスタバンクへ戻ります。 RFP ← RFP − 1 SCC cc, dst コンディションコードによる dst のセットを行います。 if cc then dst ← 1 else dst ← 0. Page 22 TLCS-900H1 CPU RLC RRC RL RR num, dst num, dst num, dst num, dst ローテート命令。 CY MSB LSB CY MSB LSB CY MSB LSB CY MSB LSB ローテート命令。 ローテート命令。 ローテート命令。 SLA num, dst シフト命令。 SRA num, dst シフト命令。 CY MSB CY SLL num, dst シフト命令。 SRL num, dst シフト命令。 RLD dst MSB CY CY LSB LSB MSB 0 LSB MSB LSB 43 0 7 43 0 dst 0 7 43 0 dst Areg dst ローテートデジット命令。 7 CY MSB 43 LSB Areg JR cc, PC + d 相対ジャンプ命令 (8 ビットディスプレースメント )。 if cc then PC ← PC + d. JRL cc, PC + dd 相対ロングジャンプ命令 (16 ビットディスプレースメント )。 if cc then PC ← PC + dd. JP cc, dst ジャンプ命令。 if cc then PC ← dst. CALR RC + dd 相対コール命令 (16 ビットディスプレースメント )。 PUSH PC: PC ← PC + dd. CALL cc, dst コール命令。 if cc then PUSH PC: PC ← dst. DJNZ dst, PC + d デクリメント & 相対ジャンプ命令。 dst ← dst − 1 if dst ≠ 0 then PC ← PC + d. RET cc リターン命令。 if cc then POP PC. RETD dd リターン & 引き数領域の削除命令。 RET XSP ← XSP + dd RETI 0 ローテートデジット命令。 7 RRD 0 割り込み用リターン命令。 POP SR&PC Page 23 TLCS-900H1 CPU 表 5.1.2 命令一覧 BWL LD reg, reg BWL LD reg, imm BWL LD reg, mem BWL LD BW- LD BW- LD (nn), mem BW- LD mem, (nn) BWL INC --- NOP mem, reg --- EI mem, imm --- DI DEC BW- imm3, reg imm3, mem.B/W MUL reg, reg -W- PUSH SR MULS reg, imm -W- POP SR DIV reg, mem --- SWI [imm3] --- HALT DIVS BWL PUSH reg/F BW- PUSH imm BW- PUSH mem -W- [imm3] MULA reg BWL LDC CTRL − R, reg BWL LDC reg, CTRL − R -W- MINC1 imm, reg --L LINK reg, dd BWL POP reg/F -W- MINC2 imm, reg --L UNLK reg BW- mem -W- MINC4 imm, reg --- LDF imm2 -W- MDEC1 imm, reg --- INCF POP -WL LDA reg, mem -WL LDAR reg, PC + dd -W- MDEC2 imm, reg --- -W- MDEC4 imm, reg BW- DECF BW- NEG reg BWL RLC BW- CPL reg RRC A, reg -WL EXTZ reg RL mem. B/W -WL EXTS reg RR SCC B-- EX F, F’ BW- EX reg, reg B-- DAA reg SLA BW- EX mem, reg -WL PAA reg SRA cc, reg imm, reg SLL SRL -W- MIRR reg BW- LDCF imm, reg STCF A, reg B-- RLD [A,] mem ANDCF imm, mem.B B-- RRD [A,] mem ORCF A, mem.B [cc,] PC + d BW- LDI BW- LDIR --- JR BW- LDD --- RCF --- JRL [cc,] PC + dd BW- LDDR --- SCF --- JP [cc,] mem BW- XORCF --- CCF --- CALR PC + dd --- ZCF --- CALL [cc,] mem BW- DJNZ [reg], PC + d CPI BW- CPIR BW- CPD BW- CPDR BWL ADD BW- BIT imm, reg RES imm, mem.B SET --- RET [cc] CHG --- RETD dd TSET --- RETI reg, reg ADC reg, imm SUB reg, mem SBC mem, reg CP mem, imm.B/W -W- BS1F A, reg BS1B AND OR XOR B = バイト (8 ビット ), W = ワード (16 ビット ), L = ロングワード (32 ビット ) [ ]: 省略可能を示します。 Page 24 TLCS-900H1 CPU 6. データ構成 TLCS-900/H1 は、1/4/8/16/32 ビットの各種サイズのデータを扱うことができます。 (1) レジスタのデータフォーマット < 1 > 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 BCD MSB LSB MSB LSB MSB MSB LSB MSB LSB MSB LSB LSB MSB LSB 注 ) 斜線部分のアクセスは、斜線なしの部分のアクセスに比べて、命令コード長が 1 バイト長くな ります。 (2) メモリのデータフォーマット < 1 n 7 n MSB 6 n n+1 > 5 4 3 2 1 0 LSB LSB MSB LSB n n+1 n+2 n+3 MSB 注 ) メモリ上でワードデータ / ロングワードデータを扱う場合、ワードアライメントの制限はありま せん。偶数番地または奇数番地のどちらからでも配置できます。 (3) ダイナミックバスサイジング TLCS-900/H1 では、8 ビットデータバスと 16 ビットデータバス、32 ビットデータバスを、ダイナ ミック ( 各バスサイクルごと ) に切り替えることができます。これを、ダイナミックバスサイジング と呼びます。 この機能により、TLCS-900/H1 では、外部に 8 ビットデータバス幅のメモリと 16 ビットデータバ ス幅、32 ビットデータバス幅のメモリを、混在して拡張することが可能です。 メモリコントローラを内蔵した製品では、それにより各アドレス領域ごとに外部データバス幅の制 御を行うことが可能です。 注 ) バス幅が異なるメモリを連続したアドレスに配置した場合、両方のメモリにまたがるアクセス を 1 命令で実行しないでください。データの正常な読み出し / 書き込みが行われない場合があり ます。 Page 25 TLCS-900H1 CPU データサイズ ( ビット ) スタート アドレス メモリ側データ幅 ( ビット ) CPU アドレス D31~D24 D23~D16 D15~D8 D7~D0 8 4n + 0 8/16/32 4n + 0 xxxxx xxxxx xxxxx b7~b0 4n + 1 8 4n + 1 xxxxx xxxxx xxxxx b7~b0 16/32 4n + 1 xxxxx xxxxx b7~b0 xxxxx 8/16 4n + 2 xxxxx xxxxx xxxxx b7~b0 32 4n + 2 xxxxx b7~b0 xxxxx xxxxx 8 4n + 3 xxxxx xxxxx xxxxx b7~b0 16 4n + 3 xxxxx xxxxx b7~b0 xxxxx 32 4n + 3 b7~b0 xxxxx xxxxx xxxxx 8 (1) 4n + 0 (2) 4n + 1 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b15~b8 4n + 2 4n + 3 16 4n + 0 4n + 1 4n + 2 4n + 3 32 4n + 0 4n + 1 4n + 2 4n + 3 xxxxx: CPU データ 16/32 4n + 0 xxxxx xxxxx b15~b8 b7~b0 8 (1) 4n + 1 (2) 4n + 2 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b15~b8 16 (1) 4n + 1 (2) 4n + 2 xxxxx xxxxx xxxxx xxxxx b7~b0 xxxxx xxxxx b15~b8 32 4n + 1 xxxxx b15~b8 b7~b0 xxxxx 8 (1) 4n + 2 (2) 4n + 1 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b15~b8 16 4n + 2 xxxxx xxxxx b15~b8 b7~b0 32 4n + 2 b15~b8 b7~b0 xxxxx xxxxx 8 (1) 4n + 3 (2) 4n + 4 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b15~b8 16 (1) 4n + 3 (2) 4n + 4 xxxxx xxxxx xxxxx xxxxx b7~b0 xxxxx xxxxx b15~b8 32 (1) 4n + 3 (2) 4n + 4 b7~b0 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b15~b8 8 (1) 4n + 0 (2) 4n + 1 (3) 4n + 2 (4) 4n + 3 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b15~b8 b23~b16 b31~b24 16 (1) 4n + 0 (2) 4n + 2 xxxxx xxxxx xxxxx xxxxx b15~b8 b31~b24 b7~b0 b23~b16 32 4n + 0 b31~b24 b23~b16 b15~b8 b7~b0 8 (1) 4n + 1 (2) 4n + 2 (3) 4n + 3 (4) 4n + 4 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b15~b8 b23~b16 b31~b24 16 (1) 4n + 1 (2) 4n + 2 (3) 4n + 4 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b23~b16 xxxxx xxxxx b15~b8 b31~b24 32 (1) 4n + 1 (2) 4n + 4 b23~b16 xxxxx b15~b8 xxxxx b7~b0 xxxxx xxxxx b31~b24 8 (1) 4n + 2 (2) 4n + 3 (3) 4n + 4 (4) 4n + 5 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b15~b8 b23~b16 b31~b24 16 (1) 4n + 2 (2) 4n + 4 xxxxx xxxxx xxxxx xxxxx b15~b8 b31~b24 b7~b0 b23~b16 32 (1) 4n + 2 (2) 4n + 4 b15~b8 xxxxx b7~b0 xxxxx xxxxx b31~b24 xxxxx b23~b16 8 (1) 4n + 3 (2) 4n + 4 (3) 4n + 5 (4) 4n + 6 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b15~b8 b23~b16 b31~b24 16 (1) 4n + 3 (2) 4n + 4 (3) 4n + 6 xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx b7~b0 b23~b16 xxxxx xxxxx b15~b8 b31~b24 32 (1) 4n + 3 (2) 4n + 4 b7~b0 xxxxx xxxxx b31~b24 xxxxx b23~b16 xxxxx b15~b8 リード時はそのバスの入力データが無視されることを示します。 ライト時は、そのバスがハイインピーダンスで、そのバスのライトストローブ信号は、ノンアクティブのままであるこ とを示します。 Page 26 TLCS-900H1 CPU (4) 内部データバスの構成 TLCS-900/H1 では、CPU と内蔵メモリ ( 内蔵 RAM または内蔵 ROM) は 32 ビット幅のデータバス で接続されています。内蔵 RAM は、常に 1 クロック (50 ns @ 20 MHz) でアクセスされます。内蔵 ROM は、インタリーブ方式でアクセスされるので、最初のバスサイクルは 2 クロックで、引き続き 次の番地をアクセスするときは 1 クロックでアクセスされます。 一方、CPU と内蔵 I/O は、例外的なものを除いて、8/16 ビット幅のデータバスで接続されていま す。これは、内蔵 I/O のアクセススピードがほとんどシステム全体の動作スピードに影響を与えない からです。システム全体の動作スピードは、プログラムメモリのアクセススピードに大きく依存しま す。 なお、内蔵 I/O は、高速アクセス型と低速アクセス型があります。高速アクセス型の内蔵 I/O は、 「TLCS-900/H1 型」と呼ばれ、常に 2 クロック (100 ns @ 20 MHz) でアクセスされます。 一方、低速アクセス型の内蔵 I/O は、「TLCS-900/L1 型」と呼ばれ、システムクロック (50 ns @ 20 MHz) を 4 分周した信号 ( 周期 200 ns @ 20 MHz) に同期してアクセスされます。最小 5 クロック (250 ns @ 20 MHz)、最大6クロック (300 ns @ 20 MHz) でアクセスされます。 Page 27 TLCS-900H1 CPU 7. 基本タイミング TLCS-900/H1 は、下に示す図 7.1.1 のようなクロックシステムになっています。カッコ内の数値は、 20MHz で動作させた場合の各クロックの周波数を示しています。 図 7.1.2~ 図 7.1.3 に、外部メモリに対する基本バスタイミングを示します。詳細は、各派生品の機能を 説明している文章の「メモリコントローラ」を参照してください。 X1 (10 MHz) (10 MHz) (40 MHz) 4 X2 WRxx, RAS, DRAM 2 2 (20 MHz) CLK 1 =1 (50 ns) (CPU, 900/H1 I/O ) (10 MHz) (900/L1 I/O ) 図 7.1.1 クロックシステム 注 ) 図は TLCS-900/H1 の一例です。詳しくは各製品個別編にてご確認ください。 Page 28 TLCS-900H1 CPU 100 ns (@CLK = 20 MHz) X1 CLK A0~A23 CSn RD D0~D31 WRxx D0~D31 WAIT 図 7.1.2 外部リード / ライトサイクル (0 ウェイト ) 150 ns (@CLK = 20 MHz) X1 CLK A0~A23 CSn RD D0~D31 WRxx D0~D31 WAIT 図 7.1.3 外部リード / ライトサイクル (1 ウェイト ) Page 29 TLCS-900H1 CPU Page 30 TLCS-900H1 CPU 付録 A. 命令の詳細 ■ 命令リスト (1) 転送 LD PUSH (2) 交換 EX MIRR POP LDA LDAR (3) ブロック転送 / ブロックサーチ LDI LDIR LDD LDDR CPI CPIR CPD CPDR (4) 算術演算 ADD ADC SUB SBC CP INC DEC NEG PAA MUL MULS DIV DIVS CCF EXTZ EXTS DAA MULA MINC MDEC (5) 論理演算 AND OR XOR (6) ビット操作 LDCF STCF ANDCF ORCF XORCF RCF SCF RES CHG BS1 ZCF BIT CPL SET TSET (7) 特別演算 , CPU 制御 NOP EI DI PUSH _ SR POP _ SR SWI HALT LDC LINK UNLK LDF INCF DECF SCC RR SLA SRA SLL SRL CALR DJNZ RET RETD (8) ローテート , シフト RLC RRC RL RLD RRD (9) ジャンプ , コール , リターン JP JR JRL CALL RETI Page 31 TLCS-900H1 CPU ■ 本文中の記号の説明 本文中で使われている各記号の意味は、下記のとおりです。 dst ディストネーション。データの転送先または演算結果の格納先を示します。 src ソース。データの転送元または演算データの読み出し元を示します。 num condition R r ナンバー。数値であることを示します。 コンディション。フラグによる条件記号を示します。 8/16/32 ビットのカレントバンクレジスタを含む 8 本の汎用レジスタ 8 ビットの場合 : W, A, B, C, D, E, H, L の 8 本のみ 16 ビットの場合 : WA, BC, DE, HL, IX, IY, IZ, SP の 8 本のみ 32 ビットの場合 : XWA, XBC, XDE, XHL, XIX, XIY, XIZ, XSP の 8 本のみ 8/16/32 ビットの汎用レジスタ (4, 5 ページ後の「レジスタマップ」で示されたすべてのレジスタ ) r16 16 ビットの汎用レジスタ (4, 5 ページ後の「レジスタマップ」で示されたすべての 16 ビットレジスタ ) r32 32 ビットの汎用レジスタ (4, 5 ページ後の「レジスタマップ」で示されたすべての 32 ビットレジスタ ) cr 8/16/32 ビットの CPU の全コントロールレジスタ DMAS0~DMAS7, DMAD0~DMAD7, DMAC0~DMAC7, DMAM0~DMAM7, INTNEST A A レジスタ (8 ビット ) F フラグレジスタ (8 ビット ) F’ 裏フラグレジスタ (8 ビット ) SR ステータスレジスタ (16 ビット ) PC プログラムカウンタ (32 ビット ) (mem) 8/16/32 ビットのメモリ内のデータ mem 実効アドレス値 <W> オペランドサイズがワードのとき “W” の記述が必要であることを示します。 [] カッコ内のオペランドの記述が、省略できることを示します。 # 8/16/32 ビットの即値データ #3 3 ビットの即値データ ; 0~7 or 1~8 ........... 短縮コード用 #4 4 ビットの即値データ ; 0~15 or 1~16 d8 8 ビットのディスプレースメント ; −80H~+7FH d16 cc CY Z (#8) (#16) 16 ビットのディスプレースメント ; −8000H~+7FFFH コンディションコード キャリーフラグ ゼロフラグ ダイレクトアドレッシング ; (00H)~(0FFH) ........... 256 バイト空間 64 K バイトエリアアドレッシング ; (0000H)~(0FFFFH) (−r32) プリデクリメントアドレッシング (r32+) ポストインクリメントアドレッシング $ その命令が置かれている先頭アドレス Page 32 TLCS-900H1 CPU ■ オブジェクトコード中の記号の説明 オブジェクトコードの中で使われている各記号の意味は、下記のとおりです。 z zz zzz z オペランドサイズ指定コード バイト 0 ワード 1 ロング − zz 00 01 10 zzz 010 011 100 s − 0 1 コード 000 バイト W s R レジスタ指定コード r ワード WA ロング XWA 001 A BC XBC 010 B DE XDE 011 C HL XHL 100 D IX XIX 101 E IY XIY 110 H IZ XIZ 111 L SP XSP 補足 : r で示されるレジスタは、上記以外に拡張コードを使うと、すべてのレジスタを指定することが できます。 なお、この場合、実行ステート数は +1 増加します。下記に、そのフォーマットを示します。 0 1OP 1 1 1 r 4 1OP 8 "0111" 2OP 2OP なお、“r” のコード値は、 ワードレジスタとしてアクセスするときは 2 の倍数 ロングレジスタとしてアクセスするときは 4 の倍数 の値に限られます。 8 ビットで指示されるレジスタは、後述の “ レジスタマップ ” を参照してください。 Page 33 TLCS-900H1 CPU m メモリアドレッシングモード指定コード (XWA) = -0--0000 (XBC) = -0--0001 (XDE) = -0--0010 (XHL) = -0--0011 (XIX) = -0--0100 (XIY) = -0--0101 <7:0> = データのビット範囲を示す。 この例はビット 0 からビット 7 までの 8 ビット長のデータを 意味する。 (XIZ) = -0--0110 (XSP) = -0--0111 (XWA + d8) = -0--1000 d<7:0> (XBC + d8) = -0--1001 d<7:0> (XDE + d8) = -0--1010 d<7:0> (XHL + d8) = -0--1011 d<7:0> (XIX + d8) = -0--1100 d<7:0> (XIY + d8) = -0--1101 d<7:0> (XIZ + d8) = -0--1110 d<7:0> (XSP + d8) = -0--1111 d<7:0> (#8) = -1--0000 #<7:0> (#16) = -1--0001 #<7:0> (#24) = -1--0010 #<7:0> (r32) = -1--0011 r32’ 00 (r32 + d16) = -1--0011 r32’ 01 #<15:8> #<15:8> #<23:16> d<7:0> d<15:8> (r32 + r8) = -1--0011 000000 11 r32 r8 (r32 + r16) = -1--0011 000001 11 r32 r16 (−r32) = -1--0100 r32’ zz (r32+) = -1--0101 r32’ zz r32: 32 ビット幅レジスタ r16 符号付き 16 ビット幅レジスタ r8: 符号付き 8 ビット幅レジスタ zz = インクリメント / デクリメントの数 の指定コード 00: ±1 01: ±2 10: ±4 11: ( 未定義 ) r32’ = レジスタコードの上位 6 ビット Page 34 TLCS-900H1 CPU cc コンディションコード コード 0000 1000 0110 1110 0111 1111 1101 0101 1110 0110 0100 1100 0100 1100 1001 0001 1010 0010 1111 0111 1011 0011 記号 意味 F always False ( なし ) always True Z Zero NZ Not Zero C Carry NC Not Carry PL or P PLus MI or M MInus NE Not Equal EQ EQual OV OVerflow NOV No OVerflow PE Parity is Even PO Parity is Odd GE Greater than or Equal (signed) LT Less Than (signed) GT Greater Than (signed) LE Less than or Equal (signed) UGE Unsigned Greater than or Equal ULT Unsigned Less Than UGT Unsigned Greater Than ULE Unsigned Less than or Equal Page 35 条件式 − − Z=1 Z=0 C=1 C=0 S=0 S=1 Z=0 Z=1 P/V = 1 P/V = 0 P/V = 1 P/V = 0 (S xor P/V) = 0 (S xor P/V) = 1 [Z or (S xor P/V)] = 0 [Z or (S xor P/V)] = 1 C=0 C=1 (C or Z) = 0 (C or Z) = 1 TLCS-900H1 CPU ■ レジスタマップ “r” 00H +3 QW0 ( QWA 0) +2 QA0 < XWA 0> +1 RW0 ( RWA 0) +0 RA0 04H QB0 ( QBC 0) QC0 < XBC 0> RB0 ( RBC 0) RC0 08H QD0 ( QDE 0) QE0 < XDE 0> RD0 ( RDE 0) RE0 0CH QH0 ( QHL 0) QL0 < XHL 0> RH0 ( RHL 0) RL0 10H QW1 ( QWA 1) QA1 < XWA 1> RW1 ( RWA 1) RA1 14H QB1 ( QBC 1) QC1 < XBC 1> RB1 ( RBC 1) RC1 18H QD1 ( QDE 1) QE1 < XDE 1> RD1 ( RDE 1) RE1 1CH QH1 ( QHL 1) QL1 < XHL 1> RH1 ( RHL 1) RL1 20H QW2 ( QWA 2) QA2 < XWA 2> RW2 ( RWA 2) RA2 24H QB2 ( QBC 2) QC2 < XBC 2> RB2 ( RBC 2) RC2 28H QD2 ( QDE 2) QE2 < XDE 2> RD2 ( RDE 2) RE2 2CH QH2 ( QHL 2) QL2 < XHL 2> RH2 ( RHL 2) RL2 30H QW3 ( QWA 3) QA3 < XWA 3> RW3 ( RWA 3) RA3 34H QB3 ( QBC 3) QC3 < XBC 3> RB3 ( RBC 3) RC3 38H QD3 ( QDE 3) QE3 < XDE 3> RD3 ( RDE 3) RE3 3CH QH3 ( QHL 3) QL3 < XHL 3> RH3 ( RHL 3) RL3 D0H QW’ ( Q WA’) QA’ < X WA’> W’ ( W A’) A’ D4H QB’ ( Q BC’) QC’ < X BC’> B’ ( B C’) C’ D8H QD’ ( Q DE’) QE’ < X DE’> D’ ( D E’) E’ DCH QH’ ( Q HL’) QL’ < X HL’> H’ ( H L’) L’ E0H QW ( Q WA) QA < X WA> W ( W A) A E4H QB ( Q BC) QC < X BC> B ( B C) C E8H QD ( Q DE) QE < X DE> D ( D E) E ECH QH ( Q HL) QL < X HL> H ( H L) L F0H QIXH ( Q IX) QIXL < X IX> IXH ( I X) IXL F4H QIYH ( Q IY) QIYL < X IY> IYH ( I Y) IYL F8H QIZH ( Q IZ) QIZL < X IZ> IZH ( I Z) IZL FCH QSPH ( Q SP) QSPL < X SP> SPH ( S P) SPL ( ): ワードレジスタ (16 ビット ) 名 < >: ロングワードレジスタ (32 ビット ) 名 Page 36 バンク 0 バンク 2 バンク 3 バンク 4 プレビアス バンク カレント バンク TLCS-900H1 CPU ■ コントロールレジスタマップ “cr” +3 +2 +1 00H <DMA S0> 04H <DMA S1> 08H <DMA S2> 0CH <DMA S3> 10H <DMA S4> 14H <DMA S5> 18H <DMA S6> 1CH <DMA S7> 20H <DMA D0> 24H <DMA D1> 28H <DMA D2> 2CH <DMA D3> 30H <DMA D4> 34H <DMA D5> 38H <DMA D6> 3CH <DMA D7> +0 DMA ソース レジスタ DMA デスティネーション レジスタ 40H DMAM0 (DMA C0) 44H DMAM1 (DMA C1) 48H DMAM2 (DMA C2) 4CH DMAM3 (DMA C3) 50H DMAM4 (DMA C4) 54H DMAM5 (DMA C5) 58H DMAM6 (DMA C6) 5CH DMAM7 (DMA C7) 7CH (INT NEST) DMA モード / カウンタ レジスタ 割り込みネスティング カウンタ ( ): ワードレジスタ (16 ビット ) 名 < >: ロングワードレジスタ (32 ビット ) 名 注 ) このコントロールマップは、TLCS-900/H1 特有のものです。従来の TLCS-900/L, TLCS-900/H とは異なりますので、注意してください。 Page 37 TLCS-900H1 CPU ADC dst, src < Add with carry キャリー付き加算 > 動 作 : dst ← dst + src + CY. 説 明 : dst の内容と src の内容とキャリーフラグ CY の内容が加算され、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ニモニック ○ ADC ADC コード R, r r, # 1 1 z z 1 r 1 0 0 1 0 R 1 1 z z 1 r 1 1 0 0 1 0 0 1 m m m #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ ○ ○ ○ ○ ○ × ADC ADC ADC<W> R, (mem) (mem), R (mem), # 1 m z z m 1 0 0 1 0 1 m z z m 1 0 0 1 1 1 m 0 z m m m m 0 0 1 1 1 0 0 1 #<7:0> #<15:8> Page 38 R m m m R TLCS-900H1 CPU フラグ : S Z H V N C 実行例 : S Z H V N C * * * * 0 * = 演算結果の最上位ビットの値がセットされます。 = 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、ビット 3 からビット 4 へキャリーが発生したときは “1”、それ以外のときは “0” がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットさ れます。 = 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされます。 = “0” にクリアされます。 = 演算結果、最上位ビットからキャリーが発生したときは “1”、それ以外のときは “0” が セットされます。 HL レジスタが 2000H, IX レジスタが 3456H, キャリーフラグ CY が 1 のとき、 ADC HL, IX を実行すると、HL レジスタは 5457H になります。 2000 HL 3456 IX 1 5457 Page 39 HL TLCS-900H1 CPU ADD dst, src < Add 加算 > 動 作 : dst ← dst + src. 説 明 : dst の内容と src の内容が加算され、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ニモニック ○ ADD ADD コード R, r r, # 1 1 z z 1 r 1 0 0 0 0 R 1 1 z z 1 r 1 1 0 0 1 0 0 0 m m m #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ ○ ○ ○ ○ ○ × ADD ADD ADD<W> R, (mem) (mem), R (mem), # 1 m z z m 1 0 0 0 0 1 m z z m 1 0 0 0 1 1 m 0 z m m m m 0 0 1 1 1 0 0 0 #<7:0> #<15:8> Page 40 R m m m R TLCS-900H1 CPU フラグ : S * S Z H V N C 実行例 : Z * H * V * N 0 C * = 演算結果の最上位ビットの値がセットされます。 = 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、ビット 3 からビット 4 へキャリーが発生したときは “1”、それ以外のときは “0” がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットさ れます。 = 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま す。 = “0” にクリアされます。 = 演算結果、最上位ビットからキャリーが発生したときは “1”、それ以外のときは “0” が セットされます。 HL レジスタが 2000H, IX レジスタが 3456H のとき、 ADD HL, IX を実行すると、HL レジスタは 5456H になります。 2000 HL 3456 IX 5456 HL Page 41 TLCS-900H1 CPU AND dst, src < And 論理積 > 動 作 : dst ← dst AND src. 説 明 : dst の内容と src の内容が論理積演算され、dst へ転送されます。 ( 真理値表 ) A B A and B 0 0 0 0 1 0 1 0 0 1 1 1 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ニモニック ○ AND AND コード R, r r, # 1 1 z z 1 r 1 1 0 0 0 R 1 1 z z 1 r 1 1 0 0 1 1 0 0 m m m #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ ○ ○ ○ ○ ○ × AND AND AND<W> R, (mem) (mem), R (mem), # 1 m z z m 1 1 0 0 0 1 m z z m 1 1 0 0 1 1 m 0 z m m m m 0 0 1 1 1 1 0 0 #<7:0> #<15:8> Page 42 R m m m R TLCS-900H1 CPU フラグ : S * S Z H V N C 実行例 : Z * H 1 V * N 0 C 0 = = = = 演算結果の最上位ビットの値がセットされます。 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 “1” にセットされます。 演算結果のパリティ (“1” の数 ) が偶数のときは “1”、奇数のときは “0” がセットされま す。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。 = “0” にクリアされます。 = “0” にクリアされます。 HL レジスタが 7350H, IX レジスタが 3456H のとき、 AND HL, IX を実行すると、HL レジスタは 3050H になります。 AND) 0111 0011 0101 0000 ← HL レジスタ( 実行前 ) 0011 0100 0101 0110 ← IX レジスタ( 実行前 ) 0011 0000 0101 0000 ← HL レジスタ( 実行後 ) Page 43 TLCS-900H1 CPU ANDCF num, src < And carry flag キャリーフラグとの 1 ビット論理積 > 動 作 : CY ← CY AND src<num>. 説 明 : キャリーフラグ CY の内容と src のビット num の内容が論理積演算され、キャリーフラグ CY へ 転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ○ × ○ 補 足 : × ニモニック × × × ANDCF コード #4, r ANDCF A, r ANDCF #3, (mem) ANDCF A, (mem) 1 1 0 z 1 r 0 0 1 0 0 0 0 0 0 1 1 0 z 1 0 0 1 0 1 0 0 0 1 m 1 1 m m m m 1 0 0 0 0 1 m 1 1 m m m m 0 0 1 0 1 0 0 0 0 0 # 4 0 r #3 ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし て使われます。オペランドがバイトのとき、ビット num の下位 4 ビットの値が 8~15 の場合、演 算結果は不定になります。 フラグ : S Z H V N C = = = = = = S Z H V N C – – – – – * 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 キャリーフラグ CY の内容と src のビット num の内容の論理積演算された値がセットされ ます。 Page 44 TLCS-900H1 CPU 実行例 : 100 番地のメモリの内容が 01000000B (2 進数 ) で、キャリーフラグ CY が 1 のとき、 ANDCF 6, (100H) を実行すると、キャリーフラグは 1 になります。 7 6 5 4 3 2 1 0 0 1 0 0 0 0 0 0 AND 100 1 ( ) 1 ( ) Page 45 TLCS-900H1 CPU BIT num, src < Bit test 1 ビットのテスト > 動 作 : Z フラグ ← src<num> の反転値 説 明 : src のビット num の反転値が、Z フラグへ 転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ × フラグ : S × S Z H V N C 実行例 : ニモニック × Z * = = = = = = BIT H 1 #4, r BIT V × N 0 コード #3, (mem) C – 不定値がセットされます。 src<num> の反転値がセットされます。 “1” にセットされます。 不定値がセットされます。 “0” にリセットされます。 変化なし。 100 番地のメモリの内容が 00100000B (2 進数 ) のとき、 BIT 5, (100H) を実行すると、Z フラグは 0 になります。 7 6 5 4 3 2 1 0 0 0 1 0 0 0 0 0 0 Z Page 46 100 1 1 0 z 1 0 0 1 1 0 0 0 0 0 1 m 1 1 m 1 1 0 0 1 r 0 1 # 4 m m #3 1 m TLCS-900H1 CPU BS1B dst, src < Bit search 1 backward ビットパターン中の最初の 1 を後方向からサーチ > 動 作 : dst ← src を後方向サーチした結果 説 明 : src のビットパターン中の最初の 1 が後方向から (MSB から LSB へ ) サーチされ、その 1 の位置 のビットナンバーが、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング × ○ × 補 足 : ニモニック BS1B A, r 1 1 0 1 1 0 0 0 0 1 r 1 1 1 オペランド中の dst は A レジスタ、src はワード長のレジスタに限られます。なお、サーチした ビットパターン中に 1 がなかった場合、A レジスタの値は不定になり、V フラグが “1” にセッ トされます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C – – – * – – = = = = 変化なし。 変化なし。 変化なし。 src の内容がオールゼロの場合 ( ビットパターン中に 1 がない場合 ) は “1”、それ以外の ときは “0” がセットされます。 = 変化なし。 = 変化なし。 IX レジスタが 1200H のとき、 BS1B A, IX を実行すると、A レジスタは 0CH になります。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 Page 47 IX TLCS-900H1 CPU BS1F dst, src < Bit search 1 forward ビットパターン中の最初の 1 を前方向からサーチ > 動 作 : dst ← src を前方向サーチした結果 説 明 : src のビットパターン中の最初の 1 が前方向から (LSB から MSB へ ) サーチされ、その 1 の位置 のビットナンバーが、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング × ○ × 補 足 : ニモニック BS1F A, r 1 1 0 1 1 0 0 0 0 1 r 1 1 0 オペランド中の dst は A レジスタ、src はワード長のレジスタに限られます。なお、サーチした ビットパターン中に 1 がなかった場合、A レジスタの値は不定になり、V フラグが “1” にセッ トされます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C – – – * – – = = = = 変化なし。 変化なし。 変化なし。 src の内容がオールゼロの場合 ( ビットパターン中に 1 がない場合 ) は “1”、それ以外の ときは “0” がセットされます。 = 変化なし。 = 変化なし。 IX レジスタが 1200H のとき、 BS1F A, IX を実行すると、A レジスタは 09H になります。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 Page 48 IX TLCS-900H1 CPU CALL condition, dst < Call サブルーチンコール > 動 作 : if cc が真 then XSP ← XSP − 4, (XSP) ← 32 ビット PC, PC ← dst. 説 明 : オペランドのコンディションが真の場合、スタック領域へプログラムカウンタ PC の内容が退避 され、dst で示されたプログラム番地へジャンプします。 詳 細 : ニモニック CALL コード #16 0 0 0 1 1 1 0 0 1 0 1 m m m c c #<7:0> #<15:8> CALL #24 0 0 0 1 1 #<7:0> #<15:8> #<23:16> CALL フラグ : S Z H V N C 実行例 : = = = = = = [cc, ] mem S Z H V N C – – – – – – 1 m 1 1 1 1 1 0 m 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 スタックポインタ XSP が 100H のとき、8000H 番地のメモリにある命令、 CALL 9000H を実行すると、メモリの 0FCH 番地にリターンアドレス 8003H ( ロングデータ ) がライトされ、 スタックポインタ XSP は 0FCH になり、9000H 番地へジャンプします。 注 ) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリードしま すが、その内容は読み捨てられます。 Page 49 TLCS-900H1 CPU CALR dst < Call relative 相対サブルーチンコール > 動 作 : XSP ← XSP − 4, (XSP) ← 32 ビット PC, PC ← dst. 説 明 : スタック領域へプログラムカウンタ PC の内容が退避され、dst で示されたプログラム番地へ相対 ジャンプします。 詳 細 : ニモニック コード $ + 3 + d16 CALR 0 0 0 1 1 1 1 0 d<7:0> d<15:8> フラグ : S Z H V N C = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 注 ) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリードしま すが、その内容は読み捨てられます。 Page 50 TLCS-900H1 CPU CCF < Complement carry flag キャリーフラグの反転 > 動 作 : CY ← CY の反転値 説 明 : キャリーフラグ CY の内容が、反転されます。 詳 細 : ニモニック コード CCF 0 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – × – 0 * 0 変化なし。 変化なし。 不定値がセットされます。 変化なし。 “0” にリセットされます。 自分自身の反転値がセットされます。 キャリーフラグ CY が 0 のとき、 CCF を実行すると、キャリーフラグ CY は 1 になります。さらに、 CCF を実行すると、キャリーフラグ CY は 0 になります。 0 ( ) 1 ( ) 1 ( ) 0 ( ) Page 51 0 1 0 0 1 0 TLCS-900H1 CPU CHG num, dst < Change 1 ビットの反転 > 動 作 : dst<num> ← dst<num> の反転値 説 明 : dst のビット num の値が反転されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ × ニモニック CHG × #4, r CHG #3, (mem) フラグ : S Z H V N C 実行例 : = = = = = = コード S Z H V N C – – – – – – 1 1 0 z 1 0 0 1 1 0 0 0 0 0 1 m 1 1 m 1 1 0 0 0 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 100 番地のメモリの内容が 00100111B (2 進数 ) のとき、 CHG 5, (100H) を実行すると、100 番地のメモリの内容は 00000111B (2 進数 ) になります。 7 6 5 4 3 2 1 0 0 0 1 0 0 1 1 1 100 ( ) 0 0 0 0 0 1 1 1 100 ( ) Page 52 r 0 1 # 4 m m #3 0 m TLCS-900H1 CPU CP src1, src2 < Compare 比較 > 動 作 : src1 − src2. 説 明 : src1 の内容と src2 の内容が比較され、その結果がフラグレジスタ F に反映されます。 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ ○ ニモニック × ○ CP CP CP コード R, r r, #3 r, # 1 1 z z 1 r 1 1 1 1 0 R 1 1 0 z 1 r 1 1 0 1 1 #3 1 1 z z 1 r 1 1 0 0 1 1 1 1 m m m #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ ○ ○ ○ ○ ○ × CP CP CP<W> R, (mem) (mem), R (mem), # 1 m z z m 1 1 1 1 0 1 m z z m 1 1 1 1 1 1 m 0 z m m m m 0 0 1 1 1 1 1 1 #<7:0> #<15:8> 補 足 : オペランド中の #3 は、0~7 を示します。 Page 53 R m m m R TLCS-900H1 CPU フラグ : S Z H V N C 実行例 : S Z H V N C * * * * 1 * = 演算結果の最上位ビットの値がセットされます。 = 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0” がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。 = 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま す。 = “1” にセットされます。 = 演算結果、最上位ビットからボローが発生したときは “1”、それ以外のときは “0” がセッ トされます。 HL レジスタが 1234H, IX レジスタが 1234H のとき、 CP HL, IX を実行すると、Z フラグと N フラグは “1” にセットされ、S フラグと H フラグ、V フラグ、C フラグは “0” にクリアされます。 1234 HL 1234 IX 0000 ( Page 54 ) TLCS-900H1 CPU CPD src1, src2 < Compare decrement 逆方向のブロック部分サーチ > 動 作 : src1 − src2, BC ← BC − 1. 説 明 : src1 と src2 の内容が比較されます。その後、BC レジスタの内容が −1 されます。なお、src1 は A レジスタまたは WA レジスタに限られ、src2 のアドレッシングモードはポストデクリメントのレ ジスタ間接に限られます。 詳 細 : バイト サイズ ワード ロング ○ ○ × 補 足 : ニモニック [A/WA, (R −)] CPD 1 0 0 z 0 0 0 0 1 0 R 1 1 0 [ ] の内側のオペランドの記述を省略すると、“A, (XHL −)” を指定したことになります。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * * * 1 – = “src1 − src2” の演算結果の最上位ビットの値がセットされます。 = “src1 − src2” の演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = “src1 − src2” の演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以 外のときは “0” がセットされます。 = 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま す。 = “1” にセットされます。 = 変化なし。 XIX レジスタが 00123456H, BC レジスタが 0200H のとき、 CPD A, (XIX −) を実行すると、A レジスタの内容と 123456H 番地の内容が比較され、XIX レジスタは 00123455H, BC レジスタは 01FFH になります。 Page 55 TLCS-900H1 CPU CPDR src1, src2 < Compare decrement repeat 逆方向のブロックサーチ > 動 作 : src1 − src2, BC ← BC − 1, repeat until src1 = src2 or BC = 0. 説 明 : src1 と src2 の内容が比較されます。その後、BC レジスタの内容が −1 され、src1 = src2 または BC = 0 でなければ、再び前記動作を繰り返します。なお、src1 は A レジスタまたは WA レジスタに限 られ、src2 のアドレッシングモードはポストデクリメントのレジスタ間接に限られます。 詳 細 : バイト サイズ ワード ロング ○ ○ × 補 足 : ニモニック [A/WA, (R −)] CPDR 1 0 0 z 0 0 0 0 1 0 R 1 1 1 [ ] の内側のオペランドの記述を省略すると、“A, (XHL −)” を指定したことになります。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * * * 1 – = “src1 − src2” の演算結果の最上位ビットの値がセットされます。 = “src1 − src2” の演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = “src1 − src2” の演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以 外のときは “0” がセットされます。 = 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま す。 = “1” にセットされます。 = 変化なし。 A レジスタが 55H, XIX レジスタが 00123456H, BC レジスタが 0003H で、 メモリの 123456H 番地の内容が 11H, メモリの 123455H 番地の内容が 22H メモリの 123454H 番地の内容が 33H のとき、 CPDR A, (XIX −) を実行すると、メモリの 123456H 番地 , 123455 番地 , 123454H 番地をリードした後、この命令の 実行が “BC = 0” の条件で終了し、XIX レジスタは 00123453H, BC レジスタは 0000H になります。 Page 56 TLCS-900H1 CPU CPI src1, src2 < Compare increment 正方向のブロック部分サーチ > 動 作 : src1 − src2, BC ← BC − 1. 説 明 : src1 と src2 の内容が比較されます。その後、BC レジスタの内容が −1 されます。なお、src1 は A レジスタまたは WA レジスタに限られ、src2 のアドレッシングモードはポストインクリメントの レジスタ間接に限られます。 詳 細 : バイト サイズ ワード ロング ニモニック ○ ○ × コード [A/WA, (R +) ] CPI 1 0 0 z 0 0 0 0 1 0 R 1 0 0 補 足 : [ ] の内側のオペランドの記述を省略すると、“A, (XHL +)” を指定したことになります。 フラグ : S Z H V N C 実行例 : S Z H V N C * * * * 1 – = “src1 − src2” の演算結果の最上位ビットの値がセットされます。 = “src1 − src2” の演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = “src1 − src2” の演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以 外のときは “0” がセットされます。 = 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま す。 = “1” にセットされます。 = 変化なし。 XIX レジスタが 00123456H, BC レジスタが 0200H のとき、 CPI A, (XIX +) を実行すると、A レジスタの内容と 123456H 番地の内容が比較され、XIX レジスタは 00123457H, BC レジスタは 01FFH になります。 Page 57 TLCS-900H1 CPU CPIR src1, src2 < Compare increment repeat 正方向のブロックサーチ > 動 作 : src1 − src2, BC ← BC − 1, repeat until src1 = src2 or BC = 0. 説 明 : src1 と src2 の内容が比較されます。その後、BC レジスタの内容が −1 され、src1 = src2 または BC = 0 でなければ、再び前記動作を繰り返します。なお、src1 は A レジスタまたは WA レジスタに限 られ、src2 のアドレッシングモードはポストインクリメントのレジスタ間接に限られます。 詳 細 : バイト サイズ ワード ロング ○ ○ × 補 足 : ニモニック [A/WA, (R +)] CPIR 1 0 0 z 0 0 0 0 1 0 R 1 0 1 [ ] の内側のオペランドの記述を省略すると、“A, (XHL +)” を指定したことになります。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * * * 1 – = “src1 − src2” の演算結果の最上位ビットの値がセットされます。 = “src1 − src2” の演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = “src1 − src2” の演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以 外のときは “0” がセットされます。 = 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま す。 = “1” にセットされます。 = 変化なし。 A レジスタが 33H, XIX レジスタが 00123456H, BC レジスタが 0200H で、 メモリの 123456H 番地の内容が 11H, メモリの 123457H 番地の内容が 22H メモリの 123458H 番地の内容が 33H のとき、 CPIR A, (XIX +) を実行すると、メモリの 123456H 番地 , 123457 番地 , 123458H 番地をリードした後、この命令の 実行が “src1 = src2” の条件で終了し、XIX レジスタは 00123459H, BC レジスタは 01FDH になり ます。 Page 58 TLCS-900H1 CPU CPL dst < Complement 1 の補数 > 動 作 : dst ← dst の 1 の補数 説 明 : dst の 1 の補数 ( 各ビットの 0/1 反転 ) 値が、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ニモニック ○ ○ × CPL フラグ : S Z H V N C 実行例 : = = = = = = コード r S Z H V N C – – 1 – 1 – 1 1 0 z 1 0 0 0 0 0 変化なし。 変化なし。 “1” にセットされます。 変化なし。 “1” にセットされます。 変化なし。 WA レジスタが 1234H のとき、 CPL WA を実行すると、WA レジスタは EDCBH になります。 0001 0010 0011 0100 WA ( ) 1110 1101 1100 1011 WA ( ) Page 59 r 1 1 0 TLCS-900H1 CPU DAA dst < Decimal adjust accumulator 10 進補正 > 動 作 : dst ← dst の 10 進補正 説 明 : dst の内容が C フラグと H フラグ、N フラグの状態により、10 進補正されます。この命令は、加 算命令または減算命令の後に、その演算結果を 2 進化 10 進 (BCD) 表現に補正するためのもので す。 詳 細 : バイト サイズ ワード ロング ○ × × 演算 ADD ADC SUB SBC NEG 補 足 : ニモニック DAA コード r 1 1 0 0 1 0 0 0 1 0 DAA 命令を DAA 命令を DAA 命令を dst の下位 dst の上位 実行する前 実行する前 実行する前 4 ビット 4 ビット の H フラグ の N フラグ の C フラグ r 0 0 0 加算 される数 DAA 命令を 実行した後 の C フラグ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0~9 0~8 0~9 A~F 9~F A~F 0~2 0~2 0~3 0 0 1 0 0 1 0 0 1 0~9 A~F 0~3 0~9 A~F 0~3 0~9 A~F 0~3 00 06 06 60 66 66 60 66 66 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0~9 0~8 7~F 6~F 0 1 0 1 0~9 6~F 0~9 6~F 00 FA A0 9A 0 0 1 1 “INC” または “DEC” 命令の演算に対しては、10 進補正できません。これらの命令では、C フ ラグが変化しないからです。 Page 60 TLCS-900H1 CPU フラグ : S Z H V N C 実行例 : S Z H V N C * * * * – * = 演算結果の最上位ビットの値がセットされます。 = 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、ビット 3 からビット 4 へキャリーが発生したときは “1”、それ以外のときは “0” がセットされます。 = 演算結果のパリティ (“1” の数 ) が偶数のときは “1”、奇数のときは “0” がセットされま す。 = 変化なし。 = 演算結果、最上位ビットからキャリーが発生した場合、または演算前にキャリーが “1” であった場合は “1”、それ以外のときは “0” にセットされます。 A レジスタが 59H で、B レジスタが 13H のとき、 ADD A, B DAA A を実行すると、A レジスタは 72H になります。 Page 61 TLCS-900H1 CPU DEC num, dst < Decrement 減少 > 動 作 : dst ← dst − num. 説 明 : dst の内容から num の内容が減算され、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ 補 足 : ○ ニモニック × DEC #3, r DEC<W> #3, (mem) 1 1 z z 1 r 0 1 1 0 1 #3 1 m 0 z m 0 1 1 0 1 m m m #3 オペランド中の #3 は 1~8 を示し、オブジェクトコードは 1~7, 0 に対応します。 フラグ : S Z H V N C () 実行例 : コード S Z H V N C * * * * 1 – = 演算結果の最上位ビットの値がセットされます。 = 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま す。 = “1” にセットされます。 = 変化なし。 “DEC #3, r” でオペランドサイズがワードまたはロングの場合は、すべてのフラグは変 化しません。 HL レジスタが 5678H のとき、 DEC 4, HL を実行すると、HL レジスタは 5674H になります。 Page 62 TLCS-900H1 CPU DECF < Decrement register file pointer レジスタバンクの −1 切り替え > 動 作 : RFP<1:0> ← RFP<1:0> − 1. 説 明 : ステータスレジスタ SR 内のレジスタファイルポインタ RFP<1:0> の内容が −1 されます。 詳 細 : ニモニック コード DECF フラグ : S Z H V N C 実行例 : = = = = = = 0 S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 RFP<1:0> の内容が “2” のとき、 DECF を実行すると、RFP<1:0> の内容は “1” になります。 Page 63 0 0 0 1 1 0 1 TLCS-900H1 CPU DI < Disable interrupt 割り込み禁止 > 動 作 : IFF<2:0> ← 7. 説 明 : ステータスレジスタ SR 中の割り込み許可フラグ IFF<2:0> の内容が “7” になります。この命令 の実行後、割り込みは、ノンマスカブル割り込み ( 割り込み要求レベルが “7” のもの ) しか受け 付けなくなります。 詳 細 : ニモニック コード DI フラグ : S Z H V N C = = = = = = S Z H V N C – – – – – – 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 注 ) 本 CPU は、命令実行ユニットとバスインタフェースユニットが分かれています。そのため、割 り込み要求フラグをクリアする命令をフェッチしたのと同時期に割り込み発生を CPU が受け付 けた場合、割り込みベクタを割り込みコントローラからリードするまでの間に要求フラグをクリ アするということがあり得ます。この場合、CPU は要因消滅ベクタの割り込み処理を行います。 この現象を回避するため、割り込み要求フラグをクリアするときは、DI 命令の後に実行するよ うにしてください。 Page 64 TLCS-900H1 CPU DIV dst, src < Divide 符号なし除算 > 動 作 : dst< 下位半分 > ← dst ÷ src, dst< 上位半分 > ← 余り ( 符号なし ) 説 明 : dst の内容が src の内容で符号なし除算され、商が dst の下位半分へ、余りが dst の上位半分へ転 送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ニモニック × DIV コード RR, r DIV rr, # 1 1 0 z 1 r 0 1 0 1 0 R 1 1 0 z 1 r 0 0 0 0 1 0 1 0 m m m #<7:0> #<15:8> ○ ○ × DIV RR, (mem) 1 m 0 z m 0 1 0 1 0 R 注 ) RR については次ページ参照 補 足 : 演算サイズがバイトのときは、“dst ( 下位バイト ) ← dst ( ワード ) ÷ src ( バイト )、dst ( 上位バイ ト ) ← 余り ”、 演算サイズがワードのときは、“dst ( 下位ワード ) ← dst ( ロング ) ÷ src ( ワード )、dst ( 上位ワー ド ) ← 余り ” になります。オペランドの dst の記述は、被除数のサイズに合わせてください。 オーバフローしたとき (V フラグが “1” にセットされたとき ) は、dst へは不定値がセットされ ています。 フラグ : S Z H V N C S Z H V N C – – – V – – = = = = 変化なし。 変化なし。 変化なし。 0 で割った場合、または商が格納用 dst のビット長で表現できる数を超えた場合は “1”、そ れ以外のときは “0” がセットされます。 = 変化なし。 = 変化なし。 Page 65 TLCS-900H1 CPU 実行例 : XIX レジスタが 12345678H で、IY レジスタが 89ABH のとき、 DIV XIX, IY を実行すると、商は 21DAH, 余りは 0FDAH となり、XIX レジスタは 0FDA21DAH になります。 注 意 : “DIV RR, r” と “DIV RR, (mem)” 命令の RR は、下記に示す表のようになります。 演算サイズがバイト 演算サイズがワード (8 ビット ← 16 ビット ÷ 8 ビット ) (16 ビット ← 32 ビット ÷ 16 ビット ) RR コード R RR WA 001 XWA 000 BC 011 XBC 001 DE 101 XDE 010 HL 111 XHL 011 XIX 100 XIY 101 XIZ 110 XSP 111 IX IY IZ 指定不可 SP コード R CPU がミニマムモードのときは、XWA, XBC, XDE, XHL は使えません。 “DIV rr, #” 命令の rr は、下記に示す表のようになります。 演算サイズがバイト (8 ビット ← 16 ビット ÷ 8 ビット ) 演算サイズがワード (16 ビット ← 32 ビット ÷ 16 ビット ) rr コード r rr WA 001 XWA コード r 000 BC 011 XBC 001 DE 101 XDE 010 HL 111 XHL 011 IX C7H:F0H XIX 100 IY C7H:F4H XIY 101 IZ C7H:F8H XIZ 110 SP C7H:FCH XSP 111 CPU がミニマムモードのときは、XWA, XBC, XDE, XHL は使えません。 その他のロングワードレジスタも拡張 コード方式ですべて指定可能。 1 バイト目 2 バイト目 その他のワードレジスタも IX~SP と 同様の拡張コード方式で、すべて指定 可能。 Page 66 TLCS-900H1 CPU DIVS dst, src < Divide signed 符号付き除算 > 動 作 : dst< 下位半分 > ← dst ÷ src, dst< 上位半分 > ← 余り ( 符号付き ) 説 明 : dst の内容が src の内容で符号付き除算され、商が dst の下位半分へ、余りが dst の上位半分へ転 送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ニモニック × DIVS コード RR, r DIVS rr, # 1 1 0 z 1 r 0 1 0 1 1 R 1 1 0 z 1 r 0 0 0 0 1 0 1 1 m m m #<7:0> #<15:8> ○ ○ × DIVS RR, (mem) 1 m 0 z m 0 1 0 1 1 R 注 ) RR については次ページ参照 補 足 : 演算サイズがバイトのときは、“dst ( 下位バイト ) ← dst ( ワード ) ÷ src ( バイト )、dst ( 上位バイ ト ) ← 余り ”、 演算サイズがワードのときは、“dst ( 下位ワード ) ← dst ( ロング ) ÷ src ( ワード )、dst ( 上位ワー ド ) ← 余り ” になります。オペランドの dst の記述は、被除数のサイズに合わせてください。 なお、余りの符号は、被余数と同じになります。 オーバフローしたとき (V フラグが “1” にセットされたとき ) は、dst へは不定値がセットされ ています。 フラグ : S Z H V N C S Z H V N C – – – * – – = = = = 変化なし。 変化なし。 変化なし。 0 で割った場合、または、商が格納用 dst のビット長で表現できる数を超えた場合は “1”、 それ以外のときは “0” がセットされます。 = 変化なし。 = 変化なし。 Page 67 TLCS-900H1 CPU 実行例 : XIX レジスタが 12345678H で、IY レジスタが 89ABH のとき、 DIV XIX, IY を実行すると、余りは 16EEH、商は D89EH となり、XIX レジスタは 16EED89EH になります。 注 意 : “DIVS RR, r” と “DIVS RR, (MEM)” 命令の RR は、下記に示す表のようになります。 演算サイズがバイト 演算サイズがワード (8 ビット ← 16 ビット ÷ 8 ビット ) (16 ビット ← 32 ビット ÷ 16 ビット ) RR コード R RR WA 001 XWA 000 BC 011 XBC 001 DE 101 XDE 010 HL 111 XHL 011 XIX 100 XIY 101 XIZ 110 XSP 111 IX IY IZ 指定不可 SP コード R CPU がミニマムモードのときは、XWA, XBC, XDE, XHL は使えません。 “DIVS rr, #” 命令の rr は、下記に示す表のようになります。 演算サイズがバイト 演算サイズがワード (8 ビット ← 16 ビット ÷ 8 ビット ) (16 ビット ← 32 ビット ÷ 16 ビット ) rr コード r rr WA 001 XWA コード r 000 BC 011 XBC 001 DE 101 XDE 010 HL 111 XHL 011 IX C7H:F0H XIX 100 IY C7H:F4H XIY 101 IZ C7H:F8H XIZ 110 SP C7H:FCH XSP 111 CPU がミニマムモードのときは、XWA, XBC, XDE, XHL は使えません。 その他のロングワードレジスタも拡張 コード方式ですべて指定可能。 1 バイト目 2 バイト目 その他のワードレジスタも IX~SP と 同様の拡張コード方式で、すべて指定 可能。 Page 68 TLCS-900H1 CPU DJNZ dst1, dst2 < Decrement and jump if non zero 減少 & ジャンプノンゼロ > 動 作 : dst1 ← dst1 − 1. if dst1 ≠ 0 then PC ← dst2. 説 明 : dst1 の内容が −1 され、その値がゼロでなければ、dst2 で示されたプログラム番地へ相対ジャン プします。 詳 細 : バイト サイズ ワード ロング ニモニック ○ ○ × コード [r, ]$ + 3/4 + d8 DJNZ 1 1 0 z 1 0 0 0 1 1 r 1 0 0 d<7:0> 注 ) r が拡張コードで指定されるときは $ + 4 + d8、それ以外のときは $ + 3 + d8 となります。 補 足 : [ ] の内側のオペランドの “r,” の記述を省略すると、B レジスタが指定されたものと解釈されま す。 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 A レジスタが 12H で、W レジスタが 03H のとき、 LOOP : ADD A, A DJNZ W, LOOP を実行すると、3 回ループして、A レジスタは 24H → 48H → 90H, W レジスタは 02H → 01H → 00H になります。 Page 69 TLCS-900H1 CPU EI num < Enable interrupt 割り込み許可 > 動 作 : IFF<2:0> ← num. 説 明 : ステータスレジスタ SR 中の割り込み許可フラグ IFF<2:0> の内容が、num になります。この命令 の実行後、CPU の割り込み受け付けレベルは num になります。 詳 細 : ニモニック EI 補 足 : コード [#3] 0 0 0 0 0 0 0 0 0 0 1 1 0 #3 オペランドの値は、0~7 まで指定できます。オペランドの記述を省略すると、“EI 0” と認識され ます。 フラグ : S Z H V N C = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 Page 70 TLCS-900H1 CPU EX dst, src < Exchange 交換 > 動 作 : dst ↔ src. 説 明 : dst の内容と src の内容が、交換されます。 詳 細 : バイト サイズ ワード ロング ○ × × EX F, F’ 0 0 0 1 0 ○ ○ × EX R, r 1 1 z z 1 r 1 0 1 1 1 R 1 m z z m 0 0 1 1 0 ○ ○ ニモニック × EX フラグ : S Z H V N C = = = = = = コード (mem), r S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 注 ) “EX F, F’ ” を実行すると、フラグはすべて変化します。 実行例 : A レジスタが 12H で、B レジスタが 34H のとき、 EX A, B を実行すると、A レジスタは 34H、B レジスタは 12H になります。 12 A 34 B ( ) 34 A 12 B ( ) Page 71 1 m 1 m R 0 m TLCS-900H1 CPU EXTS dst < Extend sign 符号拡張 > 動 作 : dst< 上位半分 > ← dst< 下位半分 > の符号ビット 説 明 : dst の下位半分の符号ビット ( オペランドサイズがワードのときはビット 7, ロングワードのとき はビット 15) が、dst の上位半分の全ビットに転送 ( コピー ) されます。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ ○ EXTS r フラグ : S Z H V N C 実行例 : = = = = = = コード S Z H V N C – – – – – – 1 1 z z 1 0 0 0 1 0 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 HL レジスタが 6789H のとき、 EXTS HL を実行すると、HL レジスタは FF89H になります。 15 0 8 7 1 1 0 0 1 1 1 1 8 7 1 1 1 1 1 1 1 1 15 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 HL ( ) HL ( ) 0 Page 72 r 0 1 1 TLCS-900H1 CPU EXTZ dst < Extend zero ゼロ拡張 > 動 作 : dst< 上位半分 > ← 0. 説 明 : dst の上位半分がゼロにクリアされます。通常オペランドサイズが異なる演算を行う前、オペラ ンドサイズをそろえるために使用します。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ ○ EXTZ フラグ : S Z H V N C 実行例 : = = = = = = コード r S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 HL レジスタが 6789H のとき、 EXTZ HL を実行すると、HL レジスタは 0089H になります。 XIX レジスタが 12345678H のとき、 EXTZ XIX を実行すると、XIX レジスタは 00005678H になります。 Page 73 1 1 z z 1 0 0 0 1 0 r 0 1 0 TLCS-900H1 CPU HALT < Halt CPU の停止 > 動 作 : CPU の停止 説 明 : 命令の実行が停止されます。再開は、割り込みを受け付けることによって行われます。 詳 細 : ニモニック コード HALT フラグ : S Z H V N C = = = = = = 0 S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 Page 74 0 0 0 0 1 0 1 TLCS-900H1 CPU INC num, dst < Increment 増加 > 動 作 : dst ← dst + num. 説 明 : dst の内容と num の内容が加算され、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ 補 足 : ○ ニモニック × INC コード #3, r INC<W> #3, (mem) 1 1 z z 1 r 0 1 1 0 0 #3 1 m 0 z m 0 1 1 0 0 m m m #3 オペランド中の #3 は 1~8 を示し、オブジェクトコードは 1~7, 0 に対応します。 フラグ : S Z H V N C S Z H V N C * * * * 0 – = 演算結果の最上位ビットの値がセットされます。 = 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、ビット 3 からビット 4 へキャリーが発生したときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま す。 = “0” にクリアされます。 = 変化なし。 注 ) “INC #3, r” でオペランドサイズがワードまたはロングの場合は、すべてのフラグは変化しませ ん。 実行例 : WA レジスタが 1234H のとき、 INC 5, WA を実行すると、WA レジスタは 1239H になります。 Page 75 TLCS-900H1 CPU INCF < Increment register file pointer レジスタバンクの +1 切り替え > 動 作 : RFP<1:0> ← RFP<1:0> + 1. 説 明 : ステータスレジスタ SP 内のレジスタファイルポインタ RFP<1:0> の内容が +1 されます。 詳 細 : ニモニック コード INCF フラグ : S Z H V N C 実行例 : = = = = = = 0 S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 RFP<1:0> の内容が “2” のとき、 INCF を実行すると、RFP<1:0> の内容は “3” になります。 Page 76 0 0 0 1 1 0 0 TLCS-900H1 CPU JP condition, dst < Jump ジャンプ > 動 作 : if cc が真 then PC ← dst. 説 明 : オペランドのコンディションが真の場合、dst で示されたプログラム番地へジャンプします。 詳 細 : ニモニック JP コード #16 0 0 0 1 1 0 1 0 0 1 1 m m m c c #<7:0> #<15:8> JP #24 0 0 0 1 1 #<7:0> #<15:8> #<23:16> JP フラグ : S Z H V N C 実行例 : = = = = = = [cc, ]mem S Z H V N C – – – – – – 1 m 1 1 1 1 0 1 m 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 下記の命令、 JP 2000H を実行すると、無条件で 2000H 番地へジャンプします。 XIX レジスタが 00123456H で、 JP C, XIX + 2 を実行すると、キャリーフラグの値が “1” の場合、123458H 番地へジャンプします。 注 ) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリードしま すが、その内容は読み捨てられます。 Page 77 TLCS-900H1 CPU JR condition, dst < Jump relative 相対ジャンプ > 動 作 : if cc が真 then PC ← dst. 説 明 : オペランドのコンディションが真の場合、dst で示されたプログラム番地へ相対ジャンプします。 詳 細 : ニモニック コード [cc, ]$ + 2 + d8 JR 0 1 1 0 c c c c d<7:0> [cc, ]$ + 3 + d16 JRL 0 1 1 1 d<7:0> d<15:8> フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 2000H 番地のメモリにある下記の命令、 JR 2078H を実行すると、無条件で 2078H 番地へ相対ジャンプします。 なお、上記命令のオブジェクトコードは、68H:76H になります。 6 8 7 6 2000H 2001H (OP ) (Displacement) JR 2078H 注 ) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリードしま すが、その内容は読み捨てられます。 Page 78 TLCS-900H1 CPU LD dst, src < Load 転送 > 動 作 : dst ← src. 説 明 : src の内容が、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ ○ ○ ○ ニモニック ○ ○ ○ LD LD LD LD コード R, r r, R r, #3 R, # 1 1 z z 1 r 1 0 0 0 1 R 1 1 z z 1 r 1 0 0 1 1 R 1 1 z z 1 r 1 0 1 0 1 #3 0 z z z 0 R #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ LD r, # 1 1 z z 1 0 0 0 0 0 r 0 1 1 m m m #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ ○ ○ ○ ○ ○ × LD LD LD <W> R, (mem) (mem), R (#8), # 1 m z z m 0 0 1 0 0 1 m 1 1 m 0 1 z z 0 0 0 0 0 1 #8 #<7:0> #<15:8> Page 79 R m m m R 0 z 0 TLCS-900H1 CPU バイト サイズ ワード ロング ニモニック ○ ○ × LD<W> コード (mem), # 1 m 1 1 m m m m 0 0 0 0 0 0 z 0 #<7:0> #<15:8> ○ ○ × LD<W> (#16), (mem) 1 m 0 z m m m m 0 0 0 1 1 0 0 1 #16<7:0> #16<15:8> ○ ○ × LD<W> (mem), (#16) 1 m 1 1 m m m m 0 0 0 1 0 1 z 0 #16<7:0> #16<15:8> フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 DE レジスタが 4567H のとき、 LD IX, DE を実行すると、IX レジスタは 4567H になります。 4567 DE 4567 IX Page 80 TLCS-900H1 CPU LDA dst, src < Load address 実効アドレスの転送 > 動 作 : dst ← src の実効アドレス値 説 明 : src の実効アドレス値が、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング × ○ ○ 補 足 : ニモニック LDA R, mem 1 m 1 1 m 0 0 1 s 0 m m m R 本命令は、ADD 命令と動作が似ていますが、dst の指定が src の指定とは別にできる点が特長で す。主に、C コンパイラなどでポインタを扱う場合に使用します。 フラグ : S Z H V N C 実行例 : コード = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 XIY レジスタが 00123456H で LDA XIX, XIY + 33H を実行すると、XIX レジスタは 00123489H になります。 00123456 33 00123489 XIY Displacement XIX 注 ) アドレスとしては、24 ビット分のみ使用することができます。 Page 81 TLCS-900H1 CPU LDAR dst, src < Load address relative 相対アドレスの転送 > 動 作 : dst ← src の相対アドレス値 説 明 : src で指定された相対アドレス値が、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ ○ コード R, $ + 4 + d16 LDAR 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 d<7:0> d<15:8> 0 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 0 1 s 0 R 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 1000H 番地のメモリにある下記の命令、 LDAR XIX, $ + 1345H を実行すると、XIX レジスタは 00002345H になります。“$” は、その命令が置かれている先頭番 地を示します。 なお、上記命令のオブジェクトコードは、F3H:13H:41H:13H:34H になります。 00001000 $ 1345 00002345 Displacement XIX Page 82 TLCS-900H1 CPU LDC dst, src < Load control コントロールレジスタの転送 > 動 作 : dst ← src. 説 明 : src の内容が、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ニモニック ○ ○ ○ LDC コード cr, r 1 1 z z 1 0 0 1 0 1 r 1 1 0 cr ○ ○ ○ LDC r, cr 1 1 z z 1 0 0 1 0 1 cr フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 WA レジスタが 1234H のとき、 LDC DMAC0, WA を実行すると、コントロールレジスタ DMAC0 は 1234H になります。 Page 83 r 1 1 1 TLCS-900H1 CPU LDCF num, src < Load carry flag キャリーフラグへの 1 ビット転送 > 動 作 : CY ← src<num>. 説 明 : src のビット num の内容が、キャリーフラグ CY へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ○ × ○ 補 足 : × ニモニック × × × LDCF コード #4, r LDCF A, r LDCF #3, (mem) LDCF A, (mem) 1 1 0 z 1 r 0 0 1 0 0 0 0 0 0 1 1 0 z 1 0 0 1 0 1 0 1 1 1 m 1 1 m m m m 1 0 0 1 1 1 m 1 1 m m m m 0 0 1 0 1 0 1 1 0 1 # 4 1 r #3 ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし て使われます。オペランドがバイトのとき、ビット num の下位 4 ビットの値が 8~15 の場合、キャ リーフラグの値は不定になります。 フラグ : S Z H V N C = = = = = = S Z H V N C – – – – – * 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 src のビット num の内容がセットされます。 Page 84 TLCS-900H1 CPU 実行例 : 100 番地のメモリの内容が 01000000B (2 進数 ) のとき、 LDCF 6, (100H) を実行すると、キャリーフラグは 1 になります。 7 6 5 4 3 2 1 0 0 1 0 0 0 0 0 0 1 Page 85 100 TLCS-900H1 CPU LDD dst, src < Load decrement 逆方向のブロック部分転送 > 動 作 : dst ← src, BC ← BC − 1. 説 明 : src の内容が、dst へ転送されます。その後、BC レジスタの内容が −1 されます。なお、src およ び dst のアドレッシングモードはポストデクリメントのレジスタ間接に限られます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ニモニック × LDD<W> LDD<W> コード [(XDE −), (XHL −)] (XIX −), (XIY −) 1 0 0 z 0 0 1 1 0 0 0 1 0 0 1 0 1 0 0 z 0 1 0 1 0 0 0 1 0 0 1 0 注 ) [ ] はその内側の記述が省略可能であることを示しています。 フラグ : S Z H V N C 実行例 : S Z H V N C – – 0 * 0 – = = = = 変化なし。 変化なし。 “0” にクリアされます。 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま す。 = “0” にクリアされます。 = 変化なし。 XIX レジスタが 00123456H で、XIY レジスタが 00335577H で BC レジスタが 0700H のとき、 LDD (XIX −), (XIY −) を実行すると、335577H 番地の内容が 123456H 番地へ転送され、XIX レジスタは 123455H, XIY レジスタは 00335576H, BC レジスタは 06FFH になります。 Page 86 TLCS-900H1 CPU LDDR dst, src < Load decrement repeat 逆方向のブロック転送 > 動 作 : dst ← src, BC ← BC − 1, repeat until BC = 0. 説 明 : src の内容が、dst へ転送されます。その後、BC レジスタの内容が −1 され、その値が 0 でなけれ ば、再び前記動作を繰り返します。なお、src および dst のアドレッシングモードはポストデクリ メントのレジスタ間接に限られます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ニモニック × コード LDDR<W> [(XDE −), (XHL −)] LDDR<W> (XIX −), (XIY −) 1 0 0 z 0 0 1 1 0 0 0 1 0 0 1 1 1 0 0 z 0 1 0 1 0 0 0 1 0 0 1 1 注 ) [ ] はその内側の記述が省略可能であることを示しています。 補 足 : 割り込み要求は、1 データを転送するごとにサンプリングされます。 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – 0 0 0 – 変化なし。 変化なし。 “0” にクリアされます。 “0” にクリアされます。 “0” にクリアされます。 変化なし。 XIX レジスタが 00123456H で、XIY レジスタが 00335577H で、BC レジスタが 0003H のとき、 LDDR (XIX −), (XIY −) を実行すると、 335577H 番地の内容が 123456H 番地へ、 335576H 番地の内容が 123455H 番地へ、 335575H 番地の内容が 123454H 番地へ 転送され、XIX レジスタは 00123453H, XIY レジスタは 00335574H, BC レジスタは 0000H になり ます。 注 ) BC レジスタの値が0になった際もメモリリードが行われますが、この内容は読み捨てられます。 上記例では、335574H 番地が該当します。 Page 87 TLCS-900H1 CPU LDF num < Load register file pointer レジスタバンクの設定 > 動 作 : RFP<1:0> ← num. 説 明 : num の値が、ステータスレジスタ SR 内のレジスタファイルポインタ RFP<1:0> へ転送されます。 詳 細 : ニモニック LDF 補 足 : コード #2 オペランドの値は、0~3 まで指定できます。 フラグ : S Z H V N C = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 Page 88 0 0 0 1 0 1 0 0 0 0 0 0 1 1 # 2 TLCS-900H1 CPU LDI dst, src < Load increment 正方向のブロック部分転送 > 動 作 : dst ← src, BC ← BC − 1. 説 明 : src の内容が、dst へ転送されます。その後、BC レジスタの内容が −1 されます。なお、src およ び dst のアドレッシングモードはポストインクリメントのレジスタ間接に限られます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ニモニック × コード LDI<W> [(XDE +), (XHL +)] LDI<W> (XIX +), (XIY +) 1 0 0 z 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 z 0 1 0 1 0 0 0 1 0 0 0 0 注 ) [ ] はその内側の記述が省略可能であることを示しています。 フラグ : S Z H V N C 実行例 : S Z H V N C – – 0 * 0 – = = = = 変化なし。 変化なし。 “0” にクリアされます。 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま す。 = “0” にクリアされます。 = 変化なし。 XIX レジスタが 00123456H で、XIY レジスタが 00335577H で BC レジスタが 0700H のとき、 LDI (XIX +), (XIY +) を実行すると、335577H 番地の内容が 123456H 番地へ転送され、XIX レジスタは 00123457H、 XIY レジスタは 00335578H、BC レジスタは 06FFH になります。 Page 89 TLCS-900H1 CPU LDIR dst, src < Load increment repeat 正方向のブロック転送 > 動 作 : dst ← src, BC ← BC − 1, repeat until BC = 0. 説 明 : src の内容が、dst へ転送されます。その後、BC レジスタの内容が −1 され、その値が 0 でなけれ ば、再び前記動作を繰り返します。なお、src および dst のアドレッシングモードはポストインク リメントのレジスタ間接に限られます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ニモニック × LDIR<W> LDIR<W> コード [(XDE +), (XHL +)] (XIX +), (XIY +) 1 0 0 z 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 z 0 1 0 1 0 0 0 1 0 0 0 1 注 ) [ ] はその内側の記述が省略可能であることを示しています。 補 足 : 割り込み要求は、1 データを転送するごとにサンプリングされます。 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – 0 0 0 – 変化なし。 変化なし。 “0” にクリアされます。 “0” にクリアされます。 “0” にクリアされます。 変化なし。 XIX レジスタが 00123456H で、XIY レジスタが 00335577H で、BC レジスタが 0003H のとき、 LDIR (XIX +), (XIY +) を実行すると、 335577H 番地の内容が 123456H 番地へ、 335578H 番地の内容が 123457H 番地へ、 335579H 番地の内容が 123458H 番地へ、 転送され、XIX レジスタは 00123459H、XIY レジスタは 0033557AH, BC レジスタは 0000H にな ります。 注 ) BC レジスタの値が0になった際もメモリリードが行われますが、この内容は読み捨てられます。 上記例では、335580H 番地が該当します。 Page 90 TLCS-900H1 CPU LINK dst, num < Link スタックフレームの生成 > 動 作 : (− XSP) ← dst, dst ← XSP, XSP ← XSP + num. 説 明 : dst の内容がスタック領域へ退避されます。次に、スタックポインタ XSP の内容が dst へ転送さ れます。最後にスタックポインタ XSP の内容と num の内容 ( 符号付き ) が加算され、スタック ポインタ XSP へ転送されます。この命令はスタック領域にローカルな変数エリアを −num バイ ト分だけ確保するときに使用します。 詳 細 : バイト サイズ ワード ニモニック ロング × × ○ LINK コード r, d16 1 1 1 0 1 0 0 0 0 1 r 1 0 0 d<7:0> d<15:8> フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 スタックポインタ XSP が 280H で、XIZ レジスタが 290H のとき、 LINK XIZ, −40H を実行すると、メモリの 27CH 番地にデータ 00000290H ( ロングデータ ) が書き込まれ、XIZ レ ジスタは 27CH に、スタックポインタ XSP は 23CH になります。 LINK 23CH: XSP UNLK (40H 280H: XSP 290H: XIZ XIZ 27CH: Page 91 ) XIZ TLCS-900H1 CPU MDEC1 num, dst < Modulo decrement 1 モジュロ減少 1 > 動 作 : if (dst mod num) = 0 then dst ← dst + (num − 1) else dst ← dst − 1. 説 明 : dst のモジュロ num が 0 の場合、dst に num − 1 が加算されます。それ以外の場合、dst から 1 が 減算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用します。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ × MDEC1 コード #, r 1 1 0 1 1 0 0 1 1 1 #<7:0> r 1 0 0 1 #<15:8> 補 足 : オペランドの # は、2 の n 乗 (n = 1~15) の値に限られます。 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 IX レジスタを 1230H~1237H の範囲内で循環デクリメントする例です。 IX レジスタが 1231H のとき、 MDEC1 8, IX を実行すると、IX レジスタは 1230H になり、再び MDEC1 8, IX を実行すると、IX レジスタのモジュロ 8 (8 で割った余り ) が 0 なので、IX レジスタに 8 − 1 が加 算され、IX レジスタは 1237H になります。 1230H 1237H Page 92 TLCS-900H1 CPU MDEC2 num, dst < Modulo decrement 2 モジュロ減少 2 > 動 作 : if (dst mod num) = 0 then dst ← dst + (num − 2) else dst ← dst − 2. 説 明 : dst のモジュロ num が 0 の場合、dst に num − 2 が加算されます。それ以外の場合、dst から 2 が 減算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用します。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ × MDEC2 コード #, r 1 1 0 1 1 0 0 1 1 1 #<7:0> r 1 0 1 2 #<15:8> 補 足 : オペランドの # は、2 の n 乗 (n = 2~15) の値に限られます。 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 IX レジスタを 1238H~123FH の範囲内で循環デクリメントする例です。 IX レジスタが 123AH のとき、 MDEC2 8, IX を実行すると、IX レジスタは 1238H になり、再び MDEC2 8, IX を実行すると、IX レジスタのモジュロ 8 (8 で割った余り ) が 0 なので、IX レジスタに 8 − 2 が加 算され、IX レジスタは 123EH になります。 1238H 123FH Page 93 TLCS-900H1 CPU MDEC4 num, dst < Modulo decrement 4 モジュロ減少 4 > 動 作 : if (dst mod num) = 0 then dst ← dst + (num − 4) else dst ← dst − 4. 説 明 : dst のモジュロ num が 0 の場合、dst に num − 4 が加算されます。それ以外の場合、dst から 4 が 減算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用します。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ × MDEC4 コード #, r 1 1 0 1 1 0 0 1 1 1 #<7:0> r 1 1 0 4 #<15:8> 補 足 : オペランドの # は、2 の n 乗 (n = 3~15) の値に限られます。 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 IX レジスタを 1280H~12FFH の範囲内で循環デクリメントする例です。 IX レジスタが 1284H のとき、 MDEC4 80H, IX を実行すると、IX レジスタは 1280H になり、再び MDEC4 80H, IX を実行すると、IX レジスタのモジュロ 80H (80H で割った余り ) が 0 なので、IX レジスタに 80H − 4 が加算され、IX レジスタは 12FCH になります。 1280H 12FFH Page 94 TLCS-900H1 CPU MINC1 num, dst < Modulo increment 1 モジュロ増加 1 > 動 作 : if (dst mod num) = (num − 1) then dst ← dst − (num − 1) else dst ← dst + 1. 説 明 : dst のモジュロ num が num − 1 の場合、dst から num − 1 が減算されます。それ以外の場合、dst に 1 が加算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用し ます。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ × MINC1 コード #, r 1 1 0 1 1 0 0 1 1 1 #<7:0> r 0 0 0 1 #<15:8> 補 足 : オペランドの # は、2 の n 乗 (n = 1~15) の値に限られます。 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 IX レジスタを 1200H~1207H の範囲内で循環インクリメントする例です。 IX レジスタが 1206H のとき、 MINC1 8, IX を実行すると、IX レジスタは 1207H になり、再び MINC1 8, IX を実行すると、IX レジスタのモジュロ 8 (8 で割った余り ) が 8 − 1 なので、IX レジスタから 8 − 1 が減算され、IX レジスタは 1200H になります。 1200H 1207H Page 95 TLCS-900H1 CPU MINC2 num, dst < Modulo increment 2 モジュロ増加 2 > 動 作 : if (dst mod num) = (num − 2) then dst ← dst − (num − 2) else dst ← dst + 2. 説 明 : dst のモジュロ num が num − 2 の場合、dst から num − 2 が減算されます。それ以外の場合、dst に 2 が加算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用し ます。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ × MINC2 コード #, r 1 1 0 1 1 0 0 1 1 1 #<7:0> r 0 0 1 2 #<15:8> 補 足 : オペランドの # は、2 の n 乗 (n = 2~15) の値に限られます。 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 IX レジスタを 1230H~1237H の範囲内で循環インクリメントする例です。 IX レジスタが 1234H のとき、 MINC2 8, IX を実行すると、IX レジスタは 1236H になり、再び MINC2 8, IX を実行すると、IX レジスタのモジュロ 8 (8 で割った余り ) が 8 − 2 なので、IX レジスタから 8 − 2 が減算され、IX レジスタは 1230H になります。 1230H 1237H Page 96 TLCS-900H1 CPU MINC4 num, dst < Modulo increment 4 モジュロ増加 4 > 動 作 : if (dst mod num) = (num − 4) then dst ← dst − (num − 4) else dst ← dst + 4. 説 明 : dst のモジュロ num が num − 4 の場合、dst から num − 4 が減算されます。それ以外の場合、dst に 4 が加算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用し ます。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ × MINC4 コード #, r 1 1 0 1 1 0 0 1 1 1 #<7:0> r 0 1 0 4 #<15:8> 補 足 : オペランドの # は、2 の n 乗 (n = 3~15) の値に限られます。 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 IX レジスタを 1240H~127FH の範囲内で循環インクリメントする例です。 IX レジスタが 1278H のとき、 MINC4 40H, IX を実行すると、IX レジスタは 127CH になり、再び MINC4 40H, IX を実行すると、IX レジスタのモジュロ 40H (40H で割った余り ) が 40H − 4 なので、IX レジスタ から 40H − 4 が減算され、IX レジスタは 1240H になります。 1240H 127FH Page 97 TLCS-900H1 CPU MIRR dst < Mirror ミラー交換 > 動 作 : dst<MSB:LSB> ← dst<LSB:MSB>. 説 明 : dst の内容が、ビットパターンのイメージでミラー交換されます。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ × MIRR r フラグ : S Z H V N C 実行例 : = = = = = = コード S Z H V N C – – – – – – 1 1 0 1 1 0 0 0 1 0 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 HL レジスタが 0001 0010 0011 0100B (2 進数 ) のとき、 MIRR HL を実行すると、HL レジスタは 0010 1100 0100 1000B (2 進数 ) になります。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 HL ( ) 0 0 1 0 1 1 0 0 0 1 0 0 1 0 0 0 HL ( ) Page 98 r 1 1 0 TLCS-900H1 CPU MUL dst, src < Multiply 符号なし乗算 > 動 作 : dst ← dst< 下位半分 > × src ( 符号なし ) 説 明 : dst の下位半分の内容と src の内容が符号なし乗算され、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ニモニック MUL × コード RR, r MUL rr, # 1 1 0 z 1 r 0 1 0 0 0 R 1 1 0 z 1 r 0 0 0 0 1 0 0 0 m m m #<7:0> #<15:8> ○ 補 足 : ○ × MUL 1 m 0 z m 0 1 0 0 0 R 演算サイズがバイトのときは、“dst ( ワード ) ← dst ( バイト ) × src ( バイト )”、演算サイズがワー ドのときは、“dst ( ロング ) ← dst ( ワード ) × src ( ワード )” になります。オペランドの dst の記 述は、演算結果のサイズに合わせてください。 フラグ : S Z H V N C 実行例 : RR, (mem) = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 IX レジスタが 1234H で、IY レジスタが 89ABH のとき、 MUL XIX, IY を実行すると、IX レジスタの内容と IY レジスタの内容が符号なし乗算され、XIX レジスタ は 09C9FCBCH になります。 Page 99 TLCS-900H1 CPU 注 意 : “MUL RR, r” と “MUL RR, (mem)” 命令の RR は、下記に示す表のようになります。 演算サイズがバイト 演算サイズがワード (16 ビット ← 8 ビット × 8 ビット ) (32 ビット ← 16 ビット × 16 ビット ) RR コード R RR WA 001 XWA 000 BC 011 XBC 001 DE 101 XDE 010 HL 111 XHL 011 XIX 100 XIY 101 XIZ 110 XSP 111 IX IY IZ 指定不可 SP コード R “MUL rr, #” 命令の rr は、下記に示す表のようになります。 演算サイズがバイト 演算サイズがワード (16 ビット ← 8 ビット × 8 ビット ) (32 ビット ← 16 ビット × 16 ビット ) rr コード r rr WA 001 XWA コード r 000 BC 011 XBC 001 DE 101 XDE 010 HL 111 XHL 011 IX C7H:F0H XIX 100 IY C7H:F4H XIY 101 IZ C7H:F8H XIZ 110 SP C7H:FCH XSP 111 その他のロングワードレジスタも拡張 コード方式ですべて指定可能。 1 バイト目 2 バイト目 その他のワードレジスタも IX~SP と 同様の拡張コード方式で、すべて指定 可能。 Page 100 TLCS-900H1 CPU MULA dst < Multiply and add 符号付き積和演算 > 動 作 : dst ← dst + (XDE) × (XHL), XHL ← XHL − 2. 説 明 : XDE レジスタで示されたメモリデータ (16 ビット ) と XHL レジスタで示されたメモリデータ (16 ビット ) の内容が符号付き乗算され、その結果 (32 ビット ) と dst の内容 (32 ビット ) が加算 され、dst (32 ビット ) へ転送されます。その後、XHL レジスタの内容が −2 されます。 詳 細 : バイト サイズ ワード ロング × ○ × 補 足 : ニモニック MULA rr 1 1 0 1 1 0 0 0 1 1 r 0 0 1 オペランドの dst の記述は、演算結果のサイズ ( ロング ) に合わせてください。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * – * – – = = = = 演算結果の最上位ビットの値がセットされます。 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 変化なし。 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま す。 = 変化なし。 = 変化なし。 XIX レジスタが 50000000H で、XDE レジスタが 100H, XHL が 200H, 100H 番地のメモリの内容 ( ワード ) が 1234H, 200H 番地のメモリの内容 ( ワード ) が 89ABH のとき、 MULA XIX を実行すると、XIX レジスタは 4795FCBCH、XHL レジスタは 1FEH になります。 (XDE) 1234 89AB (XHL) 50000000 XIX 4795FCBC XIX Page 101 TLCS-900H1 CPU MULS dst, src < Multiply signed 符号付き乗算 > 動 作 : dst ← dst< 下位半分 > × src ( 符号付き ) 説 明 : dst の下位半分の内容と src の内容が符号付き乗算され、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ニモニック MULS × コード RR, r MULS rr, # 1 1 0 z 1 r 0 1 0 0 1 R 1 1 0 z 1 r 0 0 0 0 1 0 0 1 m m m #<7:0> #<15:8> ○ 補 足 : ○ × MULS 1 m 0 z m 0 1 0 0 1 R 演算サイズがバイトのときは、“dst ( ワード ) ← dst ( バイト ) × src ( バイト )”、演算サイズがワー ドのときは、“dst ( ロング ) ← dst ( ワード ) × src ( ワード )” になります。オペランドの dst の記 述は、演算結果のサイズに合わせてください。 フラグ : S Z H V N C 実行例 : RR, (mem) = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 IX レジスタが 1234H で、IY レジスタが 89ABH のとき、 MULS XIX, IY を実行すると、IX レジスタの内容と IY レジスタの内容が符号付き乗算され、XIX レジスタ は F795FCBCH になります。 Page 102 TLCS-900H1 CPU 注 意 : “MULS RR, r” と “MULS RR, (mem)” 命令の RR は、下記に示す表のようになります。 演算サイズがバイト 演算サイズがワード (16 ビット ← 8 ビット × 8 ビット ) (32 ビット ← 16 ビット × 16 ビット ) RR コード R RR WA 001 XWA 000 BC 011 XBC 001 DE 101 XDE 010 HL 111 XHL 011 XIX 100 XIY 101 XIZ 110 XSP 111 IX IY IZ 指定不可 SP コード R “MULS rr, #” 命令の rr は、下記に示す表のようになります。 演算サイズがバイト 演算サイズがワード (16 ビット ← 8 ビット × 8 ビット ) (32 ビット ← 16 ビット × 16 ビット ) rr コード r rr WA 001 XWA コード r 000 BC 011 XBC 001 DE 101 XDE 010 HL 111 XHL 011 IX C7H:F0H XIX 100 IY C7H:F4H XIY 101 IZ C7H:F8H XIZ 110 SP C7H:FCH XSP 111 その他のロングワードレジスタも拡張 コード方式ですべて指定可能。 1 バイト目 2 バイト目 その他のワードレジスタも IX~SP と 同様の拡張コード方式で、すべて指定 可能。 Page 103 TLCS-900H1 CPU NEG dst < Negate 2 の補数 > 動 作 : dst ← 0 − dst. 説 明 : ゼロから dst の内容が減算され、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ニモニック ○ ○ × NEG フラグ : S Z H V N C 実行例 : コード r S Z H V N C * * * * 1 * 1 1 0 z 1 0 0 0 0 0 r 1 1 1 = 演算結果の最上位ビットの値がセットされます。 = 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま す。 = “1” にセットされます。 = 演算結果、最上位ビットからボローが発生したときは “1”、それ以外のときは “0” がセッ トされます。 IX レジスタ 0002H のとき、 NEG IX を実行すると、IX レジスタは FFFEH になります。 0000 ( 0002 IX FFFE IX Page 104 ) TLCS-900H1 CPU NOP < No operation 何もしない > 動 作 : 何もしない 説 明 : 何もせず、次の命令の実行に移ります。この命令は、オブジェクトコードが 00H です。 詳 細 : ニモニック コード NOP フラグ : S Z H V N C = = = = = = 0 S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 Page 105 0 0 0 0 0 0 0 TLCS-900H1 CPU OR dst, src < Or 論理和 > 動 作 : dst ← dst OR src. 説 明 : dst の内容と src の内容が論理和演算され、dst へ転送されます。 ( 真理値表 ) A B A OR B 0 0 0 0 1 1 1 0 1 1 1 1 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ニモニック ○ OR OR コード R, r r, # 1 1 z z 1 r 1 1 1 0 0 R 1 1 z z 1 r 1 1 0 0 1 1 1 0 m m m #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ ○ ○ ○ ○ ○ × OR OR OR<W> R, (mem) (mem), R (mem), # 1 m z z m 1 1 1 0 0 1 m z z m 1 1 1 0 1 1 m 0 z m m m m 0 0 1 1 1 1 1 0 #<7:0> #<15:8> Page 106 R m m m R TLCS-900H1 CPU フラグ : S Z H V N C 実行例 : S Z H V N C * * 0 * 0 0 = = = = 演算結果の最上位ビットの値がセットされます。 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にセットされます。 演算結果のパリティ (“1” の数 ) が偶数のときは “1”、奇数のときは “0” がセットされま す。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。 = “0” にクリアされます。 = “0” にクリアされます。 HL レジスタが 7350H, IX レジスタが 3456H のとき、 OR HL, IX を実行すると、HL レジスタは 7756H になります。 OR) 0111 0011 0101 0000 ← HL レジスタ ( 実行前 ) 0011 0100 0101 0110 ← IX レジスタ ( 実行前 ) 0111 0111 0101 0110 ← HL レジスタ ( 実行後 ) Page 107 TLCS-900H1 CPU ORCF num, src < Or carry flag キャリーフラグとの 1 ビット論理和 > 動 作 : CY ← CY OR src<num>. 説 明 : キャリーフラグ CY の内容と src のビット num の内容が論理和演算され、キャリーフラグ CY へ 転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ○ × ○ 補 足 : × ニモニック × × × ORCF コード #4, r ORCF A, r ORCF #3, (mem) ORCF A, (mem) 1 1 0 z 1 r 0 0 1 0 0 0 0 0 0 1 1 0 z 1 0 0 1 0 1 0 0 1 1 m 1 1 m m m m 1 0 0 0 1 1 m 1 1 m m m m 0 0 1 0 1 0 0 1 0 0 # 4 1 r #3 ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし て使われます。オペランドがバイトのとき、ビット num の下位の値が 8~15 の場合、演算結果は 不定になります。 フラグ : S Z H V N C = = = = = = S Z H V N C – – – – – * 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 キャリーフラグ CY の内容と src のビット num の内容の論理和演算された値がセットされ ます。 Page 108 TLCS-900H1 CPU 実行例 : 100 番地のメモリの内容が 01000000B (2 進数 ) で、キャリーフラグ CY が 0 のとき、 ORCF 6, (100H) を実行すると、キャリーフラグは 1 になります。 7 6 5 4 3 2 1 0 0 1 0 0 0 0 0 0 OR 100 0 ( ) 1 ( ) Page 109 TLCS-900H1 CPU PAA dst < Pointer adjust accumulator ポインタ偶数補正 > 動 作 : if dst <LSB> = 1 then dst ← dst + 1. 説 明 : dstのLSB (最下位ビット) が1の場合、dstに1が加算されます。dstのLSBが0の場合、何もしません。 この命令は、dst の内容を偶数にするためのものです。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ ○ PAA フラグ : S Z H V N C 実行例 : = = = = = = コード r S Z H V N C – – – – – – 1 1 z z 1 0 0 0 1 0 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 XIZ レジスタが 00234567H のとき、 PAA XIZ を実行すると、XIZ レジスタは +1 されて 00234568H になります。 Page 110 r 1 0 0 TLCS-900H1 CPU POP dst < Pop スタック領域からの転送 > 動 作 : dst ← (XSP +). バイト時 : dst ← (XSP), XSP ← XSP + 1 ワード時 : dst ← (XSP), XSP ← XSP + 2 ロング時 : dst ← (XSP), XSP ← XSP + 4 説 明 : まず、スタックポインタ XSP で示されたメモリ番地の内容が、dst へ転送されます。次に、ス タックポインタ XSP がオペランドサイズのバイト長だけ加算されます。 詳 細 : バイト サイズ ワード ロング ○ × × POP F 0 0 0 1 1 0 0 1 ○ × × POP A 0 0 0 1 0 1 0 1 × ○ ○ POP R 0 1 0 s 1 R ○ ○ ○ POP r 1 1 z z 1 r 0 0 0 0 0 1 0 1 1 m 1 1 m m m m 0 0 0 0 0 1 z 0 ○ ○ ニモニック × POP <W> フラグ : S Z H V N C = = = = = = コード (mem) S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 注 ) “POP F” を実行すると、フラグはすべて変化します。 Page 111 TLCS-900H1 CPU 実行例 : スタックポインタ XSP が 0100H で、100H 番地の内容が 56H、101H 番地の内容が 78H のとき、 POP IX を実行すると、IX レジスタは 7856H になります。また、スタックポインタ XSP は、0102H にな ります。 IX 78 56 56 100H 78 101H 102H Page 112 ( XSP) ( XSP) TLCS-900H1 CPU POP SR < Pop SR ステータスレジスタのスタック領域からの転送 > 動 作 : SR ← (XSP +). 説 明 : スタックポインタ XSP で示されたメモリ番地の内容が、ステータスレジスタへ転送されます。そ の後、スタックポインタ XSP の内容が +2 されます。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ × POP フラグ : S= Z= H= V= N= C= コード SR 0 S Z H V N C * * * * * * 0 0 0 0 0 1 1 スタックポインタ XSP で示されたメモリ番地の内容がセットされます。 注 ) この命令が実際に実行されるタイミングは、この命令がフェッチされるタイミングより、数ス テート遅れます。これは、本 CPU が命令キュー (12 バイト ) とパイプライン処理方式を採用し ているためです。 Page 113 TLCS-900H1 CPU PUSH SR < Push SR ステータスレジスタのスタック領域への転送 > 動 作 : (− XSP) ← SR. 説 明 : スタックポインタ XSP の内容が −2 されます。その後、ステータスレジスタ SR の内容が、スタッ クポインタ XSP で示されたメモリ番地へ転送されます。 詳 細 : バイト サイズ ワード ロング ニモニック × ○ × PUSH フラグ : S Z H V N C = = = = = = コード SR 0 S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 Page 114 0 0 0 0 0 1 0 TLCS-900H1 CPU PUSH src < Push スタック領域への転送 > 動 作 : (− XSP) ← src. バイト時 : XSP ← XSP − 1, (XSP) ← src ワード時 : XSP ← XSP − 2, (XSP) ← src ロング時 : XSP ← XSP − 4, (XSP) ← src 説 明 : まず、スタックポインタ XSP がオペランドサイズのバイト長だけ減算されます。次に、スタッ クポインタ XSP が示すメモリ番地へ、src の内容が転送されます。 詳 細 : バイト サイズ ワード ロング ○ × × PUSH F 0 0 0 1 1 0 0 0 ○ × × PUSH A 0 0 0 1 0 1 0 0 × ○ ○ PUSH R 0 0 1 s 1 R ○ ○ ○ PUSH r 1 1 z z 1 r 0 0 0 0 0 1 0 0 0 0 0 0 1 0 z 1 ○ ○ ニモニック × PUSH <W> コード # #<7:0> #<15:8> ○ ○ × PUSH <W> フラグ : S Z H V N C = = = = = = (mem) S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 Page 115 1 m 0 z m m m m 0 0 0 0 0 1 0 0 TLCS-900H1 CPU 実行例 : スタックポインタ XSP が 0100H で、HL レジスタが 1234H のとき、 PUSH HL を実行すると、00FEH 番地は 34H に、00FFH 番地は 12H になります。また、スタックポインタ XSP は、00FEH になります。 HL 12 34 34 0FEH 12 0FFH 100H Page 116 ( XSP) ( XSP) TLCS-900H1 CPU RCF < Reset carry flag キャリーフラグのリセット > 動 作 : CY ← 0. 説 明 : キャリーフラグ CY が 0 にリセットされます。 詳 細 : ニモニック コード RCF フラグ : S Z H V N C = = = = = = 0 S Z H V N C – – 0 – 0 0 変化なし。 変化なし。 “0” にリセットされます。 変化なし。 “0” にリセットされます。 “0” にリセットされます。 Page 117 0 0 1 0 0 0 0 TLCS-900H1 CPU RES num, dst < Reset 1 ビットのリセット > 動 作 : dst<num> ← 0. 説 明 : dst のビット num が “0” にリセットされます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ × ニモニック RES × #4, r RES #3, (mem) フラグ : S Z H V N C 実行例 : = = = = = = コード S Z H V N C – – – – – – 1 1 0 z 1 0 0 1 1 0 0 0 0 0 1 m 1 1 m 1 0 1 1 0 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 100 番地のメモリの内容が 00100111B (2 進数 ) のとき、 RES 5, (100H) を実行すると、100 番地のメモリの内容は 00000111B (2 進数 ) になります。 7 6 0 0 5 4 3 2 1 0 0 0 1 1 1 0 Page 118 100 r 0 0 # 4 m m #3 0 m TLCS-900H1 CPU RET condition < Return リターン > 動 作 : if cc が真 then 32 ビット PC ← (XSP), XSP ← XSP + 4. 説 明 : オペランドのコンディションが真の場合、スタック領域からプログラムカウンタ PC へリターン アドレスが POP されます。 詳 細 : ニモニック コード RET RET フラグ : S Z H V N C 実行例 : = = = = = = cc S Z H V N C – – – – – – 0 0 0 0 1 1 1 0 1 0 1 1 0 0 0 0 1 1 1 1 c c 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 スタックポインタ XSP が 0FCH で、0FCH 番地のメモリの内容が 9000H ( ロングデータ ) のとき、 RET を実行すると、スタックポインタ XSP は 100H になり、 9000H 番地にジャンプ ( リターン ) します。 注 1) 原則として CALL 命令とセットで使用してください。 注 2) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリード しますが、その内容は読み捨てられます。 Page 119 TLCS-900H1 CPU RETD num < Return and deallocate リターン & パラメータ領域の削除 > 動 作 : 32 ビット PC ← (XSP), XSP ← XSP + 4, XSP ← XSP + num. 説 明 : まず、スタック領域からプログラムカウンタ PC へリターンアドレスが POP されます。次に、ス タックポインタ XSP に num ( 符号付き ) の値が加算されます。 詳 細 : ニモニック RETD コード d16 0 0 0 0 1 1 1 1 d<7:0> d<15:8> フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 スタックポインタ XSP が 0FCH で、0FCH 番地のメモリの内容が 9000H ( ロングデータ ) のとき、 RETD 8 を実行すると、スタックポインタ XSP は 0FCH + 4 + 8 → 108H になり、9000H 番地にジャンプ ( リターン ) します。 下記に、RETD 命令の活用例を示します。この例では、サブルーチンを呼ぶ前に 8 バイトのパラ メータをスタックに PUSH し、サブルーチン処理終了後、RETD 命令で、その使用済のパラメー タ領域を削除しています。 PUSH PUSH PUSH CALL 注 1) WA BC XIX SAMPLE SAMPLE: RETD 8 原則として CALL 命令とセットで使用してください。 注 2) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリード しますが、その内容は読み捨てられます。 Page 120 TLCS-900H1 CPU RETI < Return from interrupt 割り込み処理からのリターン > 動 作 : SR ← (XSP), 32 ビット PC ← (XSP + 2), XSP ← XSP + 6. 上記動作後、割り込みネスティングカウンタ INTNEST を -1 します。 説 明 : まず、スタック領域から「ステータスレジスタ SR とプログラムカウンタ PC」へデータが POP されます。 上記動作後、割り込みネスティングカウンタ INTNEST を -1 します。 詳 細 : ニモニック コード RETI フラグ : S Z H V N C 注 1) = = = = = = 0 S Z H V N C * * * * * * 0 0 0 0 1 1 1 スタック領域から POP した値になります。 スタック領域から POP した値になります。 スタック領域から POP した値になります。 スタック領域から POP した値になります。 スタック領域から POP した値になります。 スタック領域から POP した値になります。 原則として割り込み処理とセットで使用してください。 注 2) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリード しますが、その内容は読み捨てられます。 Page 121 TLCS-900H1 CPU RL num, dst < Rotate left キャリーフラグを含む左ローテート > 動 作 : {CY & dst ← CY & dst の左ローテート値 } Repeat num 回 説 明 : キャリーフラグ CY と dst の連結した内容が左へローテートされます。これが num 回繰り返され ます。 説明図 : dst CY MSB LSB 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ 補 足 : ○ ニモニック ○ × RL #4, r RL A, r RL<W> (mem) 1 1 z z 1 r 1 1 1 0 1 0 0 0 0 1 1 z z 1 1 1 1 1 1 0 1 0 1 m 0 z m m m m 0 1 1 1 1 0 1 0 0 1 # 4 0 r ローテート回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がローテー ト回数として使われます。0 を指定すると、16 回ローテートされます。 dst がメモリの場合、ローテート回数は 1 回に制限されます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * 0 * 0 * = = = = ローテート後の dst の最上位ビットの値がセットされます。 ローテート後のdstの内容がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にリセットされます。 ローテート後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセットされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。 = “0” にリセットされます。 = ローテート後の値がセットされます。 HL レジスタが 6230H で、キャリーフラグ CY が “1” のとき、 RL 4, HL を実行すると、HL レジスタは 230BH、キャリーフラグ CY は “0” になります。 Page 122 TLCS-900H1 CPU RLC num, dst < Rotate left without carry キャリーフラグを含まない左ローテート > 動 作 : {CY ← dst <MSB>、dst ← dst の左ローテート値 } Repeat num 回 説 明 : dst の MSB の内容がキャリーフラグ CY へ転送され、dst の内容が左へローテートされます。こ れが num 回繰り返されます。 説明図 : dst CY MSB LSB 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ 補 足 : ○ ニモニック ○ × RLC #4, r RLC A, r RLC<W> (mem) 1 1 z z 1 r 1 1 1 0 1 0 0 0 0 1 1 z z 1 1 1 1 1 1 0 0 0 1 m 0 z m m m m 0 1 1 1 1 0 0 0 0 0 # 4 0 r ローテート回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がローテー ト回数として使われます。0 を指定すると、16 回ローテートされます。 dst がメモリの場合、ローテート回数は 1 回に制限されます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * 0 * 0 * = = = = ローテート後の dst の最上位ビットの値がセットされます。 ローテート後のdstの内容がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にリセットされます。 ローテート後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセットされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。 = “0” にリセットされます。 = 最終のローテート前の dst の最上位ビットの値がセットされます。 HL レジスタが 1230H のとき、 RLC 4, HL を実行すると、HL レジスタは 2301H、キャリーフラグ CY は “1” になります。 Page 123 TLCS-900H1 CPU RLD dst1, dst2 < Rotate left digit 4 ビットの左回転 > 動 作 : dst1<3:0> ← dst2<7:4>, dst2<7:4> ← dst2<3:0>, dst2<3:0> ← dst1<3:0>. 説 明 : dst1 の下位 4 ビットと、dst2 の内容が、4 ビット単位で左へローテートされます。 説明図 : dst1 7 4 dst2 3 0 7 4 3 0 詳 細 : バイト サイズ ワード ロング ニモニック ○ × × RLD フラグ : S Z H V N C 実行例 : コード [A, ] (mem) S Z H V N C * * 0 * 0 – 1 m 0 0 m m m m 0 0 0 0 0 1 1 0 = ローテート後の A レジスタの最上位ビットの値がセットされます。 = ローテート後の A レジスタの内容がゼロのときは “1”、それ以外のときは “0” がセット されます。 = “0” にリセットされます。 = ローテート後、A レジスタのパリティ (“1” の数 ) が偶数のときは “1”、それ以外のとき は “0” がセットされます。 = “0” にリセットされます。 = 変化なし。 A レジスタが 12H で、100H 番地のメモリの内容が 34H のとき、 RLD A, (100H) を実行すると、A レジスタは 13H, 100 番地のメモリの内容は 42H になります。 Page 124 TLCS-900H1 CPU RR num, dst < Rotate right キャリーフラグを含む右ローテート > 動 作 : {CY & dst ← CY & dst の右ローテート値 } Repeat num 回 説 明 : キャリーフラグ CY と dst の連結した内容が右へローテートされます。これが num 回繰り返され ます。 説明図 : dst MSB LSB CY 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ 補 足 : ○ ニモニック ○ × RR #4, r RR A, r RR<W> (mem) 1 1 z z 1 r 1 1 1 0 1 0 0 0 0 1 1 z z 1 1 1 1 1 1 0 1 1 1 m 0 z m m m m 0 1 1 1 1 0 1 1 0 1 # 4 1 r ローテート回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がローテー ト回数として使われます。0 を指定すると、16 回ローテートされます。 dst がメモリの場合、ローテート回数は 1 回に制限されます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * 0 * 0 * = = = = ローテート後の dst の最上位ビットの値がセットされます。 ローテート後のdstの内容がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にリセットされます。 ローテート後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセットされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。 = “0” にリセットされます。 = ローテート後の値がセットされます。 HL レジスタが 6230H で、キャリーフラグ CY が “1” のとき、 RR 4, HL を実行すると、HL レジスタは 1623H、キャリーフラグ CY は “0” になります。 Page 125 TLCS-900H1 CPU RRC num, dst < Rotate right without carry キャリーフラグを含まない右ローテート > 動 作 : {CY ← dst<LSB>、dst ← dst の右ローテート値 } Repeat num 回 説 明 : dst の LSB の内容がキャリーフラグ CY へ転送され、dst の内容が右へローテートされます。これ が num 回繰り返されます。 説明図 : dst MSB LSB CY 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ 補 足 : ○ ニモニック ○ × RRC #4, r RRC A, r RRC<W> (mem) 1 1 z z 1 r 1 1 1 0 1 0 0 0 0 1 1 z z 1 1 1 1 1 1 0 0 1 1 m 0 z m m m m 0 1 1 1 1 0 0 1 0 0 # 4 1 r ローテート回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がローテー ト回数として使われます。0 を指定すると、16 回ローテートされます。 dst がメモリの場合、ローテート回数は 1 回に制限されます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * 0 * 0 * = = = = ローテート後の dst の最上位ビットの値がセットされます。 ローテート後のdstの内容がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にリセットされます。 ローテート後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセットされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。 = “0” にリセットされます。 = 最終のローテート前の dst の最上位ビットの値がセットされます。 HL レジスタが 1230H のとき、 RRC 4, HL を実行すると、HL レジスタは 0123H、キャリーフラグ CY は “0” になります。 Page 126 TLCS-900H1 CPU RRD dst1, dst2 < Rotate right digit 4 ビットの右回転 > 動 作 : dst1<3:0> ← dst2<3:0>, dst2<7:4> ← dst1<3:0>, dst2<3:0> ← dst2<7:4>. 説 明 : dst1 の下位 4 ビットと、dst2 の内容が、4 ビット単位で右へローテートされます。 説明図 : dst1 7 4 dst2 3 0 7 4 3 0 詳 細 : バイト サイズ ワード ロング ニモニック ○ × × RRD フラグ : S Z H V N C 実行例 : コード [A,] (mem) S Z H V N C * * 0 * 0 – 1 m 0 0 m m m m 0 0 0 0 0 1 1 1 = ローテート後の A レジスタの最上位ビットの値がセットされます。 = ローテート後の A レジスタの内容がゼロのときは “1”、それ以外のときは “0” がセット されます。 = “0” にリセットされます。 = ローテート後、A レジスタのパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセットされます。 = “0” にリセットされます。 = 変化なし。 A レジスタが 12H で、100H 番地のメモリの内容が 34H のとき、 RRD A, (100H) を実行すると、A レジスタは 14H, 100 番地のメモリの内容は 23H になります。 Page 127 TLCS-900H1 CPU SBC dst, src < Subtract with carry キャリー付き減算 > 動 作 : dst ← dst − src − CY. 説 明 : dst の内容から src の内容とキャリーフラグ CY の内容が減算され、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ニモニック ○ SBC SBC コード R, r r, # 1 1 z z 1 r 1 0 1 1 0 R 1 1 z z 1 r 1 1 0 0 1 0 1 1 m m m #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ ○ ○ ○ ○ ○ × SBC SBC SBC <W> R, (mem) (mem), R (mem), # 1 m z z m 1 0 1 1 0 1 m z z m 1 0 1 1 1 1 m 0 z m m m m 0 0 1 1 1 0 1 1 #<7:0> #<15:8> Page 128 R m m m R TLCS-900H1 CPU フラグ : S Z H V N C 実行例 : S Z H V N C * * * * 1 * = 演算結果の最上位ビットの値がセットされます。 = 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0” がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。 = 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま す。 = “1” にセットされます。 = 演算結果、最上位ビットからボローが発生したときは “1”、それ以外のときは “0” がセッ トされます。 HL レジスタが 7654H, IX レジスタが 5000H, キャリーフラグ CY が 1 のとき、 SBC HL, IX を実行すると、HL レジスタは 2653H になります。 7654 HL 5000 IX 1 2653 Page 129 HL TLCS-900H1 CPU SCC condition, dst < Set condition code コンディションコードによる値のセット > 動 作 : if cc が真 then dst ← “1” else dst ← “0”. 説 明 : オペランドのコンディションが真の場合、“1” が dst へ転送され、偽の場合、“0” が dst へ転送さ れます。 詳 細 : バイト サイズ ワード ロング ニモニック ○ ○ × SCC フラグ : S Z H V N C 実行例 : = = = = = = コード cc, r S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 V フラグの内容が “1” のとき、 SCC OV, HL を実行すると、HL レジスタは 0001H になります。 Page 130 1 1 0 z 0 1 1 1 1 r c c TLCS-900H1 CPU SCF < Set carry flag キャリーフラグのセット > 動 作 : CY ← 1. 説 明 : キャリーフラグ CY が “1” にセットされます。 詳 細 : ニモニック コード SCF フラグ : S Z H V N C = = = = = = 0 S Z H V N C – – 0 – 0 1 変化なし。 変化なし。 “0” にリセットされます。 変化なし。 “0” にリセットされます。 “1” にセットされます。 Page 131 0 0 1 0 0 0 1 TLCS-900H1 CPU SET num, dst < Set 1 ビットのセット > 動 作 : dst<num> ← 1. 説 明 : dst のビット num が “1” にセットされます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ × ニモニック SET × #4, r SET #3, (mem) フラグ : S Z H V N C 実行例 : = = = = = = コード S Z H V N C – – – – – – 1 1 0 z 1 0 0 1 1 0 0 0 0 0 1 m 1 1 m 1 0 1 1 1 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 100 番地のメモリの内容が 00000000B (2 進数 ) のとき、 SET 5, (100H) を実行すると、100 番地のメモリの内容は 00100000B (2 進数 ) になります。 7 6 0 0 5 4 3 2 1 0 0 0 0 0 0 1 Page 132 100 r 0 0 # 4 m m #3 1 m TLCS-900H1 CPU SLA num, dst < Shift left arithmetic 算術左シフト > 動 作 : {CY ← dst<MSB>, dst ← dst の左シフト値、dst<LSB> ← 0} Repeat num 回 説 明 : dst の MSB の内容がキャリーフラグ CY へ転送され、dst の内容が左へシフトされ、0 が dst の LSB へ転送されます。これが num 回繰り返されます。 説明図 : dst CY MSB LSB "0" 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ 補 足 : ○ ニモニック ○ × SLA #4, r SLA A, r SLA<W> (mem) 1 1 z z 1 r 1 1 1 0 1 0 0 0 0 1 1 z z 1 1 1 1 1 1 1 0 0 1 m 0 z m m m m 0 1 1 1 1 1 0 0 1 0 # 4 0 r シフト回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がシフト回数 として使われます。0 を指定すると、16 回シフトされます。 dst がメモリの場合、シフト回数は 1 回に制限されます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * 0 * 0 * = = = = シフト後の dst の最上位ビットの値がセットされます。 シフト後の dst の内容がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にリセットされます。 シフト後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセッ トされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。 = “0” にリセットされます。 = 最終のシフト前の dst の最上位ビットの値がセットされます。 HL レジスタが 1234H のとき、 SLA 4, HL を実行すると、HL レジスタは 2340H、キャリーフラグ CY は “1” になります。 Page 133 TLCS-900H1 CPU SLL num, dst < Shift left logical 論理左シフト > 動 作 : {CY ← dst<MSB>, dst ← dst の左シフト値、dst <LSB> ← 0} Repeat num 回 説 明 : dst の MSB の内容がキャリーフラグ CY へ転送され、dst の内容が左へシフトされ、0 が dst の LSB へ転送されます。これが num 回繰り返されます。 説明図 : dst CY MSB LSB "0" 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ 補 足 : ○ ニモニック ○ × SLL #4, r SLL A, r SLL<W> (mem) 1 1 z z 1 r 1 1 1 0 1 0 0 0 0 1 1 z z 1 1 1 1 1 1 1 1 0 1 m 0 z m m m m 0 1 1 1 1 1 1 0 1 1 # 4 0 r シフト回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がシフト回数 として使われます。0 を指定すると、16 回シフトされます。 dst がメモリの場合、シフト回数は 1 回に制限されます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * 0 * 0 * = = = = シフト後の dst の最上位ビットの値がセットされます。 シフト後の dst の内容がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にリセットされます。 シフト後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセッ トされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。 = “0” にリセットされます。 = 最終のシフト前の dst の最上位ビットの値がセットされます。 HL レジスタが 1234H のとき、 SLL 4, HL を実行すると、HL レジスタは 2340H、キャリーフラグ CY は “1” になります。 Page 134 TLCS-900H1 CPU SRA num, dst < Shift right arithmetic 算術右シフト > 動 作 : {CY ← dst<MSB>, dst ← dst の右シフト値、dst<MSB> は固定 } Repeat num 回 説 明 : dst の LSB の内容がキャリーフラグ CY へ転送され、dst の内容が右へシフト (MSB は固定 ) され ます。これが num 回繰り返されます。 説明図 : dst MSB LSB CY 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ 補 足 : ○ ニモニック ○ × SRA #4, r SRA A, r SRA<W> (mem) 1 1 z z 1 r 1 1 1 0 1 0 0 0 0 1 1 z z 1 1 1 1 1 1 1 0 1 1 m 0 z m m m m 0 1 1 1 1 1 0 1 1 0 # 4 1 r シフト回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がシフト回数 として使われます。0 を指定すると、16 回シフトされます。 dst がメモリの場合、シフト回数は 1 回に制限されます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * 0 * 0 * = = = = シフト後の dst の最上位ビットの値がセットされます。 シフト後の dst の内容がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にリセットされます。 シフト後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセッ トされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。 = “0” にリセットされます。 = 最終のシフト前の dst の最下位ビットの値がセットされます。 HL レジスタが 8230H のとき、 SRA 4, HL を実行すると、HL レジスタは F823H、キャリーフラグ CY は “0” になります。 Page 135 TLCS-900H1 CPU SRL num, dst < Shift right logical 論理右シフト > 動 作 : {CY ← dst<LSB>, dst ← dst の右シフト値 , dst<MSB> ← 0} Repeat num 回 説 明 : dst の LSB の内容がキャリーフラグ CY へ転送され、 dst の内容が右へシフトされ、 0 が dst の MSB へ転送されます。これが num 回繰り返されます。 説明図 : dst MSB "0" LSB CY 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ○ 補 足 : ○ ニモニック ○ × SRL #4, r SRL A, r SRL<W> (mem) 1 1 z z 1 r 1 1 1 0 1 0 0 0 0 1 1 z z 1 1 1 1 1 1 1 1 1 1 m 0 z m m m m 0 1 1 1 1 1 1 1 1 1 # 4 1 r シフト回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がシフト回数 として使われます。0 を指定すると、16 回シフトされます。 dst がメモリの場合、シフト回数は 1 回に制限されます。 フラグ : S Z H V N C 実行例 : コード S Z H V N C * * 0 * 0 * = = = = シフト後の dst の最上位ビットの値がセットされます。 シフト後の dst の内容がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にリセットされます。 シフト後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセッ トされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。 = “0” にリセットされます。 = 最終シフト前の dst の最下位ビットの値がセットされます。 HL レジスタが 1238H のとき、 SRL 4, HL を実行すると、HL レジスタは 0123H、キャリーフラグ CY は “1” になります。 Page 136 TLCS-900H1 CPU STCF num, dst < Store carry flag キャリーフラグからの 1 ビット転送 > 動 作 : dst<num> ← CY. 説 明 : キャリーフラグ CY の内容が、dst のビット num へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ○ × ○ 補 足 : × ニモニック STCF × #4, r STCF × A, r STCF × コード #3, (mem) STCF A, (mem) 1 1 0 z 1 r 0 0 1 0 0 0 0 0 0 1 1 0 z 1 0 0 1 0 1 1 0 0 1 m 1 1 m m m m 1 0 1 0 0 1 m 1 1 m m m m 0 0 1 0 1 1 0 0 1 0 # 4 0 r #3 ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし て使われます。オペランドがバイトのとき、ビット num の下位 4 ビットの値が 8~15 の場合、オ ペランドの値は変化しません。 フラグ : S Z H V N C = = = = = = S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 Page 137 TLCS-900H1 CPU 実行例 : 100 番地のメモリの内容が 00H で、キャリーフラグ CY が 1 のとき、 STCF 5, (100H) を実行すると、100 番地のメモリの内容は 00100000B (2 進数 ) になります。 7 6 0 0 5 4 3 2 1 0 0 0 0 0 0 1 Page 138 100 TLCS-900H1 CPU SUB dst, src < Subtract 減算 > 動 作 : dst ← dst − src. 説 明 : dst の内容から src の内容が減算され、dst へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ニモニック ○ SUB SUB コード R, r r, # 1 1 z z 1 r 1 0 1 0 0 R 1 1 z z 1 r 1 1 0 0 1 0 1 0 m m m #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ ○ ○ ○ ○ ○ × SUB SUB SUB <W> R, (mem) (mem), R (mem), # 1 m z z m 1 0 1 0 0 1 m z z m 1 0 1 0 1 1 m 0 z m m m m 0 0 1 1 1 0 1 0 #<7:0> #<15:8> Page 139 R m m m R TLCS-900H1 CPU フラグ : S Z H V N C 実行例 : S Z H V N C * * * * 1 * = 演算結果の最上位ビットの値がセットされます。 = 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 = 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0” がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。 = 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま す。 = “1” にセットされます。 = 演算結果、最上位ビットからボローが発生したときは “1”、それ以外のときは “0” がセッ トされます。 HL レジスタが 7654H, IX レジスタが 5000H のとき、 SUB HL, IX を実行すると、HL レジスタは 2654H になります。 7654 HL 5000 IX 2654 HL Page 140 TLCS-900H1 CPU SWI num < Software interrupt ソフトウエア割り込み > XSP ← XSP − 6. (XSP) ← SR. (XSP + 2) ← 32 ビット PC. PC ← (FFFF00H + num × 4). 動 作 : (1) (2) (3) (4) 説 明 : スタック領域へ、ステータスレジスタ SR の内容と、この SWI 命令の次の番地を示しているプロ グラムカウンタ PC の内容が退避され、“FFFF00H + num × 4” 番地の内容で示される飛び先へジャ ンプします。 詳 細 : ニモニック コード SWI [#3] 1 1 1 1 1 #3 補 足 : オペランドの値は、0~7 まで指定できます。オペランドの記述を省略すると、“SWI 7” と解釈さ れます。 参 考 : ステータスレジスタ SR の構成は下記のとおりです。 15 14 13 12 11 10 “1” IFF2 IFF1 IFF0 “1” “0” フラグ : S Z H V N C = = = = = = 9 8 RFP1 RFP0 7 6 5 4 3 2 1 0 S Z “0” H “0” V N C S Z H V N C – – – – – – 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 Page 141 TLCS-900H1 CPU 実行例 : スタックポインタ XSP が 1000H, ステータスレジスタ SR が 8800H で、128400H 番地のメモリに ある、 SWI 5 を実行すると、0FFAH 番地のメモリに旧ステータスレジスタ SR の内容 8800H が、0FFCH 番地 のメモリにプログラムカウンタ PC の内容 00128401H がライトされます。その後、FFFF14H 番地 のメモリの内容で示される飛び先 345678H 番地へジャンプします。 00 12 84 PC ( 01 ) 88 00 SR ( ) OFFAH ( 0FFBH 00 88 01 0FFCH 84 0FFDH 12 0FFEH 0FFFH 00 1000H ( FFFF00H ( ) "5" 4 (num 注 1) XSP) 4) FFFF14H 78 00 XSP) 34 56 78 PC ( FFFF14H 56 FFFF15H 34 FFFF16H 00 FFFF17H ) 割り込みレベルのマスクレジスタ値 (IFF) は変化しません。そのため、SWI 命令処理中によ りレベルの高い割り込みが発生した場合は、そちらの割り込みを受け付けます。 注 2) SWI1 は、 「要因消滅ベクタ」と同じテーブルに割り付けられています。SWI2 は、 「未定義命 令実行違反」と同じテーブルに割り付けられています。 Page 142 TLCS-900H1 CPU TSET num, dst < Test and set 1 ビットのテストとセット > 動 作 : Z フラグ ← dst <num> の反転値 dst <num> ← 1. 説 明 : dst のビット num の反転値が、Z フラグへ転送されます。その後、dst のビット num が “1” にセッ トされます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ × ニモニック TSET × #4, r TSET #3, (mem) フラグ : S Z H V N C 実行例 : = = = = = = コード S Z H V N C × * 1 × 0 – 1 1 z z 1 0 0 1 1 0 0 0 0 0 1 m 1 1 m 1 0 1 0 1 r 1 0 # 4 m m 0 m #3 不定値がセットされます。 src<num> の反転値がセットされます。 “1” にセットされます。 不定値がセットされます。 “0” にセットされます。 変化なし。 100 番地のメモリの内容が 00100000B (2 進数 ) のとき、 TSET 3, (100H) を実行すると、Z フラグは 1 になり、100H 番地のメモリの内容は 00101000B (2 進数 ) になります。 7 6 5 4 3 2 1 0 0 0 1 0 0 0 0 0 100H ( ) 0 100H ( ) 1 0 0 1 0 1 0 0 Z Page 143 TLCS-900H1 CPU UNLK dst < Unlink スタックフレームの削除 > 動 作 : XSP ← dst, dst ← (XSP +). 説 明 : dst の内容が、スタックポインタ XSP へ転送されます。その後、スタック領域からロングワード データが dst へ POP されます。この命令は、LINK 命令とペアで使用します。 詳 細 : バイト サイズ ワード ロング ニモニック × × ○ UNLK フラグ : S Z H V N C 実行例 : = = = = = = コード r S Z H V N C – – – – – – 1 1 1 0 1 0 0 0 0 1 r 1 0 1 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 LINK 命令実行後、 UNLK XIZ を実行すると、スタックポインタ XSP と XIZ レジスタは、LINK 命令実行前と同じ値になります ( 詳しくは、LINK 命令のページを参照してください )。 Page 144 TLCS-900H1 CPU XOR dst, src < Exclusive or 排他的論理和 > 動 作 : dst ← dst XOR src. 説 明 : dst の内容と src の内容が排他的論理和演算され、dst へ転送されます。 ( 真理値表 ) A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0 詳 細 : バイト サイズ ワード ロング ○ ○ ○ ○ ○ ニモニック ○ XOR XOR コード R, r r, # 1 1 z z 1 r 1 1 0 1 0 R 1 1 z z 1 r 1 1 0 0 1 1 0 1 m m m #<7:0> #<15:8> #<23:16> #<31:24> ○ ○ ○ ○ ○ ○ ○ ○ × XOR XOR XOR <W> R, (mem) (mem), R (mem), # 1 m z z m 1 1 0 1 0 1 m z z m 1 1 0 1 1 1 m 0 z m m m m 0 0 1 1 1 1 0 1 #<7:0> #<15:8> Page 145 R m m m R TLCS-900H1 CPU フラグ : S Z H V N C 実行例 : S Z H V N C * * 0 * 0 0 = = = = 演算結果の最上位ビットの値がセットされます。 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。 “0” にセットされます。 演算結果のパリティ (“1” の数 ) が偶数のときは “1”、奇数のときは “0” がセットされま す。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。 = “0” にクリアされます。 = “0” にクリアされます。 HL レジスタが 7350H, IX レジスタが 3456H のとき、 XOR HL, IX を実行すると、HL レジスタは 4706H になります。 XOR) 0111 0011 0101 0000 ← HL レジスタ ( 実行前 ) 0011 0100 0101 0110 ← IX レジスタ ( 実行前 ) 0100 0111 0000 0110 ← HL レジスタ ( 実行後 ) Page 146 TLCS-900H1 CPU XORCF num, src < Exclusive or carry flag キャリーフラグとの 1 ビット排他的論理和 > 動 作 : CY ← CY XOR src<num>. 説 明 : キャリーフラグ CY の内容と src のビット num の内容が排他的論理和演算され、キャリーフラグ CY へ転送されます。 詳 細 : バイト サイズ ワード ロング ○ ○ × ○ ○ ○ × ○ 補 足 : × ニモニック × × × XORCF コード #4, r XORCF A, r XORCF #3, (mem) XORCF A, (mem) 1 1 0 z 1 r 0 0 1 0 0 0 0 0 0 1 1 0 z 1 0 0 1 0 1 0 1 0 1 m 1 1 m m m m 1 0 0 1 0 1 m 1 1 m m m m 0 0 1 0 1 0 1 0 0 1 # 4 0 r #3 ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし て使われます。オペランドがバイトのとき、ビット num の下位 4 ビットの値が 8~15 の場合、演 算結果は不定になります。 フラグ : S Z H V N C = = = = = = S Z H V N C – – – – – * 変化なし。 変化なし。 変化なし。 変化なし。 変化なし。 キャリーフラグ CY の内容と src のビット num の内容の排他的論理和演算された値がセッ トされます。 Page 147 TLCS-900H1 CPU 実行例 : 100 番地のメモリの内容が 01000000B (2 進数 ) で、キャリーフラグ CY が 1 のとき、 XORCF 6, (100H) を実行すると、キャリーフラグは 0 になります。 7 6 5 4 3 2 1 0 0 1 0 0 0 0 0 0 XOR 100 1 ( ) 0 ( ) Page 148 TLCS-900H1 CPU ZCF < Zero flag to carry flag Z フラグをキャリーフラグへ転送 > 動 作 : CY ← Z フラグの反転値 説 明 : Z フラグの反転値が、キャリーフラグ CY へ転送されます。 詳 細 : ニモニック コード ZCF 0 フラグ : S Z H V N C 実行例 : = = = = = = S Z H V N C – – × – 0 * 変化なし。 変化なし。 不定値がセットされます。 変化なし。 “0” にリセットされます。 Z フラグの反転値がセットされます。 Z フラグが 0 のとき、 ZCF を実行すると、CY は 1 になります。 0 Z 1 Page 149 0 0 1 0 0 1 1 TLCS-900H1 CPU Page 150 TLCS-900H1 CPU 付録 B. 命令一覧表 ■ 本文中の記号の説明 1. サイズ欄 B オペランドサイズがバイト (8 ビット ) W オペランドサイズがワード (16 ビット ) L オペランドサイズがロング (32 ビット ) 2. ニモニック欄 R 8/16/32 ビットのカレントバンクレジスタを含む 8 本の汎用レジスタ 8 ビットの場合 : W, A, B, C, D, E, H, L 16 ビットの場合 : WA, BC, DE, HL, IX, IY, IZ, SP 32 ビットの場合 : XWA, XBC, XDE, XHL, XIX, XIY, XIZ, XSP r 8/16/32 ビットの汎用レジスタ cr 8/16/32 ビットの CPU の全コントロールレジスタ DMAS0~DMAS7, DMAD0~DMAD7, DMAC0~DMAC7, DMAM0~DMAM7, INTNEST A A レジスタ (8 ビット ) F フラグレジスタ (8 ビット ) F’ 裏フラグレジスタ (8 ビット ) SR ステータスレジスタ (16 ビット ) PC プログラムカウンタ (32 ビット ) (mem) 8/16/32 ビットのメモリ内のデータ mem 実効アドレス値 <W> オペランドサイズがワードのとき “W” の記述が必要であることを示します。 [] カッコ内のオペランドの記述が、省略できることを示します。 # 8/16/32 ビットの即値データ #3 3 ビットの即値データ ; 0~7 or 1~8 ................. 短縮コード用 #4 4 ビットの即値データ ; 0~15 or 1~16 d8 8 ビットのディスプレースメント ; −80H~+7FH d16 16 ビットのディスプレースメント ; −8000H~+7FFFH cc コンディションコード (#8) ダイレクトアドレッシング ; (00H)~(0FFH) .... 256 バイト空間 (#16) 64 K バイトエリアアドレッシング ; (0000H)~(0FFFFH) $ その命令が置かれている先頭アドレス Page 151 TLCS-900H1 CPU 3. コード欄 Z オペランドサイズを表す指定コードです。 バイト (8 ビット ) = 0 ワード (16 ビット ) = 2 ロング (32 ビット ) = 4 ZZ オペランドサイズを表す指定コードです。 バイト (8 ビット ) = 00H ワード (16 ビット ) = 10H ロング (32 ビット ) = 20H 4. フラグ欄 (SZHVNC) - フラグは変化しません。 * 命令の実行によって、フラグは変化します。 0 フラグは “0” にクリアされます。 1 フラグは “1” にセットされます。 P 命令の実行によって、フラグは変化します。( パリティフラグとして働きます ) V 命令の実行によって、フラグは変化します。( オーバフローフラグとして働きます ) X フラグには、不定値がセットされます。 5. 命令長欄 命令長を、バイト単位で示しています。 +# イミディエートデータ長を加えてください。 +M アドレッシングコード長を加えてください。 +#M イミディエートデータ長 + アドレッシングコード長を加えてください。 6. ステート欄 命令の実行処理時間を、ステート単位で、8 ビット , 16 ビット , 32 ビット処理の場合を順に示して います。 1 ステート = 50 ns @ 20 MHz なお、この命令一覧表で示されたステート数は以下のベスト条件のときの値です。 • データバス幅は 32 ビットである。 • バスサイクルは最短 (1 クロック ) である。 • メモリ上のデータは配置が最適である (2 バイトデータは偶数番地、4 バイトデータは 4 の倍数 番地に格納されている )。 Page 152 TLCS-900H1 CPU ■ 900/H1 命令一覧表 (1/10) (1) 転送 命令群 サイズ BWL BWL BWL BWL BWL BWL BWL LD LD LD LD LD LD LD BWBWBWBW- LD<W> LD<W> LD<W> LD<W> PUSH B-B--WL BWL BWBW- PUSH F PUSH A PUSH R PUSH r PUSH<W> # PUSH<W> (mem) POP B-B--WL BWL BW- POP POP POP POP POP<W> LDA -WL LDA LDAR -WL LDAR LD ニモニック R,r r,R r,#3 R,# r,# R,(mem) (mem),R コード (16 進 ) C8+zz+r C8+zz+r C8+zz+r 20+zz+R C8+zz+r 80+zz+mem B0+mem :88+R :98+R :A8+#3 :# :03:# :20+R :40+zz+R 機能 R←r r←R r ← #3 R←# r←# R ← (mem) (mem) ← R ------------------------------------ 命令長 ステート 1. 1. 1 2 1. 1. 1 2 1. 1. 1 2 1. 1. 1 1+# 1. 1. 1 2+# 2. 2. 2 2+M 2. 2. 2 2+M 08+z B0+mem 80+zz+mem B0+mem :#8:# :00+z:# :19:#16 :14+z:#16 (#8) ← # (mem) ← # (#16) ← (mem) (mem) ← (#16) --------------------- 2+# 2+M# 4+M 4+M 2. 2. 2. 2. 3. 3. 4. 4. - 18 14 18+zz+R C8+zz+r :04 09+z :# 80+zz+mem :04 (−XSP) ← F (−XSP) ← A (−XSP) ← R (−XSP) ← r (−XSP) ← # (−XSP) ← (mem) ------------------------------- 1 1 1 2 1+# 2+M 2. -. 2. -. -. 2. 2 3. 3. 3 2. 2. 4. 4. - 19 15 38+zz+R C8+zz+r B0+mem :05 :04+z F ← (XSP+) A ← (XSP+) R ← (XSP+) r ← (XSP+) (mem) ← (XSP+) ****** --------------------- 1 1 1 2 2+M 2. -. 2. -. -. 2. 2 3. 3. 3 5. 5. - R,mem B0+mem :10+zz+R R ← mem ------ 2+M -. 2. 2 R,$+4+d16 F3:13:d16 :20+zz+R R ← PC+d16 ------ 5 -. 2. 2 (#8),# (mem),# (#16),(mem) (mem),(#16) F A R r (mem) SZHVNC (2) 交換 コード (16 進 ) 命令群 サイズ ニモニック EX B-BWBW- EX EX EX F,F’ R,r (mem),R 16 C8+zz+r :B8+R 80+zz+mem :30+R MIRR -W- MIRR r D8+r :16 Page 153 機能 SZHVNC 命令長 ステート F ↔ F’ R↔r (mem) ↔ R ****** ----------- 1 2 2+M 1. -. 2. 2. 3. 3. - r<0:MSB> ← r<MSB:0> ------ 2 -. 2. - TLCS-900H1 CPU ■ 900/H1 命令一覧表 (2/10) (3) ブロック転送 / ブロックサーチ 命令群 サイズ BW- ニモニック LDI<W> [(XDE+),(XHL+)] コード (16 進 ) 83 + zz :10 85 + zz :10 機能 (XDE+) ← (XHL+) BC ← BC − 1 SZHVNC 命令長 ステート --0 (1) 0- 2 5. 5. - (XIX+) ← (XIY+) BC ← BC − 1 --0 (1) 0- 2 5. 5. - :11 repeat (XDE+) ← (XHL+) BC ← BC − 1 until BC = 0 --000- 2 2n + 6 --000- 2 2n + 6 BW- LDI<W> (XIX+),(XIY+) BW- LDIR<W> [(XDE+),(XHL+)] BW- LDIR<W> (XIX+),(XIY+) 85 + zz :11 repeat (XIX+) ← (XIY+) BC ← BC − 1 until BC = 0 BW- LDD<W> [(XDE−),(XHL−)] 83 + zz :12 (XDE−) ← (XHL−) BC ← BC − 1 --0 (1) 0- 2 5. 5. - BW- LDD<W> (XIX−),(XIY−) 85 + zz :12 (XIX−) ← (XIY−) BC ← BC − 1 --0 (1) 0- 2 5. 5. - BW- LDDR<W> [(XDE−),(XHL−)] :13 repeat (XDE−) ← (XHL−) BC ← BC − 1 until BC = 0 --000- 2 2n + 6 BW- LDDR<W> (XIX−),(XIY−) 85 + zz :13 repeat (XIX−) ← (XIY−) BC ← BC − 1 until BC = 0 --000- 2 2n + 6 BW- CPI 80 + zz + R :14 A/WA − (R+) BC ← BC − 1 *(2)*(1)1- 2 4. 4. - *(2)*(1)1- 2 4n + 4 LDxx [A/WA,(R+)] 83 + zz 83 + zz BW- CPIR [A/WA,(R+)] 80 + zz + R :15 repeat A/WA − (R+) BC ← BC − 1 until A/WA = (R) or BC = 0 BW- CPD [A/WA,(R−)] 80 + zz + R :16 A/WA − (R−) BC ← BC − 1 *(2)*(1)1- 2 4. 4. - 80 + zz + R :17 repeat A/WA − (R−) BC ← BC − 1 until A/WA = (R) or BC = 0 *(2)*(1)1- 2 4n + 4 CPxx BW- CPDR [A/WA,(R−)] 注 1) (1): 命令実行後 BC = 0 なら P/V フラグは “0” に、それ以外は “1” にセットされます。 (2): A/WA = (R) なら Z フラグは “1” に、それ以外は “0” にセットされます。 注 2) CPI, CPIR, CPD, CPDR 命令でオペランドを省略したときは、“A, (XHL+/−)” を指定したこと になります。 Page 154 TLCS-900H1 CPU ■ 900/H1 命令一覧表 (3/10) (4) 算術演算 命令群 コード (16 進 ) サイズ BWL BWL BWL BWL BW- ニモニック ADD R,r ADD r,# ADD R,(mem) ADD (mem),R ADD<W> (mem),# C8 + zz + r C8 + zz + r 80 + zz + mem 80 + zz + mem 80 + zz + mem :80 + R :C8:# :80 + R :88 + R :38:# 機能 R←R+r r←r+# R ← R + (mem) (mem) ← (mem) + R (mem) ← (mem) + # ***V0* ***V0* ***V0* ***V0* ***V0* 命令長 ステート 2 1. 1. 1 2+# 1. 1. 1 2+M 2. 2. 2 2+M 3. 3. 3 2 + M# 3. 3. - ADC BWL BWL BWL BWL BW- ADC ADC ADC ADC ADC<W> R,r r,# R,(mem) (mem),R (mem),# C8 + zz + r C8 + zz + r 80 + zz + mem 80 + zz + mem 80 + zz + mem :90 + R :C9:# :90 + R :98 + R :39:# R ← R + r + CY r ← r + # ++ CY R ← R + (mem) + CY (mem) ← (mem) + R + CY (mem) ← (mem) + # + CY ***V0* ***V0* ***V0* ***V0* ***V0* 2 2+# 2+M 2+M 2 + M# 1. 1. 1 1. 1. 1 2. 2. 2 3. 3. 3 3. 3. - SUB BWL BWL BWL BWL BW- SUB SUB SUB SUB SUB<W> R,r r,# R,(mem) (mem),R (mem),# C8 + zz + r C8 + zz + r 80 + zz + mem 80 + zz + mem 80 + zz + mem :A0 + R :CA:# :A0 + R :A8 + R :3A:# R←R-r r←r-# R ← R − (mem) (mem) ← (mem) − R (mem) ← (mem) − # ***V1* ***V1* ***V1* ***V1* ***V1* 2 2+# 2+M 2+M 2 + M# 1. 1. 1 1. 1. 1 2. 2. 2 3. 3. 3 3. 3. - SBC BWL BWL BWL BWL BW- SBC SBC SBC SBC SBC<W> R,r r,# R,(mem) (mem),R (mem),# C8 + zz + r C8 + zz + r 80 + zz + mem 80 + zz + mem 80 + zz + mem :B0 + R :CB:# :B0 + R :B8 + R :3B:# R ← R − r − CY r ← r − # − CY R ← R -(mem) − CY (mem) ← (mem) − R − CY (mem) ← (mem) − # − CY ***V1* ***V1* ***V1* ***V1* ***V1* 2 2+# 2+M 2+M 2 + M# 1. 1. 1 1. 1. 1 2. 2. 2 3. 3. 3 3. 3. - CP BWL BWBWL BWL BWL BW- CP CP CP CP CP CP<W> R,r r,#3 r,# R,(mem) (mem),R (mem),# C8 + zz + r C8 + zz + r C8 + zz + r 80 + zz + mem 80 + zz + mem 80 + zz + mem :F0 + R :D8 + #3 :CF:# :F0 + R :F8 + R :3F:# R−r r − #3 r−# R − (mem) (mem) − R (mem) − # ***V1* ***V1* ***V1* ***V1* ***V1* ***V1* 2 2 2+# 2+M 2+M 2 + M# 1. 1. 1 1. 1. 1. 1. 1 2. 2. 2 2. 2. 2 2. 2. - INC B--WL BW- INC #3,r INC #3,r INC<W> #3,(mem) C8 + r :60 + #3 C8 + zz + r :60 + #3 80 + zz + mem :60 + #3 r ← r + #3 r ← r + #3 (mem) ← (mem) + #3 ***V0-----***V0- 2 2 2+M 1. -. -. 1. 1 3. 3. - DEC B--WL BW- DEC #3,r DEC #3,r DEC<W> #3,(mem) C8 + r :68 + #3 C8 + zz + r :68 + #3 80 + zz + mem :68 + #3 r ← r − #3 r ← r − #3 (mem) ← (mem) − #3 ***V1-----***V1- 2 2 2+M 1. -. -. 1. 1 3. 3. - NEG BW- NEG r C8 + zz + r :07 r←0−r ***V1* 2 1. 1. - EXTZ -WL EXTZ r C8 + zz + r :12 r<high> ← 0 ------ 2 -. 1. 1 EXTS -WL EXTS r C8 + zz + r :13 r<high> ← r<low.MSB> ------ 2 -. 1. 1 DAA B-- DAA r C8 + r :10 加減算後の 10 進補正 ***P-* 2 2. -. - PAA -WL PAA r C8 + zz + r :14 if r<0> = 1 then INC r ------ 2 -. 3. 3 ADD SZHVNC 注 ) INC/DEC 命令では、#3 のコード値が 0 のときは、+8/−8 として機能します。 Page 155 TLCS-900H1 CPU ■ 命令群 900/H1 命令一覧表 (4/10) サイズ BWBWBW- MUL MUL MUL MULS BWBWBW- DIV DIVS MUL MULA コード (16 進 ) ニモニック RR,r rr,# RR,(mem) 機能 RR ← R × r rr ← r × # RR ← R × (mem) SZHVNC C8 + zz + r :40 + R C8 + zz + r :08:# 80 + zz + mem :40 + R ---------------- 命令長 ステート 2 5. 9. 2+# 5. 9. 6.10. 2+M MULS MULS MULS RR,r rr,# RR,(mem) C8 + zz + r :48 + R C8+ + zz + r :09:# 80 + zz + mem :48 + R RR ← R × r ; signed rr ← r × # ; signed RR ←R × (mem) ; signed ---------------- 2 2+# 2+ + M 4. 8. 4. 8. 5. 9. - BWBWBW- DIV DIV DIV RR,r rr,# RR,(mem) C8 + zz + r :50 + R C8 + zz + r :0A:# 80 + zz + mem :50 + R R ← RR ÷ r r ← rr ÷ # R ← RR ÷ (mem) ---V----V----V-- 2 2+# 2+M 11.19. 13.21. 14.22. - BWBWBW- DIVS DIVS DIVS RR,r rr,# RR,(mem) C8 + zz + r :58 + R C8 + zz + r :0B:# 80 + zz + mem :58 + R R ← RR ÷ r ; signed r ← rr ÷ # ; signed R ← RR ÷ (mem) ; signed ---V----V----V-- 2 2+# 2+M 12.20. 14.22. 15.23. - D8 + r 符号付き積和演算 rr ← rr + (XDE) × (XHL) **-V-- 2 -.12. - :38:#-1 モジュロインクリメント ; +1 if (r mod #) = (# − 1) then r ← r − (# − 1) else r ← r + 1 ------ 4 -. 5. - :39:#-2 モジュロインクリメント ; +2 if (r mod #) = (# − 2) then r ← r − (# − 2) else r ← r + 2 ------ 4 -. 5. - :3A:#-4 モジュロインクリメント ; +4 if (r mod #) = (# − 4) then r ← r − (# − 4) else r ← r + 4 ------ 4 -. 5. - :3C:#-1 モジュロデクリメント ; −1 if (r mod #) = 0 then r ← r + (# − 1) else r ← r − 1 ------ 4 -. 4. - :3D:#-2 モジュロデクリメント ; −2 if (r mod #) = 0 then r ← r + (# − 2) else r ← r − 2 ------ 4 -. 4. - :3E:#-4 モジュロデクリメント ; −4 if (r mod #) = 0 then r ← r + (# − 4) else r ← r − 4 ------ 4 -. 4. - -W- MULA rr :19 32bit 32bit 16bit 16bit XHL ← XHL − 2 MINC MDEC -W- MINC1 #,r (#=2**n) (1<=n<=15) -W- MINC2 #,r (#=2**n) (2<=n<=15) -W- MINC4 #,r (#=2**n) (3<=n<=15) -W- MDEC1 #,r (#=2**n) (1<=n<=15) -W- MDEC2 #,r (#=2**n) (2<=n<=15) -W- MDEC4 #,r (#=2**n) (3<=n<=15) D8 + r D8 + r D8 + r D8 + r D8 + r D8 + r 注 ) MUL, MULS, DIV, DIVS 命令のオペランド “RR” は、演算サイズの倍のレジスタを指定すること を示しています。演算サイズがバイトのとき (8 × 8 ビット , 16 ÷ 8 ビット ) は、ワードレジスタ (16 ビット ) 指定し、演算サイズがワードのとき (16 × 16 ビット , 32 ÷ 16 ビット ) は、 ロングワー ドレジスタ (32 ビット ) を指定します。 Page 156 TLCS-900H1 CPU ■ 900/H1 命令一覧表 (5/10) (5) 論理演算 命令群 コード (16 進 ) サイズ BWL BWL BWL BWL BW- ニモニック AND R,r AND r,# AND R,(mem) AND (mem),R AND<w> (mem),# C8 + zz + r C8 + zz + r 80 + zz + mem 80 + zz + mem 80 + zz + mem :C0+R :CC:# :C0 + R :C8 + R :3C:# 機能 R ← R and r r ← r and # R ← R and (mem) (mem) ← (mem) and R (mem) ← (mem) and # **1P00 **1P00 **1P00 **1P00 **1P00 命令長 ステート 2 1. 1. 1 2+# 1. 1. 1 2+M 2. 2. 2 2+M 3. 3. 3 2 + M# 3. 3. - OR BWL BWL BWL BWL BW- OR OR OR OR OR<W> R,r r,# R,(mem) (mem),R (mem),# C8 + zz + r C8 + zz + r 80 + zz + mem 80 + zz + mem 80 + zz + mem :E0 + R :CE:# :E0 + R :E8 + R :3E:# R ← R or r r ← r or # R ← R or (mem) (mem) ← (mem) or R (mem) ← (mem) or # **0P00 **0P00 **0P00 **0P00 **0P00 2 2+# 2+M 2+M 2 + M# 1. 1. 1 1. 1. 1 2. 2. 2 3. 3. 3 3. 3. - XOR BWL BWL BWL BWL BW- XOR XOR XOR XOR XOR<W> R,r r,# R,(mem) (mem),R (mem),# C8 + zz + r C8 + zz + r 80 + zz + mem 80 + zz + mem 80 + zz + mem :D0 + R :CD:# :D0 + R :D8 + R :3D:# R ← R xor r r ← r xor # R ← R xor (mem) (mem) ← (mem) xor R (mem) ← (mem) xor # **0P00 **0P00 **0P00 **0P00 **0P00 2 2+# 2+M 2+M 2 + M# 1. 1. 1 1. 1. 1 2. 2. 2 3. 3. 3 3. 3. - CPL BW- CPL r C8+zz+r :06 r ← not r --1-1- 2 1. 1. - AND Page 157 SZHVNC TLCS-900H1 CPU ■ 900/H1 命令一覧表 (6/10) (6) ビット操作 命令群 コード (16 進 ) サイズ BWBWB-B-- LDCF LDCF LDCF LDCF ニモニック #4,r A ,r #3,(mem) A ,(mem) C8 + zz + r C8 + zz + r B0 + men B0 + men :23:#4 :2B :98 + #3 :2B CY ← r<#4> CY ← r<A> CY ← (mem)<#3> CY ← (mem)<A> -----* -----* -----* -----* 命令長 ステート 3 1. 1. 2 1. 1. 2+M 3. -. 2+M 3. -. - STCF BWBWB-B-- STCF STCF STCF STCF #4,r A ,r #3,(mem) A ,(mem) C8 + zz + r C8 + zz + r B0 + mem B0 + mem :24:#4 :2C :A0 + #3 :2C r<#4> ← CY r<A> ← CY (mem)<#3> ← CY (mem)<A> ← CY --------------------- 3 2 2+M 2+M 1. 1. 1. 1. 4. -. 4. -. - ANDCF BWBWB-B-- ANDCF ANDCF ANDCF ANDCF #4,r A ,r #3,(mem) A ,(mem) C8 + zz + r C8 + zz + r B0 + mem B0 + mem :20:#4 :28 :80 + #3 :28 CY ← CY and r<#4> CY ← CY and r<A> CY ← CY and (mem)<#3> CY ← CY and (mem)<A> -----* -----* -----* -----* 3 2 2+M 2+M 1. 1. 1. 1. 3. -. 3. -. - ORCF BWBWB-B-- ORCF ORCF ORCF ORCF #4,r A ,r #3,(mem) A ,(mem) C8 + zz + r C8 + zz + r B0 + mem B0 + mem :21:#4 :29 :88 + #3 :29 CY ← CY or CY ← CY or CY ← CY or CY ← CY or r<#4> r<A> (mem)<#3> (mem)<A> -----* -----* -----* -----* 3 2 2+M 2+M 1. 1. 1. 1. 3. -. 3. -. - XORCF BWBWB-B-- XORCF XORCF XORCF XORCF #4,r A ,r #3,(mem) A ,(mem) C8 + zz + r C8 + zz + r B0 + mem B0 + mem :22:#4 :2A :90 + #3 :2A CY ← CY xor r<#4> CY ← CY xor r<A> CY ← CY xor (mem)<#3> CY ← CY xor (mem)<A> -----* -----* -----* -----* 3 2 2+M 2+M 1. 1. 1. 1. 3. -. 3. -. - RCF SCF CCF ZCF --------- RCF SCF CCF ZCF CY ← 0 CY ← 1 CY ← not CY CY ← not “Z” フラグ --0-00 --0-01 --X-0* --X-0* 1 1 1 1 1 1 1 1 BIT BWB-- BIT BIT #4,r #3,(mem) C8 + zz + r B0 + mem :33:#4 :C8 + #3 Z ← not r<#4> Z ← not (mem)<#3> X*1X0X*1X0- 3 2+M 1. 1. 3. -. - RES BWB-- RES RES #4,r #3,(mem) C8 + zz + r B0 + mem :30:#4 :B0 + #3 r<#4> ← 0 (mem)<#3> ← 0 ----------- 3 2+M 1. 1. 4. -. - SET BWB-- SET SET #4,r #3,(mem) C8 + zz + r B0 + mem :31:#4 :B8 + #3 r<#4> ← 1 (mem)<#3> ← 1 ----------- 3 2+M 1. 1. 4. -. - CHG BWB-- CHG CHG #4,r #3,(mem) C8 + zz + r B0 + mem :32:#4 :C0 + #3 r<#4> ← not r<#4> (mem)<#3> ← not (mem)<#3> ----------- 3 2+M 1. 1. 4. -. - TSET BWB-- TSET TSET #4,r #3,(mem) C8 + zz + r B0 + mem :34:#4 :A8 + #3 Z ← not r<#4>:r<#4> ← 1 Z ← not (mem)<#3> (mem)<#3> ← 1 X*1X0X*1X0- 3 2+M 3. 3. 6. -. - BS1 -W-W- BS1F BS1B A,r A,r D8 + r D8 + r :0E :0F A ← 1 サーチ r; Forward A ← 1 サーチ r; Backward ---(1) ----(1) -- 2 2 -. 1. -. 1. - LDCF 10 11 12 13 機能 SZHVNC 注 ) (1): サーチするビットが見つかったとき “0” にセットされ、それ以外のときは “1” にセットされ ます。 Page 158 TLCS-900H1 CPU ■ 900/H1 命令一覧表 (7/10) (7) 特別演算 , CPU 制御 命令群 NOP サイズ --- NOP EI --- EI DI --- DI PUSH -W- PUSH SR POP -W- POP SR SWI --- SWI [#3] コード (16 進 ) ニモニック 00 [#3] 機能 no operation ------ 命令長 ステート 1 1 SZHVNC 06 :#3 割り込み許可フラグの設定 IFF ← #3 ------ 2 2 06 :07 割り込み禁止 IFF ← 7 ------ 2 2 02 (-XSP) ← SR ------ 1 -. 2. - 03 SR ← (XSP+) ****** 1 -. 7. - F8+#3 ソフトウエア割り込み PUSH PC&SR JP (FFFF00H+4×#3) ------ 1 9 HALT --- HALT 05 CPU 停止 ------ 1 6 LDC BWL BWL LDC LDC cr,r r,cr C8 + zz + r:2E:cr C8 + zz + r:2F:cr cr ← r r ← cr ----------- 3 3 4. 4. 4 2. 2. 2 LINK --L LINK r,d16 E8 + r :0C:d16 PUSH r LD r,XSP ADD XSP,d16 ------ 4 -. -. 3 UNLK --L UNLK r E8 + r :0D LD XSP,r POP r ------ 2 -. -. 2 LDF --- LDF #2 17 :#2 ------ 2 6 INCF --- INCF 0C レジスタバンクの切り替え RFP ← RFP + 1 ------ 1 6 DECF --- DECF 0D レジスタバンクの切り替え RFP ← RFP − 1 ------ 1 6 SCC BW- SCC C8 + zz + r:70 + cc if cc then r ← 1 else r ← 0 ------ 2 2. 2. - 注 1) EI 命令でオペランド #3 の記述を省略すると “0” を指定したものと見なされます。 cc,r レジスタバンクの設定 RFP ← #2 ( リセット時 “0”) 注 2) SWI 命令でオペランド #3 の記述を省略すると “7” を指定したものと見なされます。 Page 159 TLCS-900H1 CPU ■ 900/H1 命令一覧表 (8/10) (8) ローテート , シフト ニモニック コード (16 進 ) 命令群 サイズ 機能 RLC BWL BWL BW- RLC #4,r RLC A,r RLC<W> (mem) C8 + zz + r :E8:#4 C8 + zz + r :F8 80 + zz + mem :78 RRC BWL BWL BW- RRC #4,r RRC A,r RRC<W> (mem) C8 + zz + r :E9:#4 C8 + zz + r :F9 80 + zz + mem :79 RL BWL BWL BW- RL RL RL<W> #4,r A,r (mem) C8 + zz + r :EA:#4 C8 + zz + r :FA 80 + zz + mem :7A RR BWL BWL BW- RR RR RR<W> #4,r A,r (mem) C8 + zz + r :EB:#4 C8 + zz + r :FB 80 + zz + mem :7B SLA BWL BWL BW- SLA #4,r SLA A,r SLA<W> (mem) C8 + zz + r :EC:#4 C8 + zz + r :FC 80 + zz + mem :7C SRA BWL BWL BW- SRA #4,r SRA A,r SRA<W> (mem) C8 + zz + r :ED:#4 C8 + zz + r :FD 80 + zz + mem :7D SLL BWL BWL BW- SLL SLL SLL<W> #4,r A,r (mem) C8 + zz + r :EE:#4 C8 + zz + r :FE 80 + zz + mem :7E SRL BWL BWL BW- SRL #4,r SRL A,r SRL<W> (mem) C8 + zz + r :EF:#4 C8 + zz + r :FF 80 + zz + mem :7F RLD B-- RLD [A,](mem) 80 + mem :06 7-4 RRD B-- RRD [A,](mem) 80 + mem :07 7-4 注 1) #4/A によるシフト回数の指定では、モジュロ 16 (0~15) が使われます。コード 0 は、16 回シ フトになります。 CY MSB MSB CY CY CY 0 0 CY MSB MSB CY MSB 3-0 Areg 注 2) ステート数の計算で、少数点以下は切り上げます。 3-0 0 0 0 CY MSB Areg Page 160 0 MSB MSB 0 0 0 0 0 CY SZHVNC 命令長 ステート **0P0* **0P0* **0P0* 3 2 2+M 1 + n/4 1 + n/4 3. 3. - **0P0* **0P0* **0P0* 3 2 2+M 1 + n/4 1 + n/4 3. 3. - **0P0* **0P0* **0P0* 3 2 2+M 1 + n/4 1 + n/4 3. 3. - **0P0* **0P0* **0P0* 3 2 2+M 1 + n/4 1 + n/4 3. 3. - **0P0* **0P0* **0P0* 3 2 2+M 1 + n/4 1 + n/4 3. 3. - **0P0* **0P0* **0P0* 3 2 2+M 1 + n/4 1 + n/4 3. 3. - **0P0* **0P0* **0P0* 3 2 2+M 1 + n/4 1 + n/4 3. 3. - **0P0* **0P0* **0P0* 3 2 2+M 1 + n/4 1 + n/4 3. 3. - **0P0- 2+M 8. -. - **0P0- 2+M 8. -. - mem 7-4 3-0 mem 7-4 3-0 TLCS-900H1 CPU ■ 900/H1 命令一覧表 (9/10) (9) ジャンプ , コール , リターン 命令群 サイズ ----------- JP JP JR JRL JP CALL --------- CALL CALL CALR CALL DJNZ BW- RET --------- JP ニモニック #16 #24 [cc,]$ + 2 + d8 [cc,]$+ + 3 + d16 [cc,]mem コード (16 進 ) 1A 1B 60+cc 70+cc B0+mem :#16 :#24 :d8 :d16 :DO + cc PC ← #16 PC ← #24 if cc then PC ← PC + d8 if cc then PC ← PC + d16 if cc then PC ← mem -------------------------- 命令長 3 4 2 3 2+M 2 2 2/1 (T/F) 2/1 (T/F) 3 (T/F) 1C 1D 1E B0+mem :#16 :#24 :d16 :E0 + cc PUSH PC:JP #16 PUSH PC:JP #24 PUSH PC:JR $ + 3 + d16 if cc then PUSH PC:JP mem --------------------- 3 4 3 2+M 4 4 5 6/3 (T/F) DJNZ [r,]$ + 3/4 + d8 C8+zz+r :1C:d8 r ← r − 1 (r 省略で B レジ スタ ) if r ≠ 0 then JR $ + 3 + d8 ------ 3 2 (r ≠ 0) 1 (r = 0) RET RET cc RETD d16 RETI 0E B0 0F 07 :F0 + cc :d16 POP PC if cc then POP PC RET:ADD XSP,d16 POP SR&PC ---------------****** 1 2 3 1 4 7/3 (T/F) 5 9 #16 #24 $ + 3 + d16 [cc,]mem 機能 注 ) (T/F) は True/False 時のステート数を表しています。 Page 161 SZHVNC ステート TLCS-900H1 CPU ■ 900/H1 命令一覧表 (10/10) (10) アドレッシングモード 分類 R モード R r (mem) ステート ( 追加分 ) +0 r +0 (R) +0 (R + d8) +0 (#8) +0 (#16) +0 (#24) +0 (r) +0 (r + d16) +1 (r + r8) +1 (r + r16) +1 (−r) +1 (r+) +1 (11) 割り込み モード 汎用割り込み処理 マイクロ DMA 動作 PUSH PC PUSH SR IFF ← 受け付けレベル + 1 INTNEST ← INTNEST + 1 JP (FFFF00H + ベクタ ) ステート 9 I/O to MEM (DMADn+) ← (DMASn) 5. 5. 5 I/O to MEM (DMADn−) ← (DMASn) 5. 5. 5 MEM to I/O (DMADn) ← (DMASn+) 5. 5. 5 MEM to I/O (DMADn) ← (DMASn−) 5. 5. 5 MEM to MEM (DMADn+) ← (DMASn+) 6. 6. 6 MEM to MEM (DMADn−) ← (DMASn−) 6. 6. 6 I/O to I/O (DMADn) ← (DMASn) 5. 5. 5 Counter DMASn ← DMASn+1 5 Page 162 TLCS-900H1 CPU 付録 C. 900/H1 命令コードマップ ■ 900/H1 命令コードマップ (1/4) 1 バイトオペコード命令 H/L 0 0 NOP 1 RCF 1 SCF 2 3 PUSH SR POP SR 4 CCF ZCF PUSH A 5 6 7 HALT EI n RETI LD PUSH LDW (n), n n (n), nn 8 9 POP A EX F, F’ LDF n PUSH F POP F A JP nn B C D E F PUSHW INCF DECF RET RETD dd CALL nn CALL CALR nnn PC+dd nn JP nnn 2 LD R, n PUSH RR 3 LD RR, nn PUSH XRR 4 LD XRR, nnnn POP RR POP XRR 5 6 JR F LT LE ULE PE/OV M/MI Z 7 cc, PC+d C (T) JRL GE GT UGT (XDE +d) (XHL +d) P/PL NZ NC (XIY +d) (XIZ +d) (XSP +d) E H L IX IY IZ SP XIX XIY XIZ XSP 4 5 6 7 PO/NOV cc, PC+dd ↑ 8 src. B (XWA) (XBC) (XDE) (XHL) (XIX) src. B (XIY) (XIZ) (XWA (XSP) +d) (XBC +d) (XIX +d) 9 src. W ↑ src. W ↑ A src. L ↑ src. L ↑ B dst ↑ dst ↑ C src. B (n) (nn) (nnn) (mem) (−xrr) D src. W E src. L F dst ↑ ↑ (xrr+) reg. B r reg. W rr reg. L xrr A B C D reg. W WA BC DE HL reg. L XWA XBC XDE XHL SWI ↑ 注 1) reg. B W 0 1 2 3 n 空白部分のコードは、未定義命令です。 注 2) コード 1FH にはダミーの命令が実装されています。使用しないでください。 Page 163 TLCS-900H1 CPU ■ 900/H1 命令コードマップ (2/4) 1 バイト目 : reg H/L 0 1 2 3 4 0 1 2 3 LD 4 PUSH r,# r EXTZ EXTS PAA WL WL WL r r r r ANDCF ORCF XORCF LDCF STCF BW #, r #, r #, r #, r #, r RES SET CHG BIT TSET BW #, r #, r #, r #, r #, r MUL R, r 5 POP r DAA B 5 6 8 1 2 F LT LE DIV R, r INC 3 #3, r 4 5 6 CPL BW r MIRR W r 6 ULE PE/OV M/MI ADD R, r 9 ADC R, r A SUB R, r B SBC R, r C AND R, r D XOR R, r E OR R, r F CP R, r r: B C D E F DIVS LINK L UNLKL BS1F BS1B W BW W rr,# A, r r, dd r A, r rr,# rr,# rr,# MULA DJNZ W BW r r, d ANDCF ORCF XORCF LDCF STCF LDC LDC BW A, r A, r A, r A, r A, r cr, r r, cr MDEC1 MDEC2 MDEC4 MINC1 MINC2 MINC4 Z 8 MUL 9 MULS A DIV #, r W #, r W BW MULS R, r BW BW DIVS R, r BW DEC 3 #3, r 4 5 6 UGT LD PO/NOV P/PL NZ LD r, R LD 3 EX r, #3 4 R, r 5 6 SBC r, # CP 3 RR #, r RR A, r AND r, # r, #3 4 SLA #, r SLA A, r XOR r, # OR r, # 5 SRA #, r SRA A, r 6 SLL #, r SLL A, r 7 SCC C 7 8 7 NEG BW r 8 cc, r (T) 1 2 GE GT 0 1 2 ADD r, # ADC r, # SUB r, # 0 RLC #, r RLC A, r 1 RRC #, r RRC A, r 2 RL #, r RL A, r 7 BW NC R, r 7 BW CP r, # BW 7 SRL #, r SRL A, r 1バイト目のコードで指定されるレジスタを示します (すべてのCPU内部レジスタが指定可能で す )。 R: 2 バイト目のコードで指定されるレジスタを示します ( カレントレジスタ 8 本のみ指定可能です )。 B: オペランドサイズは、バイト型です。 W: オペランドサイズは、ワード型です。 L: オペランドサイズは、ロング型です。 注 ) コード 1AH, 1BH, 1DH, 1EH, 1FH, 3BH, 3FH にはダミーの命令が実装されています。使用しな いでください。 Page 164 TLCS-900H1 CPU ■ 900/H1 命令コードマップ (3/4) 1 バイト目 : src (mem) H/L 0 1 2 3 0 4 5 PUSH BW (mem) 1 LDI LDIR LDD LDDR BW CPI 6 7 RLD RRD B 8 9 A B C D E F SUB SBC AND XOR OR CP BW A,(mem) CPIR 2 LD R, (mem) 3 EX (mem), R CPD CPDR BW LD BW (nn), (m) BW ADD ADC (mem), # 4 MUL R, (mem) BW MULS R, (mem) BW 5 DIV R, (mem) BW DIVS R, (mem) BW INC #3, (mem) DEC #3, (mem) 6 8 1 2 3 4 BW 5 6 7 7 8 1 2 3 RLC RRC RL RR 5 6 7 SLA SRA SLL SRL BW (mem) 8 ADD R, (mem) ADD (mem), R 9 ADC R, (mem) ADC (mem), R A SUB R, (mem) SUB (mem), R B SBC R, (mem) SBC (mem), R C AND R, (mem) AND (mem), R D XOR R, (mem) XOR (mem), R E OR R, (mem) OR (mem), R F CP R, (mem) CP (mem), R B: オペランドサイズは、バイト型です。 W: オペランドサイズは、ワード型です。 Page 165 BW 4 TLCS-900H1 CPU ■ 900/H1 命令コードマップ (4/4) 1 バイト目 : dst (mem) H/L 0 0 LD B (m), # 1 2 3 LD W (m), # 4 5 POP B (mem) 1 6 7 8 9 A B C XORCF LDCF STCF B D E F 6 7 6 7 6 7 6 7 POP W (mem) LD B LD W (m), (nn) (m), (nn) 2 LDA R, mem W ANDCF ORCF 3 LDA R, mem L 4 LD (mem), R B 5 LD (mem), R W 6 LD (mem), R L A, (mem) 7 8 ANDCF 1 2 0 1 2 0 1 2 0 1 2 0 1 2 3 4 F LT LE ULE PE/OV 9 3 #3, (mem) 0 XORCF A 3 STCF B 3 RES C 3 CHG 4 5 B 6 7 6 7 6 7 6 7 5 6 7 M/MI Z #3, (mem) 4 5 5 4 5 0 1 2 0 1 2 0 1 2 0 1 2 3 4 5 6 7 GT UGT PO/NOV P/PL NZ NC LDCF TSET JP CALL F RET 5 #3, (mem) 4 5 B #3, (mem) 4 5 B #3, (mem) 4 5 B #3, (mem) B cc, mem C E 3 BIT B D 3 SET B #3, (mem) 3 4 B 2 B #3, (mem) 3 #3, (mem) 1 B #3, (mem) 4 ORCF 0 (T) GE cc, mem ↑ cc (1 バイト目のコードは B0H) ↑ B: オペランドサイズは、バイト型です。 W: オペランドサイズは、ワード型です。 L: オペランドサイズは、ロング型です。 注 ) コード 01H, 05H, 15H にはダミーの命令が実装されています。使用しないでください。 Page 166