Atmel AVR命令セット

Atmel AVR命令セットは、1996年にAtmelによって開発された改良型ハーバードアーキテクチャ8ビットRISCシングルチップマイクロコントローラであるAtmel AVR機械語です。Atmelは2016年にMicrochip Technologyに買収されました。 [ 1 ] AVRは、プログラムの保存にオンチップフラッシュメモリを使用した最初のマイクロコントローラファミリの1つでした。

プロセッサレジスタ

Atmel AVRレジスタ
2 12 01 91 81 71 61 51 41 31 21 11 00 90 80 70 60 50 40 30 20 10 0(ビット位置)
汎用レジスタ
  R1 R0
  R3 R2
  R5 R4
  R7 R6
  R9 R8
  R11 R10
  R13 R12
  R15 R14
  R17 R16
  R19 R18
  R21 R20
  R23 R22
  R25 R24
  R27 R26 X(ポインタ)
  R29 R28 Y(ポインタ)
  R31 R30 Z(ポインタ)
スタックポインタ
  SPH SPL スタックポインター​​
プログラムカウンタ
パソコン プログラムカウンター​​
拡張メモリ
  ランプド 延長直接
  ランプクス 拡張X
  ランピー 拡張Y
  ランプズ 拡張Z
  アインド 拡張間接
ステータスレジスタ
  T HSVZCスレグ

汎用8ビットレジスタは32個(R0~R31)あります。すべての算術演算と論理演算はこれらのレジスタに対して行われ、ロード命令とストア命令のみがRAMにアクセスします。

16ビットレジスタペアを操作する命令は限られています。レジスタペアの下位番号のレジスタは最下位ビットを保持し、偶数ビットである必要があります。最後の3つのレジスタペアは、メモリアドレス指定のためのポインタレジスタとして使用されます。これらは、X (R27:R26)、Y (R29:R28)、Z (R31:R30) と呼ばれます。これら3つのレジスタペアすべてで、ポストインクリメントおよびプリデクリメントアドレッシングモードがサポートされています。YとZは、6ビットの正の変位もサポートしています。

即値を扱う命令は、レジスタR16~R31(8ビット演算)またはレジスタペアR25:R24~R31:R30(16ビット演算:ADIWおよびSBIW)に限定されます。MUL演算のいくつかのバリエーションは、レジスタR16~R23の8つのレジスタに限定されます。

特殊目的レジスタ

これら 32 個の汎用レジスタに加えて、CPU にはいくつかの特殊用途レジスタがあります。

  • PC: 16ビットまたは22ビットのプログラムカウンタ
  • SP: 8ビットまたは16ビットのスタックポインタ
  • SREG: 8ビットステータスレジスタ
  • RAMPX、RAMPY、RAMPZ、RAMPD、EIND: 24 ビット アドレスを形成するために 16 ビット アドレスの先頭に追加される 8 ビット セグメント レジスタ。大きなアドレス空間を持つパーツでのみ使用できます。

ステータスレジスタ

ステータスレジスタビットは次のとおりです。

  1. Cキャリーフラグ。これは減算時の借用フラグです。
  2. Zゼロフラグ。演算結果がゼロのときにセットされ、ゼロ以外のときにクリアされます。
  3. N負のフラグ。演算結果の最上位ビットのコピーに設定されます。
  4. Vオーバーフローフラグ。2の補数オーバーフローの場合に設定されます。
  5. S 符号フラグ。AVRに特有のフラグで、常にN⊕Vとなり比較の真の符号を示します。
  6. Hハーフキャリーフラグ。これは加算からの内部キャリーであり、BCD演算をサポートするために使用されます。
  7. T ビットコピー。特殊なビットロード命令とビットストア命令はこのビットを使用します。
  8. I割り込みフラグ。割り込みが有効なときに設定されます。

マルチバイト演算を容易にするための 2 つの特殊なケースがあります。

  • 命令INCDEC命令はキャリーフラグを変更しないので、任意精度の算術オペランドをループするのに使用できます。[ 2 ]:84、101
  • CPCSBCおよびSBCI(キャリー付き比較/減算)命令は、結果がゼロのときはZフラグを設定せず、結果がゼロ以外の場合のみクリアします。[ 2 ] : 79,147,149 固定精度のマルチバイト比較 では、展開されたシーケンスで実装され、差全体CP; CPC; CPC; CPCがゼロの場合にのみ設定されるゼロフラグを生成します。

