PIC命令リスト
PIC命令セットは、Microchip Technology社のPICまたはdsPICマイクロコントローラがサポートする命令セットです。これらの命令は通常、プロセッサの フラッシュメモリにプログラムされ、起動時にマイクロコントローラによって自動的に実行されます。
PICmicroチップはハーバード・アーキテクチャを採用しており、命令ワードのサイズは特殊です。当初は12ビット命令で、メモリオペランドを指定する5ビットのアドレスビットと9ビットの分岐先ビットで構成されていました。その後の改訂でオペコードビットが追加され、アドレスビットを追加できるようになりました。
これらはアキュムレータ マシンであり、共通のアキュムレータ「W」がすべての 2 オペランド命令の 1 つのオペランドになります。
以下の命令セット表では、レジスタ番号は「f」、定数は「k」で表されます。ビット番号(0~7)は「b」で選択されます。算術命令は、結果を「d」ビットで選択された入力の1つに書き込みます。0はW、1は結果がソースレジスタfに書き戻されることを示します。CおよびZステータスフラグは、結果に基づいて設定される場合があります。それ以外の場合は変更されません。Cを設定する加算および減算命令(回転は行いません)は、BCD演算に役立つDC(桁上げ)フラグも設定します。
建築
メモリオペランドは「レジスタ」とも呼ばれます。ほとんどは単なる汎用ストレージ(RAM)ですが、一部の領域は特殊機能レジスタ用に予約されています。1つのアキュムレータ( と呼ばれます)を除き、プログラムカウンタやALUステータスレジスタWなどのレジスタも含め、ほぼすべてのレジスタはメモリマップされています。(メモリマップされていない他の例外は、リターンアドレススタックとGPIOピンの設定に使用されるトライステートレジスタです。)
一部の算術命令は入力の1つしか使用しませんが、それでもdビットを使用します。例えば、はMOVWの値を にコピーします。 = 1 で使用すると、に格納されます。の値を出力する対応する命令があります。= 0 で使用すると、にロードされます。 = 1 で使用すると、の値に応じてゼロフラグが設定されるという目に見える効果しかありません。 WdWfMOVFfdfWdf
この命令セットには条件分岐命令は含まれていません。代わりに、後続の命令を無視する条件スキップ命令が含まれています。条件スキップ命令の後に無条件分岐命令が続くと、条件分岐が実行されます。スキップ命令は、任意のレジスタの任意のビットをテストします。ALUステータスレジスタは、その一例として挙げられます。
メモリオペランドは絶対アドレスで指定されます。その位置はコンパイル時に固定されます。間接アドレス指定を実現するために、2つの特殊機能レジスタが用意されています。
- ファイル選択レジスタ(
FSR)には、必要なメモリオペランドのアドレスが書き込まれ、その後、 - 間接ファイルレジスタ(
INDF)は、FSR によって指し示されるオペランドのエイリアスになります。
このメカニズムにより、命令セットが5ビットまたは7ビットの絶対アドレスしか許可していない場合でも、最大256バイトのメモリアドレス指定が可能になります。命令に収まるよりも多くのレジスタ(特殊機能レジスタとRAM)を備えたモデルでは、複数のメモリバンクが提供され、それらへのアクセスには以下の2つのメカニズムのいずれかが使用されます。
- ほとんどのベースライン コア デバイスと一部のミッドレンジ コア デバイスでは、ファイル選択レジスタの上位ビットを使用して現在のレジスタ バンクを選択します。
- 最近のモデルには、別個のバンク選択レジスタと、
MOVLBそれを設定する命令があります。
256ワードを超えるプログラムを持つPICプロセッサは、ページメモリを使用します。内部プログラムカウンタとリターンスタックは、すべてのメモリをアドレス指定するために必要な幅を持っていますが、ソフトウェアからは下位8ビットPCL(「PC Low」)レジスタのみを参照できます。ソフトウェアによってのみ変更可能な追加のレジスタ(「PC Latch High」)がありますPCLATH。完全な宛先アドレスを指定しない操作(GOTOPCLレジスタへの9ビットまたは8ビットの書き込みなど)は、PCLATHレジスタの対応する部分から追加の上位ビットを埋めます。(一部のPIC18プロセッサでは、PCLATUレジスタによって16ビット以上に拡張され、ビット16~23が提供されます。)
ベースライン コア デバイス (12 ビット)
これは1976年に汎用計測器PIC1640とPIC1650で導入されたオリジナルの命令セットであり、[ 1 ]それ以降追加されたのはNOP以外のさまざまな命令だけです。
| 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の指示 | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | いいえ | 操作なし | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | オプション | WをOPTIONレジスタにコピーする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 寝る | スタンバイモードに入る | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT | ウォッチドッグタイマーを再起動する | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | f | トリスf | Wをトライステートレジスタにコピーする(f = 1、2、または3) | |||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | け | MOVLB k * | バンク選択レジスタをkに設定する | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 戻る† | サブルーチンから戻り、Wは変更されない | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | レティフィー† | 割り込みから戻る; 戻って割り込みを有効にする | ||
| 0 | 0 | オペコード | d | 登録する | ALU演算: dest ← OP(f,W) | ||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | f | MOVWF f | f ← W | ||||||
| 0 | 0 | 0 | 0 | 0 | 1 | d | f | CLR f、d | Z | dest ← 0、通常はCLRWまたはCLRF fと表記される | |||||
| 0 | 0 | 0 | 0 | 1 | 0 | d | f | SUBWF f、d | C | Z | 宛先 ← f−W (宛先 ← f+~W+1) | ||||
| 0 | 0 | 0 | 0 | 1 | 1 | d | f | DECF f、d | Z | 宛先 ← f−1 | |||||
| 0 | 0 | 0 | 1 | 0 | 0 | d | f | IORWF f、d | Z | dest ← f | W、論理和 | |||||
| 0 | 0 | 0 | 1 | 0 | 1 | d | f | ANDWF f、d | Z | dest ← f & W、論理積 | |||||
| 0 | 0 | 0 | 1 | 1 | 0 | d | f | XORWF f、d | Z | dest ← f ^ W、排他的論理和 | |||||
| 0 | 0 | 0 | 1 | 1 | 1 | d | f | ADDWF f、d | C | Z | 目的地 ← f+W | ||||
| 0 | 0 | 1 | 0 | 0 | 0 | d | f | MOVF f , d | Z | 宛先 ← f | |||||
| 0 | 0 | 1 | 0 | 0 | 1 | d | f | COMF f、d | Z | dest ← ~f、ビット補数 | |||||
| 0 | 0 | 1 | 0 | 1 | 0 | d | f | INCF f、d | Z | 宛先 ← f+1 | |||||
| 0 | 0 | 1 | 0 | 1 | 1 | d | f | DECFSZ f、d | dest ← f−1、ゼロの場合はスキップ | ||||||
| 0 | 0 | 1 | 1 | 0 | 0 | d | f | RRF f、d | C | dest ← CARRY<<7 | f>>1、キャリーを右に回転 | |||||
| 0 | 0 | 1 | 1 | 0 | 1 | d | f | RLF f、d | C | dest ← F<<1 | CARRY、キャリーを通して左に回転 | |||||
| 0 | 0 | 1 | 1 | 1 | 0 | d | f | SWAPF f、d | dest ← f<<4 | f>>4、ニブルを交換 | ||||||
| 0 | 0 | 1 | 1 | 1 | 1 | d | f | INCFSZ f、d | dest ← f+1、ゼロの場合はスキップ | ||||||
| 0 | 1 | OPCC | 少し | 登録する | ビット操作 | ||||||||||
| 0 | 1 | 0 | 0 | 少し | f | BCF f , b | fのビットbをクリア | ||||||||
| 0 | 1 | 0 | 1 | 少し | f | BSF f , b | fのビットbを設定する | ||||||||
| 0 | 1 | 1 | 0 | 少し | f | BTFSC f , b | fのビットbがクリアされている場合はスキップする | ||||||||
| 0 | 1 | 1 | 1 | 少し | f | BTFSS f、b | fのビットbが設定されている場合はスキップする | ||||||||
| 1 | 0 | OPCC | け | 管理権の移転 | |||||||||||
| 1 | 0 | 0 | 0 | け | RETLW k | W ← k を設定し、サブルーチンから戻る | |||||||||
| 1 | 0 | 0 | 1 | け | コールk | サブルーチン呼び出し、8ビットアドレスk | |||||||||
| 1 | 0 | 1 | け | 後藤k | 9ビットアドレスkへのジャンプ[ 2 ] | ||||||||||
| 1 | 1 | OPCC | 8ビット即値 | Wと8ビットリテラルの演算: W ← OP(k,W) | |||||||||||
| 1 | 1 | 0 | 0 | け | MOVLW k | W ← k | |||||||||
| 1 | 1 | 0 | 1 | け | IORLW k | Z | W ← k | W、ビットごとの論理和 | ||||||||
| 1 | 1 | 1 | 0 | け | ANDLW k | Z | W ← k & W、ビット単位で | ||||||||
| 1 | 1 | 1 | 1 | け | XORLW k | Z | W ← k ^ W、ビットごとの排他的論理和 | ||||||||
| 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
*: 拡張命令。ほとんどの12ビットPICでは利用できません。拡張RAM搭載モデル(16C5x、16F5xなど)のほとんどでは、FSRの上位ビットを使用してレジスタアドレス空間を拡張します。一部のモデル(PIC12F529T39Aなど)には、この命令で設定できる独立したバンク選択レジスタがあります。 †: 拡張命令。「拡張ベースライン」PICでのみ利用可能です。割り込みサポート(および4レベルスタック)を備えたごく少数のモデル(16F527、16F570、MCV20A)のみがこれらの命令を搭載しています。これらのモデルはすべてMOVLBも搭載しています。
汎用計測器 PIC1670 (13 ビット、廃止)
1979年に発売されたこの拡張PICは、64バイトのレジスタ空間(16個の特殊機能レジスタと48バイトのRAM)、1024ワードのROM、6レベルのハードウェアスタック、そして割り込み処理をサポートしていました。PIC1665は、マスクROM 1670用のファームウェア開発に使用された、外部ROMを搭載したバリアントでした。
ステータスレジスタ(ビット3)に符号付きオーバーフロービットが追加されました。ステータスレジスタのビット4とビット5は、10ビットプログラムカウンタの上位2ビットへの読み取り専用アクセスを提供します。
命令セットは、アドレスフィールドが拡張された12ビットPICとほぼ同じです。ただし、8ビット即値命令にはオペコードビットが追加されています。8ビット即値オペランドを持つ命令を4つ追加するのではなく、命令セットには、8ビットオペランドを持つ命令を2つ、7ビットオペランド(6ビットアドレスと方向ビット)を持つ命令を2つ、そして6ビットオペランド(6ビットアドレス)を持つ命令を4つ追加します。
- 8ビットの即値グループは、ADDLWとRETLW命令の追加により6命令に拡張されます。RETLWは制御転送グループから外され、CALL命令で10ビットのアドレスをフルに使用できるようになります。
- ALU 演算グループは、キャリー付き加算/減算 (ADCWF、SUBBWF) 命令 (7 ビット オペランド) を取得します。
- CLRW 命令は削除されます (6 ビットのメモリ アドレスが無駄になり、MOVLW 0 が重複します)。
- 6ビットのメモリアドレスオペランドを持つ5つの新しい命令が追加されました。これらの命令にはデスティネーション選択ビットがなく、結果を書き込まない「比較スキップ」命令が3つと、「キャリーなし回転」命令が2つ含まれています。
この命令セットは現在製造されている部品では使用されておらず、歴史的な興味のみの対象となっています。
| 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の指示 | ||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | いいえ | 操作なし | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 停止 | プロセッサを停止する(PIC1665のみ) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | レトフィ | 割り込みからの復帰 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 再発行 | サブルーチンから戻り、Wは変更されない | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | DAW | 小数点調整 W | ||
| 0 | 0 | オペコード | d | 登録する | ALU演算は12ビットおよび14ビットPICと同様ですが、 | |||||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | d | f | SUBBWF f、d | C | Z | dest ← f−W− C = f+~W+C ( | |||||
| 0 | 0 | 1 | 0 | 0 | 0 | d | f | ADCWF f、d | C | Z | dest ← f+W+C ( | |||||
| 0 | 1 | OPCC | 少し | 登録する | 12ビットおよび14ビットPICと同じビット操作 | |||||||||||
| 1 | 0 | 0 | 0 | オペコード | 登録する | 追加のALU演算、宛先の選択なし | ||||||||||
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | f | MOVFW f | Z | W ← f (= MOVF f ,0) | ||||||
| 1 | 0 | 0 | 0 | 0 | 0 | 1 | f | CLRF f | Z | f ← 0 (CLRWの場合はMOVLW 0を使用) | ||||||
| 1 | 0 | 0 | 0 | 0 | 1 | 0 | f | RRNC f | f ← f<<7 | f>>1、右回転(繰り上がりなし) | |||||||
| 1 | 0 | 0 | 0 | 0 | 1 | 1 | f | RLNC f | f ← f<<1 | f>>7、左回転(繰り上がりなし) | |||||||
| 1 | 0 | 0 | 0 | 1 | 0 | 0 | f | CPFSLT f | 比較して f < W (符号なし) の場合はスキップする | |||||||
| 1 | 0 | 0 | 0 | 1 | 0 | 1 | f | CPFSEQ f | f = Wの場合は比較してスキップする | |||||||
| 1 | 0 | 0 | 0 | 1 | 1 | 0 | f | CPFSGT f | f > W (符号なし)の場合は比較してスキップする | |||||||
| 1 | 0 | 0 | 0 | 1 | 1 | 1 | f | テストF f | Z | f ← f (= MOVF f ,1) | ||||||
| 1 | 0 | オペコード | 8ビット即値 | Wと8ビットリテラルの演算: W ← OP(k,W) | ||||||||||||
| 1 | 0 | 0 | 1 | 0 | け | MOVLW k | W ← k | |||||||||
| 1 | 0 | 0 | 1 | 1 | け | 追加k | C | Z | W ← k+W | |||||||
| 1 | 0 | 1 | 0 | 0 | け | IORLW k | Z | W ← k | W、ビットごとの論理和 | ||||||||
| 1 | 0 | 1 | 0 | 1 | け | ANDLW k | Z | W ← k & W、ビット単位で | ||||||||
| 1 | 0 | 1 | 1 | 0 | け | XORLW k | Z | W ← k ^ W、ビットごとの排他的論理和 | ||||||||
| 1 | 0 | 1 | 1 | 1 | け | RETLW k | W ← k、その後サブルーチンから戻る | |||||||||
| 1 | 1 | c | け | 管理権の移転 | ||||||||||||
| 1 | 1 | 0 | け | 後藤k | アドレスkにジャンプ | |||||||||||
| 1 | 1 | 1 | け | コールk | サブルーチンを呼び出す | |||||||||||
| 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
ミッドレンジ コア デバイス (14 ビット)
これらのデバイスは、14ビット幅のコードメモリと、改良された8レベルのコールスタックを備えています。命令セットはベースラインデバイスとほとんど変わりませんが、2ビットのオペコードビットが追加され、128個のレジスタと2048ワードのコードを直接アドレス指定できます。その他いくつかの命令と、8ビットのリテラル命令である加算と減算が2つ追加されています。ミッドレンジコアは、PIC12およびPIC16と表記されるほとんどのデバイスに搭載されています。
| 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の指示 | |||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | いいえ | 操作なし | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 戻る | サブルーチンから戻り、Wは変更されない | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | レティフィー | 割り込みからの復帰 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | オプション | WをOPTIONレジスタにコピーする(非推奨) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 寝る | スタンバイモードに入る | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | CLRWDT | ウォッチドッグタイマーを再起動する | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | f | トリスf | Wをトライステートレジスタにコピーする(f = 1、2、または3)(非推奨) | |||
| 0 | 0 | オペコード | d | 登録する | ALU演算: dest ← OP(f,W) | ||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | f | MOVWF f | f ← W | ||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | d | f | CLR f、d | Z | dest ← 0、通常はCLRWまたはCLRF fと表記される | |||||||
| 0 | 0 | 0 | 0 | 1 | 0 | d | f | SUBWF f、d | C | Z | 宛先 ← f−W (宛先 ← f+~W+1) | ||||||
| 0 | 0 | 0 | 0 | 1 | 1 | d | f | DECF f、d | Z | 宛先 ← f−1 | |||||||
| 0 | 0 | 0 | 1 | 0 | 0 | d | f | IORWF f、d | Z | dest ← f | W、論理和 | |||||||
| 0 | 0 | 0 | 1 | 0 | 1 | d | f | ANDWF f、d | Z | dest ← f & W、論理積 | |||||||
| 0 | 0 | 0 | 1 | 1 | 0 | d | f | XORWF f、d | Z | dest ← f ^ W、排他的論理和 | |||||||
| 0 | 0 | 0 | 1 | 1 | 1 | d | f | ADDWF f、d | C | Z | 目的地 ← f+W | ||||||
| 0 | 0 | 1 | 0 | 0 | 0 | d | f | MOVF f , d | Z | 宛先 ← f | |||||||
| 0 | 0 | 1 | 0 | 0 | 1 | d | f | COMF f、d | Z | dest ← ~f、ビット補数 | |||||||
| 0 | 0 | 1 | 0 | 1 | 0 | d | f | INCF f、d | Z | 宛先 ← f+1 | |||||||
| 0 | 0 | 1 | 0 | 1 | 1 | d | f | DECFSZ f、d | dest ← f−1、ゼロの場合はスキップ | ||||||||
| 0 | 0 | 1 | 1 | 0 | 0 | d | f | RRF f、d | C | dest ← CARRY<<7 | f>>1、キャリーを右に回転 | |||||||
| 0 | 0 | 1 | 1 | 0 | 1 | d | f | RLF f、d | C | dest ← f<<1 | CARRY、キャリーを左に回転 | |||||||
| 0 | 0 | 1 | 1 | 1 | 0 | d | f | SWAPF f、d | dest ← f<<4 | f>>4、ニブルを交換 | ||||||||
| 0 | 0 | 1 | 1 | 1 | 1 | d | f | INCFSZ f、d | dest ← f+1、ゼロの場合はスキップ | ||||||||
| 0 | 1 | OPCC | 少し | 登録する | ビット操作 | ||||||||||||
| 0 | 1 | 0 | 0 | 少し | f | BCF f , b | fのビットbをクリア | ||||||||||
| 0 | 1 | 0 | 1 | 少し | f | BSF f , b | fのビットbを設定する | ||||||||||
| 0 | 1 | 1 | 0 | 少し | f | BTFSC f , b | fのビットbがクリアされている場合はスキップする | ||||||||||
| 0 | 1 | 1 | 1 | 少し | f | BTFSS f、b | fのビットbが設定されている場合はスキップする | ||||||||||
| 1 | 0 | c | け | 管理権の移転 | |||||||||||||
| 1 | 0 | 0 | け | コールk | サブルーチンを呼び出す | ||||||||||||
| 1 | 0 | 1 | け | 後藤k | アドレスkにジャンプ | ||||||||||||
| 1 | 1 | オペコード | 8ビット即値 | Wと8ビットリテラルの演算: W ← OP(k,W) | |||||||||||||
| 1 | 1 | 0 | 0 | × | × | け | MOVLW k | W ← k | |||||||||
| 1 | 1 | 0 | 1 | × | × | け | RETLW k | W ← k、その後サブルーチンから戻る | |||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | け | IORLW k | Z | W ← k | W、ビットごとの論理和 | ||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | け | ANDLW k | Z | W ← k & W、ビット単位で | ||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | け | XORLW k | Z | W ← k ^ W、ビットごとの排他的論理和 | ||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | け | (予約済み) | ||||||||||
| 1 | 1 | 1 | 1 | 0 | × | け | サブLW k | C | Z | W ← k−W (宛先 ← k+~W+1) | |||||||
| 1 | 1 | 1 | 1 | 1 | × | け | 追加k | C | Z | W ← k+W | |||||||
| 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
強化されたミッドレンジコアデバイス(14ビット)
強化されたミッドレンジコアデバイスでは、より深いハードウェアスタック、追加のリセット方法、14個の追加命令、およびCプログラミング言語の最適化が導入されています。[ 4 ] 特に、2つのレジスタINDF registers(INDF0およびINDF1)と、それに対応する2つのFSRレジスタペア(および)があります。特殊命令は、アドレスレジスタなどのレジスタを使用し、さまざまなアドレッシングモードを備えています。 FSRnLFSRnHFSRn
| 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の指示 | |||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | リセット | ソフトウェアリセット | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | コールW | PCを押して、PCLATH:Wにジャンプします | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | BRW | PC ← PC + W、Wを使用した相対ジャンプ | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 0 | 0 | ムービー++FSR n | Z | FSR nをインクリメントし、W ← INDF n | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 0 | 1 | ムービー −−FSR n | Z | FSR nをデクリメントし、W ← INDF n | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 1 | 0 | ムービー FSR n ++ | Z | W ← INDF n、その後FSR nをインクリメントする | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 1 | 1 | ムービー FSR n −− | Z | W ← INDF n、その後FSR nをデクリメントする | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | n | メートル | FSR nを使用したMOVWI | INDF n ← W、MOVIWと同じモード | |||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | け | MOVLB k | BSR ← k、リテラルをバンク選択レジスタに移動 | ||||||
| 1 | 1 | オペコード | d | 登録する | ALU演算: dest ← OP(f,W) | ||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | d | f | LSLF f、d | C | Z | dest ← f << 1、論理左シフト | ||||||
| 1 | 1 | 0 | 1 | 1 | 0 | d | f | LSRF f、d | C | Z | dest ← f >> 1、論理右シフト | ||||||
| 1 | 1 | 0 | 1 | 1 | 1 | d | f | ASRF f、d | C | Z | dest ← f >> 1、算術右シフト | ||||||
| 1 | 1 | 1 | 0 | 1 | 1 | d | f | SUBWFB f、d | C | Z | dest ← f + ~W + C、繰り上がり減算 | ||||||
| 1 | 1 | 1 | 1 | 0 | 1 | d | f | ADDWFC f、d | C | Z | dest ← f + W + C、繰り上がり加算 | ||||||
| 1 | 1 | オペコード | け | リテラルkを使った演算 | |||||||||||||
| 1 | 1 | 0 | 0 | 0 | 1 | 0 | n | け | ADDFSR FSR n、k | FSR n ← FSR n + k、6ビットの符号付きオフセットを加算 | |||||||
| 1 | 1 | 0 | 0 | 0 | 1 | 1 | け | MOVLP k | PCLATH ← k、7ビットリテラルをPCラッチハイに移動 | ||||||||
| 1 | 1 | 0 | 0 | 1 | け | ブラk | PC ← PC + k、9ビット符号付きオフセットを使用した相対分岐 | ||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 0 | n | け | ムービーk [FSR n ] | Z | W ← [FSR n + k ]、6ビット符号付きオフセット | ||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | n | け | MOVWI k [FSR n ] | [FSR n + k ] ← W、6ビット符号付きオフセット | |||||||
| 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
ELAN Microelectronics クローン (13 または 15 ビット)
ELAN Microelectronics Corp.は、13ビットの命令語を持つPICmicroに似たマイクロコントローラシリーズを製造しています。[ 5 ] 命令はミッドレンジの14ビット命令セットとほぼ互換性がありますが、6ビットのレジスタアドレス(16個の特殊用途レジスタと48バイトのRAM)と10ビット(1024ワード)のプログラムスペースに制限されています。
10ビットのプログラムカウンタはR2としてアクセス可能です。読み出しは下位ビットのみにアクセスし、書き込みは上位ビットをクリアします。例外としてTBL命令があり、この命令はビット8と9を保持したまま下位バイトを変更します。
7 つのアキュムレータ即値命令は、14 ビットの PICmicro を基準にして番号が変更され、4 ビットではなく 3 ビットのオペコードに収まるようになっていますが、追加のソフトウェア割り込み命令と同様に、それらはすべて存在します。
いくつかの追加の命令があり、用語もいくつか変更されています (PICmicro OPTION レジスタは CONTrol レジスタと呼ばれ、PICmicro TRIS レジスタ 1 ~ 3 は I/O 制御レジスタ 5 ~ 7 と呼ばれます) が、同等のものは明らかです。
| 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の指示 | ||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | いいえ* | 操作なし | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | DAA † | C | 加算後の小数点調整 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 続き* | CONTレジスタへの書き込み(CONT ← W) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 睡眠* | スタンバイモードに入る(WDT ← 0、時計を停止) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | WDTC * | ウォッチドッグタイマーを再起動する(WDT ← 0) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | f | つまり、f † | WをI/O制御レジスタにコピーする(f = 5~7、11~15) | |||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | エニ† | 割り込みを有効にする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | ディシ† | 割り込みを無効にする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | RET | サブルーチンから戻り、Wは変更されない | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | レティ | 割り込みから戻る; 戻って割り込みを有効にする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | コントロール† | CONTレジスタの読み取り(W ← CONT) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | f | IOR f † | I/O制御レジスタをWにコピーする(f = 5~7、11~15) | |||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 表† | C | Z | PCL += W、PCビット8と9を保持 |
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | TBWR †‡ | フラッシュ書き込みを開始 | ||
| 0 | 0 | オペコード | d | 登録する | ALU演算は12ビットおよび14ビットPICと同じ | |||||||||||
| 0 | 1 | OPCC | 少し | 登録する | 12ビットおよび14ビットPICと同じビット操作 | |||||||||||
| 1 | 0 | c | け | 制御転送は14ビットPICと同じ | ||||||||||||
| 1 | 1 | オペコード | 8ビット即値 | Wと8ビットリテラルの演算: W ← OP(k,W) | ||||||||||||
| 1 | 1 | 0 | op | け | MOV/IOR/AND/XOR、12ビットPICと同じ | |||||||||||
| 1 | 1 | 1 | 0 | 0 | け | RETLW k | W ← k、その後サブルーチンから戻る | |||||||||
| 1 | 1 | 1 | 0 | 1 | け | サブLW k | C | Z | W ← k−W (W ← k+~W+1) | |||||||
| 1 | 1 | 1 | 1 | 0 | 0 | け | INT k † | PC をプッシュ、PC ← k (ソフトウェア割り込み、通常は k=1) | ||||||||
| 1 | 1 | 1 | 1 | 1 | け | 追加k | C | Z | W ← k+W | |||||||
| 1 | 1 | 1 | 1 | 0 | 1 | オペコード | け | 拡張(後期モデルではk≥128をINT kに置き換える) [ 8 ] [ 9 ] [ 10 ] | ||||||||
| 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | け | ページk | ROMページkを選択(MOVLP kと同様) | |||||
| 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | け | バンクk † | RAMバンクkを選択 | |||||
| 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | け | LCALL k † | 17ビットアドレスによるロングコール(2ワード命令) | |||||
| 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | け | LJMP k † | 17ビットアドレスによるロングジャンプ(2ワード命令) | |||||
| 1 | 1 | 1 | 1 | 0 | 1 | 1 | f | TBRD f † | TBHP:TBLPのROMを指定されたレジスタに読み込む | |||||||
| 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
*: 12ビットPICと同じオペコード †: PICに相当する命令がないEM78命令セット固有の命令‡:フラッシュメモリモデル(EM78F724N) のみ
一部のモデルは、他のPICマイクロコントローラと同様に、複数のROM、RAM、または特殊用途レジスタバンクをサポートしています。特殊用途レジスタ0x5~0xFとRAMアドレス0x20~0x3Fにはそれぞれ独自のバンク選択ビットがあります。レジスタ0x0~0x4(バンク選択レジスタ0x1を含む)とRAMアドレス0x10~0x1Fはグローバルです。
命令セットには15ビット版もあり、レジスタ番号が8ビットに拡張され、呼び出しアドレスとジャンプアドレスが12ビットに拡張されている点を除けば、ほぼ同一である。その他の違いは以下の通りである。[ 11 ]
- CONTW、IOW、CONTR、IOR、INT命令は削除され、
- 8ビットリテラルの演算では、ビット8と9に2つの0ビットが追加されます。
- 4ビットリテラルの拡張では、ビット4と5に2つの0ビットが追加されます。
- PAGE 命令と BANK 命令は SBANK と GBANK に名前が変更され、それぞれ特殊用途レジスタと汎用 RAM のバンク部分でバンク切り替えを実行します。
第 2 世代の 15 ビット命令セットでは、アドレス空間が次のように拡張されます。
- 80個のデバイス制御レジスタ(最初の5個を除くすべてバンク化)
- 48バイトのバンクなしRAM(0x50~0x7F)と
- 128バイトのバンクRAM(0x80~0xFF)
これらには、いくつかの追加の指示も含まれます。
| 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の指示 | |||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | いいえ* | 操作なし | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | DAA * | C | 加算後の小数点調整 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 睡眠* | スタンバイモードに入る(WDT ← 0、時計を停止) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | WDTC * | ウォッチドッグタイマーを再起動する(WDT ← 0) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | マルウ† | 8×8 → 16ビット乗算 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | DIVW † | 8÷8 → 8,8ビット除算 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | エニ* | 割り込みを有効にする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | ディシ* | 割り込みを無効にする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | リターン* | サブルーチンから戻り、Wは変更されない | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | レティ* | 割り込みから戻る; 戻って割り込みを有効にする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | リセット | ソフトウェアリセット | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | TBWR | フラッシュROM書き込み | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | け | INT k | アドレス2×kでのソフトウェア割り込み | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 少し | f | BTG f、b | f のビット b を反転(トグル)する(アドレス範囲が制限されている) | |||||||
| 0 | 0 | オペコード | d | 登録する | ALU演算はEM78およびPICと同じ | |||||||||||||
| 0 | 1 | OPCC | 少し | 登録する | EM78やPICと同じビット操作 | |||||||||||||
| 1 | 0 | c | け | EM78および14ビットPICと同じ制御転送 | ||||||||||||||
| 1 | 1 | オペコード | 0 | 0 | 8ビット即値 | 8ビットリテラルの演算はEM78と同じ(INTを除く) | ||||||||||||
| 1 | 1 | オペコード | 登録または即時 | 命令セット拡張 | ||||||||||||||
| 1 | 1 | 0 | 0 | 0 | 0 | 1 | f | JE r | W = fの場合はスキップ | |||||||||
| 1 | 1 | 0 | 0 | 0 | 1 | 0 | f | JGE r | W > fの場合はスキップ | |||||||||
| 1 | 1 | 0 | 0 | 0 | 1 | 1 | f | JLE r | W < fの場合はスキップ | |||||||||
| 1 | 1 | 0 | 0 | 1 | 0 | 1 | け | JE k | W = kの場合はスキップ | |||||||||
| 1 | 1 | 0 | 0 | 1 | 1 | 0 | け | (予約済み) | ||||||||||
| 1 | 1 | 0 | 0 | 1 | 1 | 1 | f | TBRDA f | TBHP:TBLPのROMをfに読み込み、msbitsをWに格納する | |||||||||
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | け | SJCアドレス | キャリーセットの場合は PC + sext( k )にジャンプ | |||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | 0 | け | SJNCアドレス | PCにジャンプ +キャリークリアの場合は sext( k ) | |||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | 1 | け | SJZアドレス | ゼロフラグが設定されている場合は PC + sext( k )にジャンプ | |||||||||
| 1 | 1 | 0 | 1 | 1 | 0 | 1 | け | SJNZ住所 | ゼロフラグがクリアされている場合は PC + sext( k )にジャンプ | |||||||||
| 1 | 1 | 0 | 1 | 1 | 1 | d | f | RRA/RR f | dest ← f<<7 | f>>1、繰り上がりなしで右回転 | |||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 1 | f | XCH f | f ↔ W を交換 | |||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | d | f | RLA/RL f | dest ← f<<1 | f>>7、キャリーなしで左回転 | |||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 1 | f | 乗数f ‡ | PRODH:PRODL ← f × W | |||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | × | け | (予約済み) | ||||||||||
| 1 | 1 | 1 | 1 | 0 | 0 | d | f | SUBB | C | Z | dest ← f + ~W + C、繰り上がり減算 | |||||||
| 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | け | SBANK k * | 特殊機能レジスタバンクkを選択 | |||||
| 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | け | GBANK k * | RAMバンクkを選択 | |||||
| 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | け | LCALL k * | 19ビットアドレスによるロングコール(2ワード命令) | |||||
| 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | け | LJMP k * | 19ビットアドレスのロングジャンプ(2ワード命令) | |||||
| 1 | 1 | 1 | 1 | 0 | 1 | 1 | f | TBRD f * | TBHP:TBLPのROMをfに読み込む | |||||||||
| 1 | 1 | 1 | 1 | 1 | 0 | 1 | f | 負のf | C | Z | f ← −f (f ← ~f + 1)、反転 | |||||||
| 1 | 1 | 1 | 1 | 1 | 1 | d | f | ADC f | C | Z | dest ← f + W + C、繰り上がり加算 | |||||||
*: 13ビットEM78と同じオペコード †: EM89F768Nのみ; オペランドと結果は特殊レジスタに格納されます ‡: EM88F794N、MTF213、MTF351のみ
Holtek クローン (14、15、または 16 ビット)
Holtekは、ミッドレンジコア(非拡張版)と同等の14ビット命令語を備えた8ビットマイクロコントローラを多数製造しています。命令エンコーディングはすべて14ビットに収まり、7ビットのオペランドアドレスを提供します。
命令フォーマットはMicrochip社のものと同一ですが、オペコードの割り当て順序が異なり、メーカーは異なる命令ニーモニックを使用しています。アキュムレータはWではなくACCと呼ばれ、デスティネーションはオペランドではなく命令ニーモニックの接尾辞で指定されます。(アキュムレータをデフォルトで使用しない命令はメモリに書き戻し、デスティネーションがアキュムレータであることを示すためにA接尾辞を使用します。2オペランド命令はデフォルトでアキュムレータに書き込み、デスティネーションがメモリであることを示すためにM接尾辞を使用します。)
異なるオペコードの割り当てに加えて、いくつかの命令には意味上の違いがあります。
- 減算命令はアキュムレータからオペランドを減算しますが、Microchip の減算命令はその逆を行います。(これにより、減算即値命令は負数の加算と同等になるため、冗長になります。)
- アキュムレータへの移動命令とクリア命令はフラグを変更しません。
- ゼロ、キャリー、および数字キャリーフラグ (Holtek では AC と呼ばれます) に加えて、AC を設定するのと同じ加算命令と減算命令によって設定されるオーバーフロー フラグがあります。
14 ビット PICmicro のレパートリーにいくつかの操作が追加されました。
- キャリーなしで1ビット左と右に回転します。
- オペランドをすべて1に設定する。
- オペランドがゼロの場合はスキップする(最初に増分または減分せずに)。
- オペランドがゼロ以外の場合はスキップする(一部のモデル)
- 繰り上がりのある加算と減算、
- 2進化10進演算の場合、加算後の小数点調整、および
- プログラムROMから読み出し、テーブル検索を行います。この方法では、TBHPレジスタとTBLPレジスタを16ビットポインタとして使用し、そこからワードをフェッチし、下位バイトを指定された位置に格納します。フェッチされたワードの上位6~8ビットはTBLHレジスタに格納されます。2つ目の形式では、TBLPレジスタのみを使用し、ROMの最上位256バイトページから読み出します。一部のモデルには、TBLPレジスタをプリインクリメントするバリアントが含まれています。
- ほとんどのモデルは、ウォッチドッグタイマーをリセットするための2番目の命令をサポートしています。この命令は最初の命令と交互に実行する必要があります。1つの命令の繰り返しは無視されます。これにより、2つの独立したウォッチドッグルーチンを実行でき、どちらかの命令が失敗するとウォッチドッグが起動します。
- Holtekは、拡張14ビットPICと同様に、2つの間接アドレス指定レジスタを提供しています。一部のモデル(HT66F70Aなど)は3つの間接アドレス指定レジスタを提供しています。最初の間接アドレス指定レジスタ(IAR0)は8ビットアドレスレジスタ(MP0)を使用し、常にRAMの下位バンクをアドレス指定します。IAR1とIAR2は追加のRAMアドレスビット(MP1HとMP2H)を提供し、RAMの追加のバンクへのアクセスを可能にします。[ 14 ]
15ビットモデルでは、命令のビット14を8番目のオペランドアドレスビットと12番目のCALL/JMPターゲットアドレスビットとして使用します。16ビットモデルでは、13番目のCALL/JMPターゲットアドレスビットが追加されますが、9番目のオペランドアドレスビットは追加されません。[ 15 ]
代わりに、一部の16ビットモデルは拡張命令セットをサポートしています。これにより、いくつかの新しい命令(インクリメントなしのバイトスキップ、キャリー付き即値減算、アドレスインクリメント付きROM読み出し)が追加されるだけでなく、すべてのメモリ命令に2ワードの「ロング」型が追加されます。オペコードのビット15がセットされている場合、オペコードのビット0~6および14の8ビットオペランドアドレスが、後続の命令ワードのビット0~7を使用して16ビットに拡張されることを示します。このような命令はLプレフィックス(ADDではなくLADD)で記述され、実行に1サイクル追加されます。[ 14 ]
| 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | PIC相当 | C ? | Z ? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の指示 | ||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | いいえ | いいえ | 操作なし | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | CLR WDT1 | CLRWDT | ウォッチドッグタイマーを再起動する | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 停止 | 寝る | 低電力モードに入る | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | RET | 戻る | サブルーチンからの戻り | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | レティ | レティフィー | 割り込みからの復帰 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | CLR WDT2 | ≈CLRWDT | ウォッチドッグタイマーを再起動する | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | × | (予約済み) | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | ≠0 | × | × | × | (予約済み) | |||||||
| 0 | 0 | 0 | オペコード | d | 住所 | ALU演算パート1: dest ← OP(ACC,[m]) * | ||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | メートル | MOV [ m ],A | MOVWF m | [m] ← ACC | ||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | d | メートル | CPLA/CPL [男性] | COMF m、d | Z | dest ← ~[m], ビット補数 | |||||||
| 0 | 0 | 0 | 0 | 1 | 0 | d | メートル | SUB/SUBM A,[ m ] | ≠SUBWF m , d | C | Z | 宛先 ← ACC − [m] (宛先 ← ACC+~[m]+1) | ||||||
| 0 | 0 | 0 | 0 | 1 | 1 | d | メートル | ADD/ADDM A,[ m ] | ADDWF m、d | C | Z | 目的地 ← ACC + [m] | ||||||
| 0 | 0 | 0 | 1 | 0 | 0 | d | メートル | XOR/XORM [ m ] | XORWF m、d | Z | dest ← ACC ^ [m]、排他的論理和 | |||||||
| 0 | 0 | 0 | 1 | 0 | 1 | d | メートル | OR/ORM [ m ] | IORWF m、d | Z | dest ← ACC | [m]、論理和 | |||||||
| 0 | 0 | 0 | 1 | 1 | 0 | d | メートル | AND/ANDM [ m ] | ANDWF m、d | Z | dest ← ACC & [m]、論理積 | |||||||
| 0 | 0 | 0 | 1 | 1 | 1 | 0 | メートル | 移動 A,[ m ] | ≈MOVF m ,0 | ACC ← [メートル] | ||||||||
| 0 | 0 | 0 | 1 | 1 | 1 | 1 | メートル | — | ≈MOVF m ,1 | [メートル] ← [メートル] | ||||||||
| 0 | 0 | 1 | オペコード | 8ビット即値 | 8ビットリテラルを使った演算: ACC ← OP(ACC,k) | |||||||||||||
| 0 | 0 | 1 | 0 | 0 | 0 | け | SBC A、k † | — | C | Z | ACC ← ACC + ~[m] + C、繰り上がり減算 | |||||||
| 0 | 0 | 1 | 0 | 0 | 1 | け | RET A、k | RETLW k | ACC ← k、その後サブルーチンから戻る | |||||||||
| 0 | 0 | 1 | 0 | 1 | 0 | け | サブA、k | ≠SUBLW k | C | Z | ACC ← ACC − k (ACC ← ACC+~k+1) | |||||||
| 0 | 0 | 1 | 0 | 1 | 1 | け | A、kを追加 | 追加k | C | Z | ACC ← ACC + k | |||||||
| 0 | 0 | 1 | 1 | 0 | 0 | け | XOR A、k | XORLW k | Z | ACC ← ACC ^ k、排他的論理和 | ||||||||
| 0 | 0 | 1 | 1 | 0 | 1 | け | またはA、k | IORLW k | Z | ACC ← ACC | k、論理和 | ||||||||
| 0 | 0 | 1 | 1 | 1 | 0 | け | そしてA、k | ANDLW k | Z | ACC ← ACC & k、論理積 | ||||||||
| 0 | 0 | 1 | 1 | 1 | 1 | け | 移動 A、k | MOVLW k | ACC ← k | |||||||||
| 0 | 1 | オペコード | d | 住所 | ALU演算パート2: dest ← OP(ACC,[m]) * | |||||||||||||
| 0 | 1 | 0 | 0 | 0 | 0 | d | メートル | SZA/SZ [メートル] | — | dest ← [m], ゼロの場合は次の命令をスキップ | ||||||||
| 0 | 1 | 0 | 0 | 0 | 1 | d | メートル | SWAPA/SWAP [ m ] | SWAPF m、d | dest ← [m]<<4 | [m]>>4、ニブルを交換 | ||||||||
| 0 | 1 | 0 | 0 | 1 | 0 | d | メートル | SBC/SBCM A,[ m ] | ≠SUBWFB m , d | C | Z | dest ← ACC + ~[m] + C、繰り上がり減算 | ||||||
| 0 | 1 | 0 | 0 | 1 | 1 | d | メートル | ADC/ADCM A,[ m ] | ADDWFC m、d | C | Z | dest ← ACC + [m] + C、繰り上がり加算 | ||||||
| 0 | 1 | 0 | 1 | 0 | 0 | d | メートル | インカ/INC [メートル] | INCF m、d | Z | 目的地 ← [m] + 1 | |||||||
| 0 | 1 | 0 | 1 | 0 | 1 | d | メートル | デカ/デック [メートル] | DECF m、d | Z | 目的地 ← [m] − 1 | |||||||
| 0 | 1 | 0 | 1 | 1 | 0 | d | メートル | サイズ/SIZ [ m ] | INCFSZ m、d | dest ← [m] + 1、ゼロの場合はスキップ | ||||||||
| 0 | 1 | 0 | 1 | 1 | 1 | d | メートル | SDZA/SDZ [メートル] | DECFSZ m、d | dest ← [m] − 1、ゼロの場合はスキップ | ||||||||
| 0 | 1 | 1 | 0 | 0 | 0 | d | メートル | RLA/RL [メートル] | — | dest ← [m] << 1 | [m] >> 7、1ビット左に回転 | ||||||||
| 0 | 1 | 1 | 0 | 0 | 1 | d | メートル | RRA/RR [メートル] | — | dest ← [m] << 7 | [m] >> 1、右に1ビット回転 | ||||||||
| 0 | 1 | 1 | 0 | 1 | 0 | d | メートル | RLCA/RLC [メートル] | RLF m、d | C | dest ← [m] << 1 | C、繰り上がりで左回転 | |||||||
| 0 | 1 | 1 | 0 | 1 | 1 | d | メートル | RRCA/RRC [メートル] | RRF m、d | C | dest ← C << 7 | [m] >> 1、繰り上がりで右回転 | |||||||
| 0 | 1 | 1 | 1 | オペコード | 住所 | 特殊操作: [m] ← 特殊* | ||||||||||||
| 0 | 1 | 1 | 1 | 0 | 0 | 0 | メートル | ITABRD [ m ] † | — | TBLH:[m] ← ROM[TBHP:++TBLP](プリインクリメント付き) | ||||||||
| 0 | 1 | 1 | 1 | 0 | 0 | 1 | メートル | ITABRDL [ m ] † | — | TBLH:[m] ← ROM[0xff:++TBLP](プリインクリメント付き) | ||||||||
| 0 | 1 | 1 | 1 | 0 | 1 | 0 | メートル | タブルド [ m ] | — | TBLH:[m] ← ROM[TBHP:TBLP]、テーブル検索 | ||||||||
| 0 | 1 | 1 | 1 | 0 | 1 | 1 | メートル | タブル文字 [ m ] | — | TBLH:[m] ← ROM[0xff:TBLP]、ROMの最後のページから読み取る | ||||||||
| 0 | 1 | 1 | 1 | 1 | 0 | 0 | メートル | SNZ [ m ] † | — | [m] ← [m]、ゼロでない場合は次の命令をスキップ | ||||||||
| 0 | 1 | 1 | 1 | 1 | 0 | 1 | メートル | DAA [メートル] | — | C | [m] ← DAA(ACC)、BCD加算後の小数点調整 | |||||||
| 0 | 1 | 1 | 1 | 1 | 1 | 0 | メートル | CLR [メートル] | ≈CLRF m | [メートル] ← 0 | ||||||||
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | メートル | 設定 [ m ] | — | [メートル] ← 255 | ||||||||
| 1 | 0 | c | け | 管理権の移転 | ||||||||||||||
| 1 | 0 | 0 | け | コールk | コールk | サブルーチンを呼び出す | ||||||||||||
| 1 | 0 | 1 | け | JMP k | 後藤k | アドレスkにジャンプ | ||||||||||||
| 1 | 1 | OPCC | 少し | 住所 | ビット操作* | |||||||||||||
| 1 | 1 | 0 | 0 | 少し | メートル | SET [ m ] .b | BSF m、b | [m]のビットbを設定する | ||||||||||
| 1 | 1 | 0 | 1 | 少し | メートル | CLR [ m ] 。b | BCF m、b | [m]のビットbをクリアする | ||||||||||
| 1 | 1 | 1 | 0 | 少し | メートル | SNZ [ m ] 。b | BTFSS m、b | [m]のビットbが設定されている場合はスキップする | ||||||||||
| 1 | 1 | 1 | 1 | 少し | メートル | SZ [ m ] 。b | BTFSC m、b | [m]のビットbがクリアされている場合はスキップする | ||||||||||
| 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | PIC相当 | C ? | Z ? | 説明 |
*: 拡張命令セットを備えた 16 ビット モデルでは長い形式で命令が使用できます。 †: 拡張命令セットを備えた 16 ビット モデルでのみ命令が使用できます。
Padauk マイクロコントローラ (13、14、15、または 16 ビット)
パダウクテクノロジーは、 PICに似たマイクロコントローラのシリーズを製造しており、その非常に低価格で有名で、大量購入時の価格は0.033米ドルから始まり、 [ 17 ]多くのモデルは0.10米ドル未満です。[ 18 ] [ 19 ] [ 20 ]
明らかにマイクロチップPIC12シリーズから派生したものですが[ 18 ] [ 21 ] 、いくつか重要な違いがあります。
- 間接メモリ アクセスを実行するために FSR/INDF メカニズムは使用せず、代わりに任意の RAM 位置をポインタとして使用する間接ロードおよびストア命令を使用します。
- スタック ポインタ レジスタを備えた RAM ベースの呼び出しスタックを使用します。
- キャリーフラグは、減算に、Microchip が使用する「キャリー ビット」規則ではなく、「借用ビット」規則を使用します。
- これらには符号付きオーバーフロー フラグも含まれており、これは数字のキャリーと同様に、加算、減算、比較命令 (シフト命令を除くキャリー フラグを設定するすべての命令) によって設定されます。
- これらには別々の RAM と I/O レジスタのアドレス空間 (13 ビット命令セットではそれぞれ 64 バイトと 32 バイト) があります。
- ビット操作は I/O 空間と最初の 16 個の RAM アドレスに制限されます。
- メモリソースとアキュムレータ宛先を持つ単一オペランド命令は省略されます。
- アキュムレータのソースとデスティネーションを持つ単一オペランド命令が提供されます。
- 減算演算は、宛先 − ソースを計算し、宛先に応じて入力オペランドを交換します。
- 動作速度が速く、ほとんどの命令に1サイクル、制御転送に2サイクルかかります。
- 一部のモデルは、実行がインターリーブされる複数の実行コンテキストを持つ、時間的なマルチスレッドをサポートしています。
| 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | PIC相当 | C ? | Z ? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の指示 | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | いいえ | いいえ | 操作なし | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | (予約済み) | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | × | (予約済み) | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | × | (予約済み) | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | LDSPTL | — | A ← ROM[[SP]]、スタックの先頭の16ビットポインタを使用してROMワードの下位/上位バイトをロードする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | LDSPTH | — | |||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | (予約済み) | ||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | オペコード | アキュムレータの1オペランド命令メモリの1オペランド命令(下記)と同様だが、 | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | PCADD A | ≈ADDWF PCL、1 | PC ← PC + A、プログラムカウンタに追加( | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | スワップA | — | A ← A<<4 | A>>4、ニブルを交換( | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (予約済み) | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | オペコード | システム制御命令 | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | WDリセット | CLRWDT | ウォッチドッグタイマーを再起動する | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | (予約済み) | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | プシャフ | — | Aをプッシュし、スタックの一番上にフラグを置く | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | ポップアフ | — | C | Z | フラグをポップし、スタックの上から A をポップする |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | (予約済み) | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | リセット | リセット | ソフトウェアリセット | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | ストップシス | 寝る | スタンバイモードに入る(時計が停止する) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | ストップエックス | — | スタンバイモードに入る(時計は動いている) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | ENGINT | BSF INTCON、GIE | 割り込みを有効にする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | ディスギント | BCF INTCON、GIE | 割り込みを無効にする | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | RET | 戻る | サブルーチンAからの戻り値、変更なし | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | レティ | レティフィー | 割り込みからの復帰 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | マル | — | MULRH:A ← A × MULOP(全機種対応ではありません) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | (予約済み) | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | × | (予約済み) | ||||
| 0 | 0 | 0 | 0 | 0 | オペコード | ioaddr | バイト幅のI/O操作 | ||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | ioaddr | XOR ioaddr、A | — | IO[ioaddr] ← A ^ IO[address] | ||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | ioaddr | MOV ioaddr ,A | — | IO[ioaddr] ← A | ||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | ioaddr | MOV A、ioaddr | — | Z | A ← IO[ioaddr] | |||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | c | 住所 | c | 16ビット操作(RAMアドレス制限、偶数) | |||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 住所 | 0 | STT16アドレス | — | タイマー16 ← [アドレス] | |||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 住所 | 1 | LDT16アドレス | — | [アドレス] ← タイマー16 | |||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 住所 | 0 | IDXMアドレス、A | — | [[アドレス]] ← A、間接メモリアドレス | |||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 住所 | 1 | IDXM A、アドレス | — | A ← [[アドレス]], 間接メモリアドレス | |||||
| 0 | 0 | 0 | 0 | 1 | け | リテラル定数を返す | |||||||||||
| 0 | 0 | 0 | 0 | 1 | け | RET k | RETLW k | A ← k、そしてサブルーチンから戻る | |||||||||
| 0 | 0 | 0 | 1 | c | 少し | c | 住所 | RAM でのビット操作 (最初の 16 バイトのみ) | |||||||||
| 0 | 0 | 0 | 1 | 0 | 少し | 0 | 住所 | T0SNアドレスb | BTFSCアドレス、b | [ addr ] のビットbがクリアされている場合はスキップする | |||||||
| 0 | 0 | 0 | 1 | 0 | 少し | 1 | 住所 | T1SNアドレスb | BTFSSアドレス、b | [ addr ] のビットbが設定されている場合はスキップします | |||||||
| 0 | 0 | 0 | 1 | 1 | 少し | 0 | 住所 | SET0アドレスb | BCFアドレス、b | [ addr ] のビットbをクリアする | |||||||
| 0 | 0 | 0 | 1 | 1 | 少し | 1 | 住所 | SET1アドレスb | BSFアドレス、b | [ addr ] のビットbを設定する | |||||||
| 0 | 0 | 1 | d | オペコード | 住所 | Aとメモリ間のALU演算 | |||||||||||
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 住所 | ADDアドレス、A | ADDWFアドレス、1 | C | Z | [住所] ← [住所] + A | |||||
| 0 | 0 | 1 | 0 | 0 | 0 | 1 | 住所 | SUBアドレス、A | SUBWFアドレス、1 | C | Z | [住所] ← [住所] − A | |||||
| 0 | 0 | 1 | 0 | 0 | 1 | 0 | 住所 | ADDC アドレス、A | ADDWFCアドレス、1 | C | Z | [住所] ← [住所] + A + C | |||||
| 0 | 0 | 1 | 0 | 0 | 1 | 1 | 住所 | SUBC アドレス、A | ≈SUBWFB アドレス、1 | C | Z | [住所] ← [住所] − A − C | |||||
| 0 | 0 | 1 | 0 | 1 | 0 | 0 | 住所 | ANDアドレス、A | ANDWFアドレス、1 | Z | [ addr ] ← [ addr ] & A、論理積 | ||||||
| 0 | 0 | 1 | 0 | 1 | 0 | 1 | 住所 | またはアドレス、A | IORWFアドレス、1 | Z | [ addr ] ← [ addr ] | A、論理和 | ||||||
| 0 | 0 | 1 | 0 | 1 | 1 | 0 | 住所 | XORアドレス、A | XORWFアドレス、1 | Z | [ addr ] ← [ addr ] ^ A、排他的論理和 | ||||||
| 0 | 0 | 1 | 0 | 1 | 1 | 1 | 住所 | MOVアドレス、A | MOVWFアドレス | [住所] ← A | |||||||
| 0 | 0 | 1 | 1 | 0 | 0 | 0 | 住所 | ADD A、アドレス | ADDWFアドレス、0 | C | Z | A ← A + [住所] | |||||
| 0 | 0 | 1 | 1 | 0 | 0 | 1 | 住所 | SUB A、アドレス | ≠SUBWFアドレス,0 | C | Z | A ← A − [住所] | |||||
| 0 | 0 | 1 | 1 | 0 | 1 | 0 | 住所 | ADDC A、アドレス | ADDWFCアドレス、0 | C | Z | A ← A + [住所] + C | |||||
| 0 | 0 | 1 | 1 | 0 | 1 | 1 | 住所 | SUBC A、アドレス | ≠SUBWFB アドレス、0 | C | Z | A ← A − [住所] − C | |||||
| 0 | 0 | 1 | 1 | 1 | 0 | 0 | 住所 | AND A、アドレス | ANDWFアドレス、0 | Z | A ← [A] & [ addr ]、論理積 | ||||||
| 0 | 0 | 1 | 1 | 1 | 0 | 1 | 住所 | またはA、アドレス | IORWFアドレス、0 | Z | A ← A | [ addr ]、論理和 | ||||||
| 0 | 0 | 1 | 1 | 1 | 1 | 0 | 住所 | XOR A、アドレス | XORWFアドレス、0 | Z | A ← A ^ [ addr ]、排他的論理和 | ||||||
| 0 | 0 | 1 | 1 | 1 | 1 | 1 | 住所 | MOV A、アドレス | MOVFアドレス、0 | Z | A ← [住所] | ||||||
| 0 | 1 | 0 | オペコード | 住所 | メモリ上の1オペランド演算 | ||||||||||||
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 住所 | ADDCアドレス | — | C | Z | [住所] ← [住所] + C | |||||
| 0 | 1 | 0 | 0 | 0 | 0 | 1 | 住所 | SUBCアドレス | — | C | Z | [住所] ← [住所] − C | |||||
| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 住所 | IZSNアドレス | INCFSZアドレス、1 | C | Z | [ addr ] ← [ addr ] + 1、ゼロの場合はスキップ | |||||
| 0 | 1 | 0 | 0 | 0 | 1 | 1 | 住所 | DZSNアドレス | DECFSZアドレス、1 | C | Z | [ addr ] ← [ addr ] − 1、ゼロの場合はスキップ | |||||
| 0 | 1 | 0 | 0 | 1 | 0 | 0 | 住所 | INCアドレス | INCFアドレス、1 | C | Z | [住所] ← [住所] + 1 | |||||
| 0 | 1 | 0 | 0 | 1 | 0 | 1 | 住所 | 12進アドレス | DECFアドレス、1 | C | Z | [住所] ← [住所] − 1 | |||||
| 0 | 1 | 0 | 0 | 1 | 1 | 0 | 住所 | クリアアドレス | ≈CLRFアドレス | [住所] ← 0 | |||||||
| 0 | 1 | 0 | 0 | 1 | 1 | 1 | 住所 | XCHアドレス | — | A ← [住所], [住所] ← A | |||||||
| 0 | 1 | 0 | 1 | 0 | 0 | 0 | 住所 | アドレスではない | COMFアドレス、1 | Z | [ addr ] ← ~[ addr ], ビット補数 | ||||||
| 0 | 1 | 0 | 1 | 0 | 0 | 1 | 住所 | NEGアドレス | — | Z | [ addr ] ← −[ addr ], 反転 | ||||||
| 0 | 1 | 0 | 1 | 0 | 1 | 0 | 住所 | SRアドレス | ≈LSRFアドレス、1 | C | [ addr ] ← [ addr ] >> 1、論理右シフト | ||||||
| 0 | 1 | 0 | 1 | 0 | 1 | 1 | 住所 | SLアドレス | ≈LSLFアドレス、1 | C | [ addr ] ← [ addr ] << 1、左シフト | ||||||
| 0 | 1 | 0 | 1 | 1 | 0 | 0 | 住所 | SRCアドレス | RRFアドレス、1 | C | [ addr ] ← C << 7 | [ addr ] >> 1、キャリーを挟んで右回転 | ||||||
| 0 | 1 | 0 | 1 | 1 | 0 | 1 | 住所 | SLCアドレス | RLFアドレス、1 | C | [ addr ] ← [ addr ] << 1 | C、キャリーを左に回転 | ||||||
| 0 | 1 | 0 | 1 | 1 | 1 | 0 | 住所 | CEQSNアドレス | — | C | Z | A − [ addr ] を計算し、ゼロの場合はスキップする | |||||
| 0 | 1 | 0 | 1 | 1 | 1 | 1 | 住所 | (CNEQSN 用に予約済み) | |||||||||
| 0 | 1 | 1 | OPCC | 少し | 住所 | I/Oによるビット操作 | |||||||||||
| 0 | 1 | 1 | 0 | 0 | 少し | 住所 | T0SN ioaddr . b | BTFSC ioaddr、b | [ ioaddr ] のビットbがクリアされている場合はスキップする | ||||||||
| 0 | 1 | 1 | 0 | 1 | 少し | 住所 | T1SN ioaddr . b | BTFSS ioaddr、b | [ ioaddr ] のビットbが設定されている場合はスキップする | ||||||||
| 0 | 1 | 1 | 1 | 0 | 少し | 住所 | SET0 ioaddr . b | BCF ioaddr、b | [ ioaddr ] のビットbをクリアする | ||||||||
| 0 | 1 | 1 | 1 | 1 | 少し | 住所 | SET1 ioaddr . b | BSF ioaddr、b | [ ioaddr ] のビットbを設定する | ||||||||
| 1 | 0 | オペコード | リテラル | リテラル演算: A ← OP(A, k ) | |||||||||||||
| 1 | 0 | 0 | 0 | 0 | け | A、kを追加 | 追加k | C | Z | A ← A + k | |||||||
| 1 | 0 | 0 | 0 | 1 | け | サブA、k | ≠SUBLW k | C | Z | A ← A − k | |||||||
| 1 | 0 | 0 | 1 | 0 | け | CEQSN A、k | — | C | Z | A − kを計算し、ゼロの場合はスキップする | |||||||
| 1 | 0 | 0 | 1 | 1 | け | (CNEQSN 用に予約済み) | |||||||||||
| 1 | 0 | 1 | 0 | 0 | け | そしてA、k | ≈ANDLW k | Z | A ← A & k | ||||||||
| 1 | 0 | 1 | 0 | 1 | け | またはA、k | ≈IORLW k | Z | A ← A | k | ||||||||
| 1 | 0 | 1 | 1 | 0 | け | XOR A、k | ≈XORLW k | Z | A ← A ^ k | ||||||||
| 1 | 0 | 1 | 1 | 1 | け | 移動 A、k | MOVLW k | A ← k | |||||||||
| 1 | 1 | c | け | 制御転送: PC ← k | |||||||||||||
| 1 | 1 | 0 | け | 後藤k | 後藤k | PC ← k | |||||||||||
| 1 | 1 | 1 | け | コールk | コールk | PCを押してから、PC ← kを押します | |||||||||||
| 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | PIC相当 | C ? | Z ? | 説明 |
14 ビット、15 ビット、16 ビットの命令セットは、主にアドレス フィールドが広い点が異なりますが、いくつかの追加命令 (CNEQSN比較を実行して等しくない場合はスキップする など) を可能にするためにエンコードの変更が行われます。
| 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | PIC相当 | C ? | Z ? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の命令は13ビットと同じ | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | (予約済み) | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | (予約済み) | ||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (予約済み) | ||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | オペコード | Aの1オペランド命令は13ビットと同じ | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | オペコード | システム制御命令は13ビットと同じ | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (予約済み) | |||||||||
| 0 | 0 | 0 | 0 | 0 | オペコード | 住所 | バイト幅のI/O操作は13ビットと同じですが、オペコードが変更されました | |||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | ioaddr | XOR ioaddr、A | — | IO[ioaddr] ← A ^ IO[address] | |||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (予約済み) | ||||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | ioaddr | MOV ioaddr ,A | — | IO[ioaddr] ← A | |||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ioaddr | MOV A、ioaddr | — | Z | A ← IO[ioaddr] | ||||||
| 0 | 0 | 0 | 0 | 1 | 0 | け | 13ビットと同じリテラル定数を返す | |||||||||||
| 0 | 0 | 0 | 0 | 1 | 1 | c | 住所 | c | 16ビット操作は13ビットと同じですが、範囲は128バイトです | |||||||||
| 0 | 0 | 0 | 1 | 0 | 少し | 住所 | ビットをI/Oにコピー | |||||||||||
| 0 | 0 | 0 | 1 | 0 | 少し | 住所 | SWAPC ioaddr . b | — | C | キャリーを[ ioaddr ]ビットbと交換する | ||||||||
| 0 | 0 | 0 | 1 | 1 | c | d | 住所 | 追加の2オペランド演算 | ||||||||||
| 0 | 0 | 0 | 1 | 1 | 0 | 0 | 住所 | COMP A、アドレス | — | C | Z | A − [アドレス]、フラグ設定、結果は破棄 | ||||||
| 0 | 0 | 0 | 1 | 1 | 0 | 1 | 住所 | COMPアドレス、A | — | C | Z | [ addr ] − A、フラグ設定、結果は破棄 | ||||||
| 0 | 0 | 0 | 1 | 1 | 1 | 0 | 住所 | NADD A、アドレス | SUBWF アドレス、0 | C | Z | A ← [住所] + −A (A ← [住所] + ~A + 1) | ||||||
| 0 | 0 | 0 | 1 | 1 | 1 | 1 | 住所 | NADDアドレス、A | — | C | Z | [住所] ← A + −[住所] ([住所] ← A + ~[住所] + 1) | ||||||
| 0 | 0 | 1 | d | オペコード | 住所 | 2オペランド命令は13ビットと同じ | ||||||||||||
| 0 | 1 | 0 | オペコード | 住所 | 13ビットと同じメモリ上の1オペランド演算、さらにCNEQSN | |||||||||||||
| 0 | 1 | 0 | 1 | 1 | 1 | 1 | 住所 | CNEQSNアドレス | — | C | Z | A − [ addr ] を計算し、ゼロでない場合はスキップする | ||||||
| 0 | 1 | 1 | OPCC | 少し | ioaddr | 13ビットと同じI/Oでのビット操作ですが、範囲は64バイトです | ||||||||||||
| 1 | 0 | 0 | OPCC | 少し | 住所 | 13ビットと同じメモリでのビット操作ですが、範囲は64バイトです | ||||||||||||
| 1 | 0 | 1 | オペコード | リテラル | リテラル演算は13ビットと同じ、さらにCNEQSN | |||||||||||||
| 1 | 0 | 1 | 0 | 1 | 1 | け | CNEQSN A、k | — | C | Z | A − kを計算し、ゼロでない場合はスキップする | |||||||
| 1 | 1 | c | け | 制御転送は13ビットと同じ | ||||||||||||||
| 1 13 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | PIC相当 | C ? | Z ? | 説明 |
PIC18ハイエンドコアデバイス(16ビット)
2000年、マイクロチップ社はPIC18アーキテクチャを発表しました。[ 26 ] 17シリーズとは異なり、PIC18は非常に人気があり、現在も多数のデバイスバリエーションが製造されています。以前のデバイスではアセンブリ言語でプログラミングされることが多かったのに対し、C言語が主流の開発言語となっています。[ 27 ]
PIC18は12ビットのRAMアドレス空間を持ち、256バイト×16ページに分割されています。8ビットのフィールドは、ビットと4ビットのバンク選択レジスタ()fとの組み合わせでアドレスを決定します。 =0の場合、は無視され、フィールドは0x000~0x07F(グローバルRAM)または0xF80~0xFFF(特殊機能レジスタ)の範囲に符号拡張されます。=1の場合、フィールドは で拡張され、12ビットのアドレスが生成されます。 aBSRaBSRfafBSR
PIC18 は、以前の PICmicro プロセッサで間接アドレス指定に使用されていた FSR/メカニズムを 2 つの方法で拡張します。INDF
まず、3つのファイル選択レジスタを備えています。これらのレジスタは12ビット長(それぞれが2つの8ビット部分に分割され、から まで)で、対応するレジスタ(から)へのアクセスは、アドレス指定されたバイトのエイリアスとして機能します。 FSRnFSR0LFSR2HINDFnINDF0INDF2
2つ目は、アドレッシングモードです。3つのモードそれぞれに1つではなく5つのレジスタがあり、使用されるレジスタによってアドレッシングモードが決まります。 INDFn
INDFn: 位置のバイトにアクセスFSRnPOSTDECn: のバイトにアクセスし、デクリメントするFSRnFSRnPOSTINCn: のバイトにアクセスし、インクリメントするFSRnFSRnPREINCn: をインクリメントし、インクリメントされたバイトにアクセスしますFSRnFSRnPLUSWn: バイトにアクセスします(インデックス アドレス指定)。FSRn + W
12 ビット アドレスを持つ FSR ペアを直接ロードする命令や、MOVFF2 つの 12 ビット アドレス間でバイトを移動する命令もあります。
| 1 5 | 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | ん? | 説明 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | オペコード | その他の指示 | ||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | いいえ | 操作なし | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 寝る | スタンバイモードに入る | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT | ウォッチドッグタイマーを再起動する | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 押す | PCをスタックの一番上にプッシュする | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | ポップ | スタックの一番上をポップ(そして捨てる) | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | DAW | C | 小数点調整 W | |||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | TBLRD∗ | 表の読み取り: TABLAT ← mem[TBLPTR] | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | TBLRD∗+ | ポストインクリメントによるテーブル読み取り | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | TBLRD∗− | ポストデクリメントによるテーブル読み取り | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | TBLRD+∗ | 事前増分によるテーブル読み取り | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | モッド | TBLWR | テーブル書き込み、TBLRDと同じモード | |||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | s | RETFIE [, FAST] | 割り込みからの復帰 | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | s | 戻る [, 高速] | サブルーチンからの戻り | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | コールW * | PCを押してPCLATU:PCLATH:Wにジャンプします | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | リセット | 0 | 0 | 0 | ソフトウェアリセット | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | —0— | け | MOVLB | リテラルkをバンク選択レジスタに 移動する | ||||||||||
| 0 | 0 | 0 | 0 | 1 | オペコード | リテラル | リテラル演算: W ← OP(k,W) | ||||||||||||||
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | け | サブLW k | W ← k − W | |||||||||||
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | け | IORLW k | W ← k | W、論理和 | |||||||||||
| 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | け | XORLW k | W ← k ^ W、排他的論理和 | |||||||||||
| 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | け | ANDLW k | W ← k & W、論理積 | |||||||||||
| 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | け | RETLW k | リターン W ← k | |||||||||||
| 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | け | MULLW k | W ← k × W | |||||||||||
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | け | MOVLW k | W ← k | |||||||||||
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | け | 追加k | W ← k + W | |||||||||||
| 0 | オペコード | d | 1つの | 登録する | ALU演算: dest ← OP(f,W) | ||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1つの | f | MULWF f、a | PRODH:PRODL ← W × f (符号なし) | |||||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | d | 1つの | f | DECF f、d、a | C | Z | 北 | 宛先 ← f − 1 | ||||||||
| 0 | 0 | 0 | 1 | 0 | 0 | d | 1つの | f | IORWF f、d、a | Z | 北 | dest ← f | W、論理和 | |||||||||
| 0 | 0 | 0 | 1 | 0 | 1 | d | 1つの | f | ANDWF f、d、a | Z | 北 | dest ← f & W、論理積 | |||||||||
| 0 | 0 | 0 | 1 | 1 | 0 | d | 1つの | f | XORWF f , d , a | Z | 北 | dest ← f ^ W、排他的論理和 | |||||||||
| 0 | 0 | 0 | 1 | 1 | 1 | d | 1つの | f | COMF f、d、a | Z | 北 | dest ← ~f、ビット補数 | |||||||||
| 0 | 0 | 1 | 0 | 0 | 0 | d | 1つの | f | ADDWFC f、d、a | C | Z | 北 | 目的地 ← f + W + C | ||||||||
| 0 | 0 | 1 | 0 | 0 | 1 | d | 1つの | f | ADDWF f、d、a | C | Z | 北 | 目的地 ← f + W | ||||||||
| 0 | 0 | 1 | 0 | 1 | 0 | d | 1つの | f | INCF f、d、a | C | Z | 北 | 宛先 ← f + 1 | ||||||||
| 0 | 0 | 1 | 0 | 1 | 1 | d | 1つの | f | DECFSZ f , d , a | dest ← f − 1, 0の場合はスキップ | |||||||||||
| 0 | 0 | 1 | 1 | 0 | 0 | d | 1つの | f | RRCF f、d、a | C | Z | 北 | dest ← f>>1 | C<<7、キャリーを介し右回転 | ||||||||
| 0 | 0 | 1 | 1 | 0 | 1 | d | 1つの | f | RLCF f、d、a | C | Z | 北 | dest ← f<<1 | C、キャリーを挟んで左回転 | ||||||||
| 0 | 0 | 1 | 1 | 1 | 0 | d | 1つの | f | SWAPF f、d、a | dest ← f<<4 | f>>4、ニブルを交換 | |||||||||||
| 0 | 0 | 1 | 1 | 1 | 1 | d | 1つの | f | INCFSZ f、d、a | dest ← f + 1、0の場合はスキップ | |||||||||||
| 0 | 1 | 0 | 0 | 0 | 0 | d | 1つの | f | RRNCF f、d、a | Z | 北 | dest ← f>>1 | f<<7、右回転(繰り上がりなし) | |||||||||
| 0 | 1 | 0 | 0 | 0 | 1 | d | 1つの | f | RLNCF f、d、a | Z | 北 | dest ← f<<1 | f>>7、左回転(繰り上がりなし) | |||||||||
| 0 | 1 | 0 | 0 | 1 | 0 | d | 1つの | f | INFSNZ f、d、a | dest ← f + 1、0でない場合はスキップ | |||||||||||
| 0 | 1 | 0 | 0 | 1 | 1 | d | 1つの | f | DCFSNZ f、d、a | dest ← f − 1、0でない場合はスキップ | |||||||||||
| 0 | 1 | 0 | 1 | 0 | 0 | d | 1つの | f | MOVF f , d , a | Z | 北 | 宛先 ← f | |||||||||
| 0 | 1 | 0 | 1 | 0 | 1 | d | 1つの | f | SUBFWB f、d、a | C | Z | 北 | 宛先 ← W + ~f + C (宛先 ← W − f − C̅) | ||||||||
| 0 | 1 | 0 | 1 | 1 | 0 | d | 1つの | f | SUBWFB f、d、a | C | Z | 北 | 目的地 ← f + ~W + C (目的地 ← f − W − C̅) | ||||||||
| 0 | 1 | 0 | 1 | 1 | 1 | d | 1つの | f | SUBWF f、d、a | C | Z | 北 | 目的地 ← f − W (目的地 ← f + ~W + 1) | ||||||||
| 0 | 1 | 1 | 0 | オペコード | 1つの | 登録する | ALU演算、Wに書き込まない | ||||||||||||||
| 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1つの | f | CPFSLT f、a | f < W (符号なし)の場合はスキップ | |||||||||||
| 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1つの | f | CPFSEQ f、a | f == Wの場合はスキップ | |||||||||||
| 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1つの | f | CPFSGT f、a | f > W (符号なし)の場合はスキップ | |||||||||||
| 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1つの | f | TSTFSZ f、a | f == 0の場合はスキップ | |||||||||||
| 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1つの | f | SETF f、a | f ← 0xFF | |||||||||||
| 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1つの | f | CLRF f、a | 1 | f ← 0, PSR.Z ← 1 | ||||||||||
| 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1つの | f | NEGF f、a | C | Z | 北 | f ← −f | ||||||||
| 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1つの | f | MOVWF f、a | f ← W | |||||||||||
| 0 | 1 | 1 | 1 | 少し | 1つの | f | BTG f、b、a | トグルビットb/f | |||||||||||||
| 1 | 0 | OPCC | 少し | 1つの | 登録する | ビット操作 | |||||||||||||||
| 1 | 0 | 0 | 0 | 少し | 1つの | f | BSF f、b、a | fのビットbを設定する | |||||||||||||
| 1 | 0 | 0 | 1 | 少し | 1つの | f | BCF f、b、a | fのビットbをクリア | |||||||||||||
| 1 | 0 | 1 | 0 | 少し | 1つの | f | BTFSS f、b、a | fのビットbが設定されている場合はスキップする | |||||||||||||
| 1 | 0 | 1 | 1 | 少し | 1つの | f | BTFSC f , b , a | fのビットbがクリアされている場合はスキップする | |||||||||||||
| 1 | 1 | 0 | OPCC | 住所 | 大規模アドレス操作 | ||||||||||||||||
| 1 | 1 | 0 | 0 | ソース | MOVFF s、d | 絶対移動 | |||||||||||||||
| 1 | 1 | 1 | 1 | 行き先 | |||||||||||||||||
| 1 | 1 | 0 | 1 | 0 | n | ブラn | PC + 2 nへの分岐 | ||||||||||||||
| 1 | 1 | 0 | 1 | 1 | n | RCALL n | PC + 2 nへのサブルーチン呼び出し | ||||||||||||||
| 1 | 1 | 1 | 0 | 0 | 条件付き | n | 条件分岐(PC+2 nへ) | ||||||||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | n | BZ n | PSR.Zが設定されている場合は分岐する | |||||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | n | BNZ n | PSR.Zがクリアの場合に分岐 | |||||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | n | 紀元前n | PSR.Cが設定されている場合は分岐する | |||||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | n | BNC n | PSR.Cがクリアなら分岐 | |||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | n | BOV n | PSR.Vが設定されている場合は分岐する | |||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | n | BNOV n | PSR.Vがクリアの場合に分岐 | |||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | n | BN n | PSR.Nが設定されている場合は分岐する | |||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | n | BNN n | PSR.Nがクリアの場合に分岐 | |||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | OPCC | け | FSR2 をソフトウェア スタック ポインターとして使用するための拡張機能* | |||||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | n | け | ADDFSR n , k * | FSRn += k | ||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | け | ADDULNK k * | FSR2 += k、PC をポップ | |||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | n | け | SUBFSR n , k * | FSRn −= k | ||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | け | SUBULNK k * | FSR2 −= k、PCをポップ | |||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | け | プッシュk * | [FSR2] ← k、FSR2をデクリメント | |||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | s | MOVSF src、f * | f ← FSR2[s] | ||||||||||
| 1 | 1 | 1 | 1 | f | |||||||||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | s | MOVSSソース、宛先* | FSR2[d] ← FSR2[s] | ||||||||||
| 1 | 1 | 1 | 1 | —0— | d | ||||||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | OPCC | け | 2語の指示 | |||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 0 | s | k (LSビット) | CALL k [, 高速] | サブルーチンを呼び出す(20ビットアドレス) | |||||||||||
| 1 | 1 | 1 | 1 | k (ミリ秒) | |||||||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | f | k (msb) | LFSR f , k | 12ビットリテラルをFSR fに移動する | ||||||||
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | k (LSビット) | |||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | k (LSビット) | 後藤k | 絶対ジャンプ、PC ← k(20ビットアドレス) | |||||||||||
| 1 | 1 | 1 | 1 | k (ミリ秒) | |||||||||||||||||
| 1 | 1 | 1 | 1 | け | 操作なし、2ワード命令の2番目のワード | ||||||||||||||||
| 1 5 | 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | ん? | 説明 | |
*: これらの拡張命令は一部のモデルでのみ使用可能であり、その場合でもXINST構成ビットが設定されている場合にのみ使用可能です。
Hycon クローン (16 ビット)
Hycon Technologyは、PIC18に非常によく似た「H08」CPUコアを搭載したマイクロコントローラシリーズ(型番プレフィックスHY10からHY17)を製造しています。オペコードの割り当ては公開されていないようですが、[ 29 ] H08A命令セットはPIC18のものと非常によく似ています。ニーモニックの変更点が多数あり(例えば、無条件相対分岐はBRAMicrochip社ではJRHycon社で呼び出されます)、機能面でも若干の変更が見られます。[ 30 ]
- H08A には 3 つではなく 2 つの FSR/IND レジスタがあります。
- H08A の ROM スペースは 14 ビット、RAM スペースは 11 ビットと小さいですが (PIC18 では最大 20 ビットと 12 ビット)、これがアーキテクチャ上の制限なのか、それとも現在の製品だけの制限なのかは明らかではありません。
- H08AにはPIC18 、
PUSH[ 31 ] 、、、、、、、DAW命令がTBLWRありません。CALLWRESETMOVFSUBFWBNEGF - PIC18 の
MOVF命令の代わりに、H08 には がありMVF、これは W をメモリ位置 fに移動しますが、フラグは設定しません。 - H08A は と のみをサポートします
TBLR *。PIC18TBLR *+のTBLRD *-またはに相当するものはありませんTBLRD +*。 - H08
CLRF命令は Z フラグを変更しません (PIC18 がそれを設定します)。 - PIC18 の 4 つの回転命令に加えて、H08A には
ARLC( と同じですが、符号ビットRLCFが変化するとオーバーフロー フラグも設定します) と(ソースの msbit を保持する算術右シフト)があります。ARRC - H08A には、
MVLP14 ビットの即値を ROM テーブル ポインタ レジスタにコピーする命令があります。 - に加えて
SLP、H08A にはIDLE命令があります。
縮小版H08Bも存在します。これはH08Aと以下の点で異なります。[ 32 ] [ 31 ]
- H08B には FSR/INDF レジスタ ペアが 1 つだけあります。
- 一部の[ 33 ]にはPIC18の追加のアドレス指定モードレジスタがなく、基本的なFSR0/INDF0ペアのみを備えていますが、 [ 34 ]にはすべてはありません。
- H08A と説明書が欠けて
ARLCいARRCますMVLP。 - PIC18 および H08A の「高速」コール/リターン オプションに使用されるシャドウ レジスタがありません。
- PIC18 の乗算 (および
MULLW)MULWF、相対分岐 (BRA、およびによるRCALL条件分岐)、、、、、および命令に相当するものがありません。BZBNNMOVLBLFSRMOVFFPOPTBLRD
H08CとH08Dのバリエーションもあり、これらはH08Aのわずかに拡張されたバージョンですが、追加された機能は明確ではありません。[ 35 ] H08C [ 36 ]とH08D [ 37 ]には、3番目のFSR2 / INDF2レジスタペアが含まれています。
PIC24およびdsPIC 16ビットマイクロコントローラ
2001年、マイクロチップ社はdsPICシリーズのチップ[ 38 ]を発表し、 2004年後半に量産に入りました。これはマイクロチップ社初の16ビットマイクロコントローラです。PIC24デバイスは汎用マイクロコントローラとして設計されています。dsPICデバイスには、さらに デジタル信号処理機能も搭載されています。
命令には主に2種類あります。1つは古典的な1オペランドPIC命令のようなもので、W0と指定されたfレジスタ(つまりRAMの最初の8K)の値との間で演算を行い、結果で更新されるデスティネーション選択ビットを選択します。Wレジスタはメモリマップされているため、fオペランドでWレジスタを指定することもできます。
PIC24 に新しく追加されたもう 1 つの形式では、3 つの W レジスタ オペランドが指定され、そのうち 2 つは 3 ビットのアドレッシング モード指定を可能にします。
| ソースオペランド | 宛先オペランド | 説明 | ||||
|---|---|---|---|---|---|---|
| ppp | レジ | 構文 | qqq | レジ | 構文 | |
| 000 | しーっ | W s | 000 | dddd | W d | 直接登録 |
| 001 | しーっ | [W s ] | 001 | dddd | [W d ] | 間接的 |
| 010 | しーっ | [W s −−] | 010 | dddd | [W d −−] | 後置デクリメントによる間接 |
| 011 | しーっ | [W s ++] | 011 | dddd | [W d ++] | ポストインクリメントによる間接 |
| 100 | しーっ | [−−W s ] | 100 | dddd | [−−W d ] | 事前減分による間接 |
| 101 | しーっ | [++W s ] | 101 | dddd | [++W d ] | プリインクリメント付き間接 |
| 11k | クックッ | # u5 | (未使用、違法) | 5ビットの符号なし即値 | ||
| 11倍 | しーっ | [W s +W w ] | 11倍 | dddd | [W d +W w ] | レジスタオフセットによる間接 |
レジスタオフセットアドレッシングモードは命令でのみ使用可能であり、Wwレジスタをソース、デスティネーション、またはその両方のレジスタオフセットとして使用できます。その他の命令では、代わりに符号なし5ビットの即値ソースとしてこのエンコーディングが使用されます。 MOV src,dst
TBLRDプログラム メモリにアクセスするおよびのオペランドについてはTBLWT、間接モードのみが許可され、コード メモリ内のアドレスを参照します。
いくつかの命令は2ワード長です。2番目のワードはNOPで、最大16ビットの追加の即値オペランドを含みます。
| 2 3 | 2 2 | 2 1 | 2 0 | 1 9 | 1 8 | 1 7 | 1 6 | 1 5 | 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ニモニック | C ? | Z ? | ん? | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | オペコード | オフセット | 管理権の移転 | ||||||||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | — | いいえ | 操作なし | ||||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | —0— | < 22:16> | CALL/GOTOアドレス23 | (2番目の単語) | |||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | n | DO # k、アドレス | (2番目の単語) | ||||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | OPCC | —0— | 1つの | 計算制御転送(16ビットWaへ) | ||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | —0— | 1つの | R aに電話する | PCを押してWaにジャンプ | ||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | —0— | 1つの | RCALL R a | PCを押してPCにジャンプ+2×Wa | ||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | —0— | 1つの | 後藤 R a | 倭へジャンプ | ||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | —0— | 1つの | ブラR a | PC+2×Waへジャンプ | ||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n <15:1> | 0 | アドレス23を呼び出す | PCを押して絶対アドレスにジャンプ | |||||||||||||||||
| —0— | —0— | < 22:16> | ||||||||||||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | — | (予約済み) | |||||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | n | 0 | GOTO アドレス23 | 絶対アドレスにジャンプ | |||||||||||||||||
| —0— | —0— | < 22:16> | ||||||||||||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | B | け | d | RETLW[.B] # k ,W d | Wd = k、PCをポップ | |||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | —0— | 戻る | ポップPC | ||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | —0— | レティフィー | C | Z | 北 | ポップSR、PC | |||||||||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | n | RCALLアドレス | PCを押し、PC += 2×s16 | ||||||||||||||||||
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | け | DO # k、アドレス | ゼロオーバーヘッドループ:k+1は繰り返し回数、PC+2×nは最後の命令 | ||||||||||||||||
| —0— | n | |||||||||||||||||||||||||||
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | け | 繰り返し # k | 次の命令をk+1回繰り返す | ||||||||||||||||
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | n | RCALLアドレス | PCを押し、PC += 2×s16 | ||||||||||||||||||
| 0 | 0 | 0 | 0 | 1 | 0 | 1 | — | (予約済み) | ||||||||||||||||||||
| 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1つの | n | BRA O a、アドレス | アキュムレータがオーバーフロー/飽和している場合、PC += 2×simm16 | ||||||||||||||||||
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1つの | n | BRA S a、住所 | |||||||||||||||||||
| 0 | オペコード | わ | B | q | d | p | s | 逆引き: dest ← source − W w | ||||||||||||||||||||
| 0 | 0 | 0 | 1 | 0 | わ | B | q | d | p | s | SUBR[.B] W w、src、dst | C | Z | 北 | dst ← src − Ww = src + ~Ww + 1) | |||||||||||||
| 0 | 0 | 0 | 1 | 1 | わ | B | q | d | p | s | SUBBR[.B] W w、src、dst | C | Z | 北 | dst ← src − Ww − C̅ = src + ~Ww + C | |||||||||||||
| 0 | 0 | 1 | 0 | け | d | MOV # k ,W d | ワード ← #imm16 | |||||||||||||||||||||
| 0 | 0 | 1 | 1 | 条件付き | n | PC+2× nへの条件分岐 | ||||||||||||||||||||||
| 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | n | BRA OV、住所 | PSR.Vが設定されている場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | n | BRA C、アドレス | PSR.Cが設定されている場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | n | BRA Z、住所 | ...PSR.Zが設定されている場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | n | BRA N、住所 | PSR.Nが設定されている場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | n | BRA LE、住所 | ...PSR.Z または PSR.N ≠ PSR.V の場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | n | BRA LT、住所 | ...PSR.N ≠ PSR.V の場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | n | BRA LEU、住所 | PSR.Zが設定されているか、PSR.Cがクリアされている場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | n | BRAアドレス | ...無条件に | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | n | BRA NOV、住所 | PSR.Vがクリアの場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | n | BRA NC、住所 | PSR.Cがクリアの場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | n | BRA NZ、住所 | PSR.Zがクリアの場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | n | BRA NN、住所 | PSR.Nがクリアの場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | n | BRA GT、住所 | PSR.Zがクリアで、PSR.N = PSR.Vの場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | n | BRA GE、住所 | ...PSR.N = PSR.Vの場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | n | BRA GTU、住所 | PSR.Zがクリアされ、PSR.Cが設定されている場合 | ||||||||||||||||||
| 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | n | (予約済み) | |||||||||||||||||||
| 0 | オペコード | わ | B | q | d | p | s | ALU演算: dest ← OP(W w , source ) | ||||||||||||||||||||
| 0 | 1 | 0 | 0 | 0 | わ | B | q | d | p | s | ADD[.B] W w , src , dst | C | Z | 北 | dst ← Ww + src | |||||||||||||
| 0 | 1 | 0 | 0 | 1 | わ | B | q | d | p | s | ADDC[.B] W w、src、dst | C | Z | 北 | dst ← Ww + src + C | |||||||||||||
| 0 | 1 | 0 | 1 | 0 | わ | B | q | d | p | s | SUB[.B] W w , src , dst | C | Z | 北 | dst ← Ww − src | |||||||||||||
| 0 | 1 | 0 | 1 | 1 | わ | B | q | d | p | s | SUBB[.B] W w、src、dst | C | Z | 北 | dst ← Ww − ~src − C̅ = Ww + ~src + C | |||||||||||||
| 0 | 1 | 1 | 0 | 0 | わ | B | q | d | p | s | AND[.B] W w、src、dst | Z | 北 | dst ← Ww & src | ||||||||||||||
| 0 | 1 | 1 | 0 | 1 | わ | B | q | d | p | s | XOR[.B] W w、src、dst | Z | 北 | dst ← Ww ^ ソース | ||||||||||||||
| 0 | 1 | 1 | 1 | 0 | わ | B | q | d | p | s | IOR[.B] W w、src、dst | Z | 北 | dst ← Ww | src | ||||||||||||||
| 0 | 1 | 1 | 1 | 1 | わ | B | q | d | p | s | MOV[.B] src , dst | Z | 北 | dst ← src (オフセットモードが許可されます) | ||||||||||||||
| 1 | 0 | 0 | 0 | 0 | f | d | MOV f、W d | Wd ← f | ||||||||||||||||||||
| 1 | 0 | 0 | 0 | 1 | f | s | 移動 W s、f | f ← Ws | ||||||||||||||||||||
| 1 | 0 | 0 | 1 | 0 | け | B | け | d | け | s | MOV[.B] [W s + s10 ],W d | 10ビットオフセットでロード | ||||||||||||||||
| 1 | 0 | 0 | 1 | 1 | け | B | け | d | け | s | MOV[.B] Ws ,[ Wd + s10 ] | 10ビットオフセットで保存 | ||||||||||||||||
| 1 | 0 | 1 | 0 | 0 | オペコード | b | Z | B | —0— | p | s | ソースのビット操作 | ||||||||||||||||
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | b | 0 | B | —0— | p | s | BSET[.B] # b、ソース | srcのビットbを設定する | |||||||||||||
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | b | 0 | B | —0— | p | s | BCLR[.B] # b、ソース | srcのビットbをクリア | |||||||||||||
| 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | b | 0 | B | —0— | p | s | BTG[.B] # b、ソース | srcのビットbをトグルする | |||||||||||||
| 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | b | 0 | 0 | —0— | p | s | BTST.C # b、ソース | C | PSR.C = srcのビットbを設定します | ||||||||||||
| 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | b | 1 | 0 | —0— | p | s | BTST.Z # b、ソース | Z | PSR.Zをsrcのビットbに設定する | ||||||||||||
| 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | b | Z | 0 | —0— | p | s | BTSTS. z # b、src | C/Z | srcのビットbをテストし(CまたはZに格納)、次に設定 | ||||||||||||
| 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | Z | わ | 0 | —0— | p | s | BTST. z W w、ソース | C/Z | srcのテストビットWw | ||||||||||||
| 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | b | 0 | 0 | —0— | p | s | BTSS # b、ソース | テストビット、設定されている場合スキップ | |||||||||||||
| 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | b | 0 | 0 | —0— | p | s | BTS # b、ソース | テストビット、クリアの場合はスキップ | |||||||||||||
| 1 | 0 | 1 | 0 | 1 | オペコード | b | f | fのビット操作 | ||||||||||||||||||||
| 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | b | f | b | BSET[.B] f ,# b | fのビットbを設定する | ||||||||||||||||
| 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | b | f | BCLR.B f、# b | fのビットbをクリア | |||||||||||||||||
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | b | f | BTG.B f、# b | トグルビットb/f | |||||||||||||||||
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | b | f | BTST.B f、# b | Z | fのテストビットb | ||||||||||||||||
| 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | b | f | BTSTS.B f、# b | Z | fのビットbをテストし、設定する | ||||||||||||||||
| 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | Z | わ | 0 | —0— | p | s | BSW. z src、W w | PSW.C またはPSW.Z をsrc のビット Ww に コピーします。 | |||||||||||||
| 1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | b | f | BTSS f、# b | テストビット、設定されている場合スキップ | |||||||||||||||||
| 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | b | f | BTSC f、# b | テストビット、クリアの場合はスキップ | |||||||||||||||||
| 1 | 0 | 1 | 1 | 0 | 0 | オペコード | B | け | d | レジスタ即値演算: W d ← OP(W d , k ) | ||||||||||||||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | B | け | d | ADD[.B] # u10 ,W d | C | Z | 北 | Wd ← Wd + k | ||||||||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | B | け | d | ADC[.B] # u10 ,W d | C | Z | 北 | Wd ← Wd + k + C | ||||||||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | B | け | d | SUB[.B] # u10 ,W d | C | Z | 北 | Wd ← Wd − k | ||||||||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | B | け | d | SUBB[.B] # u10 ,W d | C | Z | 北 | Wd ← Wd − k − C̅ | ||||||||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | B | け | d | AND[.B] # u10 ,W d | Z | 北 | Wd ← Wd & k | |||||||||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | B | け | d | XOR[.B] # u10 ,W d | Z | 北 | Wd ← Wd ^ k | |||||||||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | B | け | d | IOR[.B] # u10 ,W d | Z | 北 | Wd ← Wd | k | |||||||||||||
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | B | け | d | MOV[.B] # u10 ,W d | Wd ← k | |||||||||||||||
| 1 | 0 | 1 | 1 | 0 | 1 | オペコード | B | D | f | ALU演算: dest ← OP( f ,W0) | ||||||||||||||||||
| 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | B | D | f | ADD[.B] f [,WREG] | C | Z | 北 | 宛先 ← f + W0 | ||||||||||||
| 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | B | D | f | ADC[.B] f [,WREG] | C | Z | 北 | 宛先 ← f + W0 + C | ||||||||||||
| 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | B | D | f | SUB[.B] f [,WREG] | C | Z | 北 | 目的地 ← f − W0 | ||||||||||||
| 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | B | D | f | SUBB[.B] f [,WREG] | C | Z | 北 | 目的地 ← f − W0 + C̅ | ||||||||||||
| 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | B | D | f | AND[.B] f [,WREG] | Z | 北 | 宛先 ← f & W0 | |||||||||||||
| 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | B | D | f | XOR[.B] f [,WREG] | Z | 北 | 宛先 ← f ^ W0 | |||||||||||||
| 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | B | D | f | IOR[.B] f [,WREG] | Z | 北 | 宛先 ← f | W0 | |||||||||||||
| 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | B | 1 | f | MOV[.B] WREG、f | f ← W0 | |||||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 0 | OPCC | わ | d | 0 | p | s | 16×16→32の掛け算 | |||||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | わ | d | 0 | p | s | MUL.UU W w、src、 W d | Wd+1:Wd ← Ww × src (符号なし) | |||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | わ | d | 0 | p | s | MUL.US W w、src、 W d | Wd+1:Wd ← Ww × src (src 符号付き) | |||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | わ | d | 0 | p | s | MUL.SU W w、src、 W d | Wd+1:Wd ← Ww × src (Ww 符号付き) | |||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | わ | d | 0 | p | s | MUL.SS W w、src、 W d | Wd+1:Wd ← Ww × src(符号付き) | |||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 1 | OPCC | B | q | d | p | s | プログラムメモリアクセス(間接モードのみ) | |||||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | B | q | d | p | s | TBLRDL[.B] src、dst | dst ← ROM[TBLPAG:src] (ビット15:0) | |||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | B | q | d | p | s | TBLRDH[.B] src、dst | dst ← ROM[TBLPAG:src] (ビット23:16) | |||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | B | q | d | p | s | TBLWTL[.B] src、dst | ROM[TBLPAG:dst] ← src (ビット15:0) | |||||||||||||
| 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | B | q | d | p | s | TBLWTH[.B] src、dst | ROM[TBLPAG:dst] ← src (ビット 23:16) | |||||||||||||
| 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | B | 0 | f | MUL[.B] f | W3:W2 ← f × W0 (符号なし) | |||||||||||||||
| 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | B | 1 | — | (予約済み) | ||||||||||||||||
| 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | — | (予約済み) | ||||||||||||||||||
| 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | — | (予約済み) | |||||||||||||||||||
| 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | —0— | d | 0 | p | s | MOV.D src、W d | レジスタペアのロード | ||||||||||||
| 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | q | d | —0— | s | 0 | MOV.DW s、dst | レジスタペアを保存する | ||||||||||||
| 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | — | (予約済み) | |||||||||||||||||||
| 1 | 1 | 0 | 0 | 0 | メートル | あ | S | × | y | 私 | j | 1つの | DSP MAC (dsPICのみ) | |||||||||||||||
| 1 | 1 | 0 | 0 | 1 | その他の DSP 命令 (dsPIC のみ) | |||||||||||||||||||||||
| 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | —0— | d | p | s | FF1Rソース、W d | C | 右から最初のものを探す(lsb) | ||||||||||||
| 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | —0— | d | p | s | FF1Lソース、W d | C | 左から最初のものを探す(msb) | ||||||||||||
| 1 | 1 | 0 | 1 | 0 | 0 | オペコード | B | q | d | p | s | 一般的なオペランドのシフト/回転 | ||||||||||||||||
| 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | B | q | d | p | s | SL[.B] src、dst | C | Z | 北 | dst ← src << 1、左シフト(キャリーへ) | ||||||||||
| 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | B | q | d | p | s | LSR[.B] src、dst | C | Z | 北 | dst ← src >> 1、論理右シフト | ||||||||||
| 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | B | q | d | p | s | ASR[.B] src、dst | C | Z | 北 | dst ← src >> 1、算術右シフト | ||||||||||
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | B | q | d | p | s | RLNC[.B] src、dst | Z | 北 | dst ← src <<< 1、左回転(繰り上がりなし) | |||||||||||
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | B | q | d | p | s | RLC[.B] src、dst | C | Z | 北 | C:dst ← src:C << 1、繰り上がりで左回転 | ||||||||||
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | B | q | d | p | s | RRNC[.B] src、dst | Z | 北 | dst ← src >>> 1、右に回転(繰り上がりなし) | |||||||||||
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | B | q | d | p | s | RRC[.B]送信元、送信先 | C | Z | 北 | dst:C ← C:src >> 1、繰り上がりで右回転 | ||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | オペコード | B | D | f | シフト/回転f | ||||||||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | B | D | f | SL[.B] f [,WREG] | C | Z | 北 | dest ← f << 1、左シフト(キャリーへ) | ||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | B | D | f | LSR[.B] f [,WREG] | C | Z | 北 | dest ← f >> 1、論理右シフト | ||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | B | D | f | ASR[.B] f [,WREG] | C | Z | 北 | dest ← f >> 1、算術右シフト | ||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | B | D | f | RLNC[.B] f [,WREG] | Z | 北 | dest ← f <<< 1、左回転(繰り上がりなし) | |||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | B | D | f | RLC[.B] f [,WREG] | C | Z | 北 | C:dest ← f:C << 1、繰り上がりで左回転 | ||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | B | D | f | RRNC[.B] f [,WREG] | Z | 北 | dest ← f >>> 1、右に回転(繰り上がりなし) | |||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | B | D | f | RRC[.B] f [,WREG] | C | Z | 北 | dest:C ← C:f >> 1、繰り上がりで右回転 | ||||||||||||
| 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | あなた | t | d | D | 0 | 0 | s | 分割ステップ(REPEAT #17 を先頭に付ける) | |||||||||||||
| 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | —0— | d | 0 | 0 | 0 | s | DIV.SW d、W s | C | Z | 北 | W0 ← Wd/Ws、W1 ← 余り | |||||||||
| 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | t | d | 1 | 0 | 0 | s | DIV.SD W d、W s | C | Z | 北 | W0 ← Wt:Wd/Ws, W1 ← 余り | |||||||||
| 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | —0— | d | 0 | 0 | 0 | s | DIV.UW d、W s | C | Z | 北 | W0 ← Wd/Ws、W1 ← 余り | |||||||||
| 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | t | d | 1 | 0 | 0 | s | DIV.UD W d、W s | C | Z | 北 | W0 ← Wt:Wd/Ws, W1 ← 余り | |||||||||
| 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | t | —0— | 0 | 0 | 0 | s | DIVF W t、W s | C | Z | 北 | W0 ← Wt:0/Ws, W1 ← 余り | |||||||||
| 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | — | (予約済み) | ||||||||||||||||||
| 1 | 1 | 0 | 1 | 1 | 0 | 1 | — | (予約済み) | ||||||||||||||||||||
| 1 | 1 | 0 | 1 | 1 | 1 | オペコード | わ | d | 私 | 0 | 0 | s | 複数回シフト/回転 | |||||||||||||||
| 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | わ | d | 0 | 0 | 0 | s | SL W w、W s、W d | Z | 北 | Wd ← Ww << Ws | ||||||||||
| 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | わ | d | 1 | 0 | 0 | け | SL W v、# u4、W d | Z | 北 | Wd ← Ww << k | ||||||||||
| 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | わ | d | 0 | 0 | 0 | s | LSR W w、W s、W d | Z | 北 | Wd ← Ww >> Ws、論理右シフト | ||||||||||
| 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | わ | d | 1 | 0 | 0 | け | LSR W v、# u4、W d | Z | 北 | Wd ← Ww >> k、論理右シフト | ||||||||||
| 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | わ | d | 0 | 0 | 0 | s | ASR W w、W s、W d | Z | 北 | Wd ← Ww >> Ws、算術右シフト | ||||||||||
| 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | わ | d | 1 | 0 | 0 | け | ASR W v、# u4、W d | Z | 北 | Wd ← Ww >> k、算術右シフト | ||||||||||
| 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | —0— | d | p | s | FBCLソース、W d | C | 許容される算術正規化シフトを見つける | |||||||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | —0— | B | 0 | 0 | 0 | p | s | CP0[.B]ソース | C | Z | 北 | ゼロと比較する、src − 0 | ||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | わ | B | 0 | 0 | 0 | p | s | CP[.B] W w、ソース | C | Z | 北 | 比較、Ww − src (Ww + ~src + 1) | ||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | わ | B | 0 | 0 | 0 | p | s | CPB[.B] W w、ソース | C | Z | 北 | 借用と比較すると、Ww − src − C̅ (Ww + ~src + C) | ||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | B | 0 | f | CP0[.B] f | C | Z | 北 | ゼロと比較する、f − 0 | ||||||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | B | 0 | f | CP[.B] f | C | Z | 北 | 比較すると、f − W0 | ||||||||||||
| 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | B | 0 | f | CPB[.B] f | C | Z | 北 | 借用と比較すると、f − W0 − C̅ (f + ~W0 + C) | ||||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 0 | — | (予約済み) | ||||||||||||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 1 | OPCC | わ | B | —0— | s | 比較してスキップ | ||||||||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | わ | B | —0— | s | CPSGT[.B] W w、W s | ...Ww > Wsの場合、符号付き | ||||||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | わ | B | —0— | s | CPSLT[.B] W w、W s | ...Ww < Wsの場合、符号付き | ||||||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | わ | B | —0— | s | CPSNE[.B] W w、W s | ...Ww ≠ Ws の場合 | ||||||||||||||
| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | わ | B | —0— | s | CPSNE[.B] W w、W s | ...Ww = Wsの場合 | ||||||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | B | q | d | p | s | INC[.B] src、dst | C | Z | 北 | dst ← src+1 | ||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | B | q | d | p | s | INC2[.B] src、dst | C | Z | 北 | dst ← src+2 | ||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | B | q | d | p | s | DEC[.B] src、dst | C | Z | 北 | dst ← src−1 | ||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | B | q | d | p | s | DEC2[.B] src、dst | C | Z | 北 | dst ← src−2 | ||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | B | q | d | p | s | NEG[.B] src、dst | C | Z | 北 | dst ← ~src+1 | ||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | B | q | d | p | s | COM[.B] src、dst | Z | 北 | dst ← ~src | |||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | B | q | d | —0— | CLR[.B] dst | 日付 ← 0 | ||||||||||||||
| 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | B | q | d | —0— | SETM[.B] dst | 夏時間 ← ~0 | ||||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | B | D | f | INC[.B] f [,WREG] | C | Z | 北 | 宛先 ← f+1 | ||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | B | D | f | INC2[.B] f [,WREG] | C | Z | 北 | 宛先 ← f+2 | ||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | B | D | f | DEC[.B] f [,WREG] | C | Z | 北 | 宛先 ← f−1 | ||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | B | D | f | DEC[.B] f [,WREG] | C | Z | 北 | 目的地 ← f−2 | ||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | B | D | f | NEG[.B] f [,WREG] | C | Z | 北 | 宛先 ← ~f+1 | ||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | B | D | f | COM[.B] f [,WREG] | Z | 北 | 宛先 ← ~f | |||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | B | D | f | CLR[.B] f [,WREG] | 宛先 ← 0 | |||||||||||||||
| 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | B | D | f | SETM[.B] f [,WREG] | 宛先 ← ~0 | |||||||||||||||
| 1 | 1 | 1 | 1 | 0 | 0 | メートル | あ | 1 | × | y | 私 | j | OPCC | DSP MPY/MAC/ED/EDAC (dsPICのみ) | ||||||||||||||
| 1 | 1 | 1 | 1 | 0 | 1 | — | (予約済み) | |||||||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | f | 0 | 押すf | fをスタックの一番上にプッシュする | |||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | f | 0 | ポップf | スタックの上から f をポップする | |||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | け | リンク # u14 | W14を押し、W14 ← W15、W15 += k | ||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | —0— | ULNK | W15 ← W14、W14をポップ | ||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 000 | d | p | s | SE src、dst | C | Z | 北 | dst ← sign_extend(src)、ビット7をビット15:8にコピー | ||||||||||
| 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 000 | d | p | s | ZE送信元、送信先 | 1 | Z | 0 | dst ← zero_extend(src)、ビット15:8をクリア | ||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | け | DISI # u14 | k +1サイクル の割り込みを無効にする | ||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 000 | d | 000 | s | 交換 W s、W d | レジスタWs、Wdの内容を交換する | |||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 000 | 0000 | 000 | s | DAW.BW s | C | C、DCに基づいて小数点を調整 | ||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | B | 000 | 0000 | 000 | s | SWAP[.B] W s | Wの半分を交換する | |||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | —0— | リセット | ソフトウェアリセット | ||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | —0— | け | PWRSAV # u1 | スリープモードまたはアイドルモードに入る | ||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | —0— | CLRWDT | ウォッチドッグタイマーをクリアする | |||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | —0— | ポップス | ポップシャドウレジスタ(W0~3、PSRの一部) | |||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | —0— | プッシュS | プッシュシャドウレジスタ(W0~3、PSRの一部) | |||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | — | (予約済み) | |||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | — | NOPR | 操作なし(バージョン #2) | ||||||||||||||||||
参考文献
- ^ Gruppuso, Frank M. (1982). 「第35章 PIC1650:チップのアーキテクチャと動作」(PDF) . Siewiorek, Daniel P.; Bell, C. Gordon ; Newell, Allen (編). 『コンピュータ構造:原理と例』 (PDF) . McGraw-Hill. ISBN 0-07-057302-6. 2024年8月18日閲覧。
- ^ PIC10F200/202/204/206 データシート(PDF) . Microchip Technology. 2007. p. 52. 2015年8月11日時点のオリジナル(PDF)からアーカイブ。 2015年1月15日閲覧。
- ^ General Instrument. PIC1670 8ビットマイクロコンピュータ(PDF) (データシート) . 2024年8月18日閲覧。
- ^ 「強化されたミッドレンジアーキテクチャの紹介」(PDF) . Microchip . 2022年4月18日時点のオリジナルよりアーカイブ。2025年2月5日閲覧。
{{cite web}}: CS1 maint: bot: 元のURLステータス不明(リンク) - ^ “義隆電子股份有限公司義隆電子,再創未来!” .
- ^ ELAN Microelectronics Corp. (2011-03-09)、M78XXX 13ビット命令セット(PDF) (アプリケーションノート)、AN EM78xxx-20110309 、 2025年1月11日取得
- ^ ELAN Microelectronics Corp. (2016年4月26日)、EM78P157N 8ビットマイクロコントローラ(OTP ROM搭載)製品仕様(PDF)、バージョン1.3、2016年3月4日のオリジナルからアーカイブ(PDF) 、 2020年6月6日取得
- ^ a b ELAN Microelectronics Corp. (2016年4月25日)、EM78P143 8ビットマイクロプロセッサ(OTP ROM搭載)製品仕様(PDF)、バージョン1.7、p. 77 、 2020年6月6日取得
- ^ ELAN Microelectronics Corp. (2016年4月)、EM78P346N 8ビットマイクロプロセッサ(OTP ROM搭載)製品仕様(PDF)、バージョン1.5、p. 77 、 2019年7月11日取得
- ^ ELAN Microelectronics Corp. (2000年4月17日)、EM78860 8ビットマイクロコントローラ(PDF)、p. 17 、 2019年7月11日取得
- ^ ELAN Microelectronics Corp. (2013年3月15日)、EM78F648/644/642/641N/548/544/542/541N フラッシュシリーズ 8ビットマイクロコントローラ製品仕様(PDF)、バージョン1.2、pp. 162– 165 、 2019年7月11日取得
- ^ Elan eUIDE II v2.19.60.14の命令エンコーディングテーブル(2019年5月1日リリース、2019年7月13日アクセス)よりファイル。
Bin/*.cfg - ^ ELAN Microelectronics Corp. (2014-01-14)、EM78XXX 15ビット命令セット(PDF) (アプリケーションノート)、AN EM78xxx-20140114 、 2025年1月11日取得
- ^ a b Holtek Semiconductor Inc. (2016年12月11日)、HT8 MCU拡張命令セットアプリケーション(PDF) (アプリケーションノート)、AN0407E 、 2024年2月9日取得
- ^ Holtek Semiconductor Inc. (2019年11月26日)、2.4GHz 8ビットフラッシュRF TX/RX MCU BC66F840/BC66F850/BC66F860 (PDF) (データシート)、バージョン1.60、p. 32 、 2024年2月9日取得。オペランド アドレスは 0xFF までしか指定できず、追加の RAM はバンキングによってアドレス指定されることに注意してください。
- ^ Wolf, Ash「Ninji」(2018年12月12日)「Mouse Adventures #3: Writing a Disassembler」 。 2019年7月8日閲覧。
- ^ Carlson, Jay (2019年9月6日). 「3セントのマイクロコントローラーってどうなってるの?(Padauk PMS150Cとその仲間のレビュー)」 . 2020年5月18日閲覧。
- ^ a b「「ひどい」3セントMCU - 0.10ドル未満のマイクロコントローラーの簡単な調査」ティムのブログ2019年8月12日. 2020年5月18日閲覧。
- ^ 「無料のPDKドキュメント」。Padauk
µCは、Microchip PICアーキテクチャの拡張版ともいえる興味深いアーキテクチャを備えています。
- ^ 「ATtiny4と3セントマイクロのチップチューン:Padaukへの移植」。
一部の人によると、Padaukの命令セットは古いPICに大きく影響を受けており、ほとんどの操作は単一のアキュムレータレジスタで実行されるとのことです。
- ^ Jenny List 「入手可能な最も安価なプロセッサについて知りたいことすべて」 2019年。
- ^ウルフ、アッシュ「忍者」 (2018年12月12日). 「PADAUK FPPA MCU のドキュメント」。GitHub。2020年5月18日に取得。
- ^ Padauk Technology Co. Ltd. (2018年12月11日). 「PMC150/PMS150 8ビットOTP型IOコントローラ」(PDF) (データシート). バージョン1.8. pp. 38– 51. PDK-DS-PMX150-EN-V108 . 2020年6月8日閲覧。
- ^ Wolf, Ash「Ninji」(2020年5月23日)「PADAUK FPPAコアデバイス(14ビット)命令セット」 。 2020年6月8日閲覧。
- ^ Padauk Technology Co. Ltd. (2019年6月18日). 「PFS154 8ビットMTPタイプIOコントローラ データシート」(PDF) . バージョン1.04. pp. 71– 84. PDK-DS-PFS154_RN_V104 . 2020年6月9日閲覧。
- ^ 「Martin DubucのSDCC PIC18Fプロジェクトページ」 . mdubuc.freeshell.org . 2025年2月24日閲覧。
- ^ 「Microchip PIC micros と C - ソースコードとサンプルコード」。
- ^ Microchip Technology, Inc. (2007), PIC18F1220/1320 データシート(PDF) 、 2012年4月2日取得
- ^ HYCON -IDE ソフトウェア ユーザーズ マニュアルの23 ~ 26 ページに、PIC18 と一致しないオペコードがいくつか記載されています。
- ^ 「命令セットH08A ユーザーズマニュアル」(PDF) . Hycon Technology. 2010年8月1日. APD-CORE002-V03_EN . 2025年1月4日閲覧。
- ^ a b「CPUコアアプリケーションの説明:命令セットH08AとH08Bの比較と補足」(PDF) Hycon Technology. 2011年3月24日. PD-CORE001_EN-V06 . 2025年1月4日閲覧。
PUSHこれは、H08A の PIC18 のような命令について説明していますが、他の Hycon マニュアルには記載されていません。 - ^ 「命令セットH08B ユーザーズマニュアル」(PDF) . Hycon Technology. 2010年8月1日. APD-CORE003-V02_EN . 2025年1月4日閲覧。
- ^ 「HY14E10/HY14E10M ユーザーズガイド デジタル圧力センサープラットフォーム」(PDF) Hycon Technology. 2016年12月25日. p. 14. UG-HY14E10-V06_EN . 2025年1月4日閲覧。
- ^ 「HY10Pファミリー ユーザーズガイド ミックスドシグナルマイクロコントローラ」(PDF) Hycon Technology. 2017年11月17日. p. 18. UG-HY10S40-V07_EN . 2025年1月4日閲覧。
- ^ 「命令セットH08A、H08C、H08D ユーザーズマニュアル」(PDF) . Hycon Technology. 2020年6月1日. APD-CORE002-V04_EN . 2025年1月4日閲覧。
- ^ 「HY15S41 ユーザーズガイド ミックスドシグナルマイクロコントローラ」(PDF) Hycon Technology. 2017年11月16日. p. 15,17. UG-HY15S41-V04_EN . 2025年1月4日閲覧。
- ^ 「HY17M28 データシート:8ビットRISCライクなミックスドシグナルマイクロコントローラ、組み込み24ビットΣΔADC、低ノイズアンプ、LEDドライバ」(PDF)(繁体字中国語)。Hycon Technology。2023年7月24日。p. 27。DS-HY17M28-V01_TC 。2025年1月4日閲覧。 (英語のデータシートは現在「作成中」です。)
- ^ 「マイクロチップ・テクノロジー、世界最高性能の16ビット・マイクロコントローラ「dsPIC」を発表」。 2004年12月13日時点のオリジナルよりアーカイブ。
- ^ dsPIC30Fプログラマーズリファレンスマニュアル(PDF)、マイクロチップテクノロジー、2008年、DS70157C 、 2012年7月2日取得