アドレッシング

利用可能なアドレス空間は次のとおりです。

  • 汎用レジスタは番号 (0 ~ 31) でアドレス指定されますが、これらのレジスタのサブセットのみを操作できる命令では、5 ビットの完全な番号は格納されません。
  • I/O レジスタには専用の 6 ビットアドレス空間があり、その下位半分はビット アドレス指定可能です。一部の部分にはこのアドレス空間の外側に I/O レジスタがあり、これは「拡張 I/O」と呼ばれ、データ アドレス空間のメモリ マップ I/Oとしてのみアクセスできます。
  • データ アドレス空間は、32 個の汎用レジスタ、すべての I/O レジスタ (I/O アドレス空間からもアクセス可能なものを含む)、および RAM をマップします。必要に応じてそれぞれ RAMPX、RAMPY、RAMPZ を先頭に追加して、X、Y、Z ポインタ レジスタを介して直接または間接的にアドレス指定できます。
  • プログラムメモリ(フラッシュ)には、命令をフェッチするための16ビットワードとしてアドレス指定された別のアドレス空間があります。
  • 定数データを取得するために、プログラム メモリは Z ポインタ レジスタを介してバイト単位でアドレス指定され、必要に応じて RAMPZ が先頭に追加されます。
  • EEPROM、一部のデバイスではメモリマップされていますが、他のデバイスでは直接アドレス指定できず、代わりにアドレス、データ、および制御 I/O レジスタを介してアクセスされます。
  • 汎用レジスタ、ステータス レジスタ、および一部の I/O レジスタはビット アドレス指定可能であり、ビット 0 が最下位ビット、ビット 7 が最上位ビットとなります。

最初の64個のI/Oレジスタは、I/Oアドレス空間とデータアドレス空間の両方からアクセスできます。そのため、これらには2つの異なるアドレスがあります。これらのアドレスは通常、「0x00 ( 0x20 )」から「0x3F ( 0x5F )」までと表記されます。最初の項目はI/Oアドレス、2番目の項目(括弧内)はデータアドレスです。

PCを除く特殊用途CPUレジスタは、I/Oレジスタとしてアクセスできます。一部のレジスタ(RAMPX、RAMPY)は、アドレス指定可能なメモリが64KiB未満のマシンでは存在しない場合があります

登録するI/Oアドレスデータアドレス
スレグ0x3F0x5F
SP0x3E : 0x3D0x5E : 0x5D
アインド0x3C0x5C
ランプズ0x3B0x5B
ランピー0x3A0x5A
ランプクス0x390x59
ランプド0x380x58

典型的な ATmegaメモリマップは次のようになります。

データアドレスI/Oアドレスコンテンツ
0x00000x001FレジスタR0~R31
0x00200x003F0x000x1FI/Oレジスタ(ビットアドレス指定可能)
0x00400x005F0x200x3FI/Oレジスタ(ビットアドレス指定不可)
0x00600x00FF拡張I/Oレジスタ(メモリマップI/Oのみ)
0x0100RAMEND内部SRAM

RAMENDはRAMの最終アドレスです。拡張I/Oを持たないデバイスでは、RAMは0x0060から始まります。

命令タイミング

算術演算はレジスタ R0 ~ R31 上で実行されますが、RAM 上では直接実行されず、乗算とワード全体の加算 (ADIW と SBIW) を除いて 1 クロック サイクルかかります。乗算とワード全体の加算は 2 サイクルかかります。

RAMおよびI/O空間へのアクセスは、レジスタへのコピーまたはレジスタからのコピーによってのみ可能です。間接アクセス(オプションのポストインクリメント、プリデクリメント、または定数変位を含む)は、レジスタX、Y、Zを介して可能です。RAMへのアクセスはすべて2クロックサイクルかかります。レジスタとI/O間の移動は1サイクルです。8ビットまたは16ビットのデータをレジスタ間で、または定数をレジスタ間で移動させるのも1サイクルです。プログラムメモリ(LPM)の読み取りには3サイクルかかります。

指示リスト

命令は 1 つの 16 ビット長ワードです。ただし、16 ビットまたは 22 ビットのアドレスを含む命令は 2 ワードかかります。

条件分岐には、アドレスへのジャンプとスキップの2種類があります。条件分岐(BRxx)は、ALUフラグをテストし、指定されたアドレスにジャンプします。スキップ(SBxx)は、レジスタまたはI/O内の任意のビットをテストし、テストが真であれば次の命令をスキップします。

以下:

  • RdとRrはR0~R31の範囲のレジスタです。
  • RdhとRrhはR16~R31(上位半分)の範囲のレジスタです。
  • RdqとRrqは、R16~R23(レジスタファイルの4分の1)の範囲のレジスタです。
  • RpはレジスタペアR25:R24、R27:R26 (X)、R29:R28 (Y)、またはR31:R30 (Z)です。
  • XYZはポインタレジスタ、XまたはYまたはZ
  • XYZ+は、XまたはYまたはZのポインタレジスタで、後置インクリメントされます。
  • -XYZはポインタレジスタ(X、Y、Z)で、プリデクリメントされます。
  • YZはポインタレジスタ(YまたはZ)です。
  • Z+はポインタレジスタZ、後置インクリメント
  • sはステータスレジスタのビット番号です(0 = C、1 = Zなど、上記のリストを参照)
  • bは汎用レジスタまたはI/Oレジスタのビット番号です(0 = 最下位、7 = 最上位)
  • K6は6ビットの符号なし即値定数(範囲:0~63)です。
  • K8は8ビットの即値定数です。8ビット演算でのみ使用されるため、符号の有無は関係ありません。
  • IO5は、I/Oアドレス空間のビットアドレス可能な部分、つまり下位半分(範囲:0~31)をカバーする5ビットのI/Oアドレスです。
  • IO6は、完全なI/Oアドレス空間(範囲:0~63)をカバーする6ビットのI/Oアドレスです。
  • D16は64KiBをカバーする16ビットのデータアドレスです 。64KiBを超えるデータ空間を持つ部分では、RAMPDセグメントレジスタの内容が先頭に追加されます。
  • P22は22ビットのプログラムアドレスで、2 22 個の16ビットワード(つまり8  MiB)をカバーする。
  • S7とS12は、プログラムカウンタに格納されているプログラムアドレスを基準とした、ワード単位の7ビットと12ビットの符号付き変位である。
AVR命令セット
算術 ビット&その他 移行 ジャンプ
ADD Rd , Rr ADC Rd , Rr ADIW Rp + 1 : Rp , K6SUB Rd Rr SUBI Rdh K8 SBC Rd Rr SBCI Rdh K8 SBIW Rp + 1 : Rp K6INCロードDECロードAND Rd Rr ANDI Rdh K8 OR Rd Rr ORI Rdh K8 COM Rd NEG Rd CP Rd Rr CPC Rd Rr CPI Rdh K8 SWAP Rd LSR Rd ROR Rd ASR RdMUL Rd Rr MULS Rdh Rrh MULSU Rdq Rrq FMUL Rdq Rrq FMULS Rdq Rrq FMULSU Rdq Rrq
BSET s BCLR s SBI IO5 b CBI IO5 b BST Rd b BLD Rd bNOPブレイクスリープWDR
MOV Rd , Rr MOVW Rd + 1 : Rd , Rr + 1 : RrIN Rd IO6 OUT IO6 Rr押すRrポップRrLDIロードK8 LDSロードD16LD Rd X LDD Rd YZ + K6 LD Rd - XYZ LD Rd XYZ +STS D16 RrST X Rr STD YZ + K6 Rr ST - XYZ Rr ST XYZ + RrLPM LPM Rd Z LPM Rd Z + ELPM ELPM Rd Z ELPM Rd Z +SPM
RJMP S12 IJMP EIJMP JMP P22
電話
RCALL S12 ICALL EICALL CALL P22レト・レティ
支店
CPSE Rd RrSBRC Rr b SBRS Rr bSBIC IO5 b SBIS IO5 bBRBC s S7 BRBS s S7

命令セットの継承

すべての命令がすべてのAtmel AVRコントローラに実装されているわけではありません。これには、乗算、拡張ロード/ジャンプ/コール、ロングジャンプ、および電源制御を実行する命令が含まれます。

オプションの指示は、次の 3 つのカテゴリに分類できます。

  • より高性能なCPUコアに追加されたコアCPU(計算)機能
  • メモリアドレス指定機能は、メモリ容量が十分大きいすべてのモデルに追加されます。
  • オプション機能、特定のモデルに存在する場合と存在しない場合があるいくつかの周辺機器。

ハイエンドのプロセッサは、より高性能なコアとより多くのメモリの両方を備えている傾向がありますが、一方が存在しても、もう一方も存在するとは限りません。

コアCPU命令

オリジナルの「クラシック」コアから始まり、拡張機能は次のレベルに分類され、各レベルには前述のすべてが含まれます。

  1. LPM「クラシック」コアには、 と同等のゼロオペランド形式の命令のみがありますLPM r0,Z
  2. 「クラシック プラス」では、レジスタ ペアを移動するための命令と、任意の宛先レジスタと Z ポインタの自動インクリメントを許可するMOVWより一般的な形式の LPM 命令 (LPM Rd,Zおよび) が追加されています。LPM Rd,Z+
  3. 「拡張」コアは乗算命令を追加します。
  4. XMEGA コア自体は新しい命令を追加しません、いくつかの重要な変更を加えています。
    • メモリマップが再編成され、プロセッサレジスタファイルのメモリマッピングが廃止され(I/OポートはRAMアドレス0から始まる)、I/Oポートの範囲が拡張されました。これにより、最初の4Kは特殊機能レジスタ、次の4Kはデータフラッシュ、そして通常のRAMは8Kから始まります。
    • スタック ポインタ レジスタ (SPL および SPH) を調整する前に割り込みを明示的に無効にする必要はありません。SPL への書き込みは、SPH が更新される時間を与えるために 4 クロック サイクルの間、割り込みを自動的に無効にします。
    • その他のマルチバイトレジスタには、アトミックな読み書きを可能にするシャドウレジスタが用意されています。最下位バイトが読み取られると、上位バイトがシャドウレジスタにコピーされるため、後でそれらを読み取ると、最初の読み取り時のレジスタのスナップショットが作成されます。下位バイトへの書き込みは、最上位バイトが書き込まれるまでバッファリングされ、最上位バイトが書き込まれると、マルチバイトレジスタ全体がアトミックに更新されます。
  5. 後期のXMEGAコア(具体的にはATxmega16A4UなどのB、C、AUモデル。ATxmega16D4などの初期のA、D、Eモデルは除く)には、4つのアトミックなリード・モディファイ・ライト命令(exchange()、ロード・アンド・セット、ロード・アンド・クリア、ロード・アンド・トグル)が追加されています。これらの命令は、ダイレクト・メモリ・アクセス・ペリフェラル(特にUSBXCHコントローラ)との連携に役立ちます。

「クラシック」CPUコアよりも性能が低いコアには、「AVR1」コアと「AVR tiny」コアの2つのサブセットがあります。紛らわしいことに、「ATtiny」ブランドのプロセッサには、AVR1(ATtiny11、ATtiny28)、クラシック(ATtiny22、ATtiny26)、クラシック+(ATtiny24)、AVRtiny(ATtiny20、ATtiny40)など、さまざまなコアがあります。

AVR1サブセットは人気がなく、2000年以降、新モデルは導入されていません。アドレス0~31にマッピングされた32個のレジスタとアドレス32~95のI/Oポートを除くすべてのRAMが省略されています。スタックは3レベルのハードウェアスタックに置き換えられ、命令PUSHと命令は削除されています。すべての16ビット演算、、、、およびZ経由の間接を除くすべてのロードおよびストア・アドレッシング・モードも POP削除されています。IJMPICALL

AVR 命令セットをサブセット化する 2 番目の、より成功した試みは、「AVR tiny」コアです。

AVRtinyコアの最も重要な変更点は、レジスタR0~R15が省略されていることです。これらのレジスタはメモリマップされておらず、I/Oポートは0~63、汎用RAMはアドレス64から始まります。16ビット算術演算(ADIWSBIW)と、ディスプレースメント・アドレッシング・モードによるロード/ストア(Y+dZ+d)は省略されていますが、プリデクリメント・アドレッシング・モードとポストインクリメント・アドレッシング・モードは保持されています。命令LPMは省略され、代わりにプログラムROMがデータアドレス空間にマッピングされ、通常のロード命令でアクセスできます。

最後に、AVRtinyコアは、RAMへの直接アドレス指定用の2ワード命令LDSSTS命令を削除し、代わりに、ロード/ストア命令に以前に割り当てていたオペコード空間を、汎用RAMの最初の128箇所(アドレス0x40~0xBF)にアクセスできる新しい1ワード命令LDSと命令に置き換えます。(命令と命令は、0~0x3FのI/O空間への直接アクセスを提供します。) STSINOUT

メモリアドレス指定命令

最小のコアは、データアドレス空間が256バイト以下(I/Oポートやその他の予約アドレスを除いたRAMが128バイト以下)で、プログラムROMが8192バイト以下(8KiB)です。これらのコアは8ビットのスタックポインタ(SPL)のみを備え、12ビットの相対ジャンプ/コール命令RJMP/のみをサポートします。(AVRプログラムカウンタはバイトではなく16ビットのワードをカウントするため、12ビットのオフセットで2 13RCALLバイトのROMをアドレス指定できます。)

利用可能なリソースにアクセスするために必要に応じて追加のメモリ アドレス指定機能が存在します。

  1. データ アドレス空間が 256 バイトを超えるモデル (RAM が 256 バイト以上) には 16 ビットのスタック ポインタがあり、上位半分は SPH レジスタにあります。
  2. 8 KiB を超える ROM を搭載したモデルでは、2 ワード (22 ビット)命令JUMPと命令が追加されます。(初期モデルの一部では、スキップ命令の後に 2 ワード命令が続くとエラッタCALLが発生します。)
  3. ROMが64KiBを超えるモデルでは、ELPM命令と対応するRAMPZレジスタが追加されます。 LPM命令はZのROMアドレスをゼロ拡張し、ELPM命令は上位ビットにRAMPZレジスタを付加します。これは、より一般的な命令とは異なりますLPM。ゼロオペランド形式のみを備えた「クラシック」モデルELPM(ATmega103およびat43usb320)も存在します。自動インクリメントが利用可能な場合(ほとんどのモデル)、RAMPZを含む24ビットアドレス全体を更新します。
  4. ROMが128KiBを超える(稀な)モデルには、3バイトのプログラムカウンタが搭載されています。サブルーチン呼び出しとリターンはスタック空間をさらに1バイト使用します。また、間接ジャンプと呼び出しのための上位ビットを追加するための新しいEINDレジスタが追加されました。さらに、EIND:Zを宛先アドレスとして使用する新しい拡張命令EIJMPと命令が追加されました。(以前の命令と命令は、ゼロ拡張されたZを使用しています。)EICALLIJMPICALL
  5. 64KiBを超えるRAMアドレス空間を持つ(稀な)モデルでは、RAMPX、RAMPY、RAMPZ、RAMPDレジスタによって16ビットRAMアドレス指定の制限が拡張されます。これらのレジスタは、それぞれX、Y、Zレジスタペアを使用するアドレッシングモード、または直接アドレッシング命令LDS/ を使用するアドレッシングモードに、追加の上位ビットを提供STSします。ROMアクセスとは異なり、明確な「拡張」命令はなく、代わりにRAMPレジスタが無条件に使用されます。

オプション機能の説明

3つの命令は、対応するハードウェア機能を備えたモデルにのみ存在します。

  • SPMフラッシュROMに保存するためのもので、フラッシュROMを搭載したプロセッサ(ほとんど)にのみ存在する。
  • BREAKオンチップデバッガを起動するための命令で、オンチップデバッガをサポートしていない一部の小型モデルでは省略されている。
  • DESデータ暗号化標準ラウンドを実行するためのもので、DESアクセラレータをサポートするXMEGAモデルに搭載されています。

AVR1以外のアーキテクチャはavr-libcの規則に従って命名されている。[ 3 ]

家族 メンバー 算術 支店 転送 ビット単位
最小限のAVR1コア
  • AT90S1200
  • ATtiny11
  • ATtiny12
  • ATtiny15
  • ATtiny28
  • ADD(LSL)
  • ADC(ROL)
  • サブ
  • スビ
  • SBC
  • SBCI
  • AND (TST)
  • アンディ(CBR)
  • または
  • ORI(SBR)
  • EOR(CLR)
  • コム
  • ネガティブ
  • 株式会社
  • 12月
  • RJMP
  • RCALL
  • RET
  • レティ
  • CPSE
  • CP
  • クリック単価
  • 消費者物価指数
  • SBRC
  • SBRS
  • SBIC
  • SBIS
  • BRBS (BRCS、BRLO、BREQ、BRMI、BRVS、BRLT、BRHS、BRTS、BRIE)
  • BRBC (BRCC、BRSH、BRNE、BRPL、BRVC、BRGE、BRHC、BRTC、BRID)
  • LD
  • ST
  • 動画
  • LDI(SER)
  • LPM(AT90S1200にはありません)
  • SBI
  • CBI
  • LSR
  • ROR
  • 自動応答
  • スワップ
  • BSET (SEC、SEZ、SEN、SEV、SES、SEH、SET、SEI)
  • BCLR (CLC、CLZ、CLN、CLV、CLS、CLH、CLT、CLI)
  • 英国標準時
  • BLD
  • いいえ
  • 寝る
  • WDR
最大 8K プログラム空間のクラシック コア (「AVR2」)
  • AT90S2313
  • AT90S2323
  • ATtiny22
  • AT90S2333
  • AT90S2343
  • AT90S4414
  • AT90S4433
  • AT90S4434
  • AT90S8515
  • AT90C8534
  • AT90S8535
  • ATtiny26
新しい指示:
  • ADIW
  • SBIW
新しい指示:
  • IJMP
  • 電話する
新しい指示:
  • LD(現在9つのモード)
  • LDD
  • 末日聖徒イエス・キリスト教会
  • ST(9モード)
  • 性感染症
  • STS
  • 押す
  • ポップ
(新しいことは何もありません)
AVR2、MOVWおよびLPM命令付き(「AVR2.5」)
  • ATa5272
  • ATtiny13/a
  • ATtiny2313/a
  • ATtiny24/a
  • ATtiny25
  • ATtiny261/a
  • ATtiny4313
  • ATtiny43u
  • ATtiny44/a
  • ATtiny45
  • ATtiny461/a
  • ATtiny48
  • ATtiny828
  • ATtiny84/a
  • ATtiny85
  • ATtiny861/a
  • ATtiny87
  • ATtiny88
(新しいことは何もありません) (新しいことは何もありません) 新しい指示:
  • 動画
  • LPM(Rx、Z[+])
  • SPM
(新しいことは何もありません)
最大 128K のクラシック コア (「AVR3」)
  • ATmega103
  • ATmega603
  • AT43USB320
  • AT76C711
(新しいことは何もありません) 新しい指示:
  • ジャンプ
  • 電話
新しい指示:
  • ELPM(「AVR3.1」内)
(新しいことは何もありません)
最大8Kの拡張コア(「AVR4」)
  • ATmega8
  • ATmega83
  • ATmega85
  • ATmega8515
新しい指示:
  • マル
  • MULS
  • ムルス
  • FMUL
  • FMULS
  • FMULSU [ 4 ]
(新しいことは何もありません) 新しい指示:
  • 動画
  • LPM(3モード)
  • SPM
(新しいことは何もありません)
最大 128K の拡張コア (「AVR5」、「AVR5.1」)
  • ATmega16
  • ATmega161
  • ATmega163
  • ATmega32
  • ATmega323
  • ATmega64
  • ATmega128
  • AT43USB355
  • AT94 (FPSLIC)
  • AT90CANシリーズ
  • AT90PWMシリーズ
  • ATmega48
  • ATmega88
  • ATmega168
  • ATmega162
  • ATmega164
  • ATmega324
  • ATmega328
  • ATmega644
  • ATmega165
  • ATmega169
  • ATmega325
  • ATmega3250
  • ATmega645
  • ATmega6450
  • ATmega406
(新しいことは何もありません) 新しい指示:
  • ELPMX(「AVR5.1」)
(新しいことは何もありません) 新しい指示:
  • 壊す
最大 4M の拡張コア (「AVR5」および「AVR6」)
  • ATmega640
  • ATmega1280
  • ATmega1281
  • ATmega2560
  • ATmega2561
(新しいことは何もありません) 新しい指示:
  • EIJMP
  • エイカル
(新しいことは何もありません) (新しいことは何もありません)
XMEGA コア ("avrxmega" 2-6) ATxmegaシリーズ 新しい指示:
  • デス
(新しいことは何もありません) 新しい手順(第 2 版シリコン - AU、B、C 部品から)
  • XCH
  • ラス
  • LAC
  • 緯度
(新しいことは何もありません)
縮小されたAVRtinyコア(「avrtiny10」)
  • ATtiny40
  • ATtiny20
  • ATtiny10
  • ATtiny9
  • ATtiny5
  • ATtiny4
(CPUレジスタセットaが削減されていることを除いて、最小コアと同一) (CPU レジスタ セットaの削減を除いて、最大 8K のクラシック コアと同一) 最大 8K のクラシック コアと同一ですが、次の例外があります。
LPM(削除済み)
LDD(削除済み)
性感染症(削除済み)
LD(プログラムメモリにもアクセスします)
LDS STS(アクセスはSRAMの最初の128バイトに制限されます)
CPUレジスタセットの削減
(CPUレジスタセットaの削減を除いて、最大128Kの拡張コアと同一)

縮小 レジスタセットはR16からR31までに制限されます。 [ 2 ]

命令エンコーディング

ビット割り当て:

  • rrrrr / ddddd = ソース/デスティネーションレジスタ
  • rrrr / dddd = ソース/デスティネーション レジスタ (R16 ~ R31)
  • rrr / ddd = ソース/デスティネーションレジスタ (R16~R23)
  • RRRR / DDDD = ソース/デスティネーションレジスタペア (R1:R0~R31:R30)
  • pp = レジスタペア、W、X、Y、またはZ
  • y = Y/Zレジスタペアビット(0=Z、1=Y)
  • u = FMULS(U) 符号なしビット (0=FMULS 符号付き、1=FMULSU 符号なし)
  • s = ストア/ロードビット (0=LD Rd,mem、1=ST mem,Rd)
  • c = コール/ジャンプ (0=ジャンプ、1=コール)
  • cy = キャリーあり(0=キャリーなし、1=キャリーあり)
  • e = EINDによる間接ジャンプ/呼び出しアドレスの拡張 (0=0:Z、1=EIND:Z)
  • q = RAMPZでプログラムメモリアドレスを拡張(0=0:Z、1=RAMPZ:Z)
  • aaaaaa = I/O空間アドレス
  • aaaaa = I/O空間アドレス(最初の32のみ)
  • bbb = ビット番号 (0~7)
  • B = ビット値(0または1)
  • kkkk = 4ビット符号なし定数(DESオペコード)
  • kkkkk = 6 ビットの符号なし定数
  • KKKKKKKK = 8ビット定数

Atmel AVRは、命令ワード内のビットが連続していない分割フィールドを多数使用します。最もよく見られるのは、ビット9とビット3~0の5ビットのソースレジスタフィールドです。最も極端な例は、オフセット付きロード/ストア命令で、6ビットのオフセットを3つの部分に分割します。

Atmel AVR命令セットの概要
1 51 41 31 21 11 098 76543210命令
0000000000000000いいえ
00000001DDDDRRRRMOVW Rd,Rr レジスタペアの移動
00000010ddddうーんMULS Rd、Rr
000000110ddd0rrrrMULSU Rd、Rr
000000110ddd1rrrrFMUL Rd、Rr
000000111dddあなたrrrrFMULS(U) Rd、Rr
00オペコードrddddddうーん2オペランド命令
000c̅y̅01rddddddうーんCPC/CP ロード、レール
000c̅y̅10rddddddうーんSBC/SUB 道路、Rr
000サイ11rddddddうーんADD/ADC Rd,Rr (Rd=Rr の場合、LSL/ROL Rd)
000100rddddddうーんCPSE 道路、Rr
001000rddddddうーんおよび Rd、Rr
001001rddddddうーんEOR 道路、Rr
001010rddddddうーんまたは Rd、Rr
001011rddddddうーんMOV ロード、Rr
0011KKKKddddKKKKCPI ロード、K
01OPCCKKKKddddKKKKレジスタ即時操作
010c̅y̅KKKKddddKKKKSBCI/SUBI Rd、K
0110KKKKddddKKKKORI ロード、K SBR ロード、K
0111KKKKddddKKKKANDI Rd、K CBR Rd、K
100ええとsddddddyクククLDD/STD RdからZ+kまたはY+kまで
100100sddddddオペコードロード/ストア操作
100100sdddddd0000LDS Rd,i/STS i,Rd
16ビット即値SRAMアドレス i
100100sdddddd1000(予約済み)
100100sddddddy001LD/ST RdからZ+/Y+まで
100100sddddddy010LD/ST Rdから−Z/−Yまで
100100sddddddy011(予約済み)
1001000dddddd01q0LPM/ELPM ロード、Z
1001000dddddd01q1LPM/ELPM 道路、Z+
1001001dddddd0100XCH Z、Rd
1001001dddddd0101LAS Z、Rd
1001001dddddd0110LAC Z、Rd
1001001dddddd0111LAT Z、Rd
100100sdddddd1100LD/ST RdからXまで
100100sdddddd1101LD/ST RdからX+まで
100100sdddddd1110LD/ST Rdから−Xまで
100100sdddddd1111ポップ/プッシュロード
1001010dddddd0オペコード1オペランド命令:
1001010dddddd0000COM ロード
1001010dddddd0001NEGロード
1001010dddddd0010スワップロード
1001010dddddd0011INCロード
1001010dddddd0100(予約済み)
1001010dddddd0101ASRロード
1001010dddddd0110LSRロード
1001010dddddd0111RORロード
10010100bbb1000SEx/CLx ステータスレジスタのクリア/セットビット
10010101オペコード1000ゼロオペランド命令
1001010100001000RET
1001010100011000レティ
100101010≠ 00×1000(予約済み)
1001010110001000寝る
1001010110011000壊す
1001010110101000WDR
1001010110111000(予約済み)
10010101110q1000LPM/ELPM
1001010111101000SPM
1001010111111000SPM Z+
1001010c000e1001Z または EIND:Z への間接ジャンプ/呼び出し
1001010c≠ 000e1001(予約済み)
1001010dddddd1010DECロード
10010100クックッ1011DESラウンドk
1001010クックッ11cJMP/CALL abs22
かっ、かっ、かっ、かっ、かっ、かっ
10010110ええとppクックッADIW Rp、uimm6
10010111ええとppクックッSBIW Rp、uimm6
100110B0ああああbbbCBI/SBI a,b (I/Oビットのクリア/セット)
100110B1ああああbbbSBIC/SBIS a,b (I/Oビットテスト)
100111rddddddうーんMUL、符号なし: R1:R0 = Rr × Rd
1011sああddddddああI/O空間へのIN/OUT
110c12ビット符号付きオフセットRJMP/RCALL から PC + simm12 へ
1110KKKKddddKKKKLDI ロード、K
111107ビット符号付きオフセットbbbステータスレジスタビットの条件分岐
111110sdddddd0bbbBLD/BSTレジスタビットをSTATUS.Tへ
111111Bdddddd0bbbレジスタビットがBの場合、SBRC/SBRSはスキップします。
11111××dddddd1bbb(予約済み)

参考文献

  1. ^ Assis, Claudia (2016年1月19日). 「Microchip Technology、チップメーカーAtmelを35億6000万ドルで買収」 . MarketWatch . 2025年12月10日閲覧。
  2. ^ a b c「AVR命令セットマニュアル」(PDF) . Atmel. 2016年11月. Atmel-0856L.
  3. ^ 「GNUツールの使用」 AVR Libcマニュアル. 2018年5月6日閲覧
  4. ^ Atmel.アプリケーションノート「AVR201: AVRハードウェア乗算器の使用」 . 2002. 引用: 「megaAVRは、AVR RISCマイクロコントローラファミリーの新しいデバイスシリーズで、その他の新機能の中でも、ハードウェア乗算器が搭載されています。」