Z8 Encore!機械語プログラミング

はじめての方は「ごあいさつ」からご覧ください。(古い記事順に並べています)

目次
------------------------------------------------------------
ごあいさつ
第1回 ハードウェア概要と開発環境
第2回 電源投入からのプログラム実行まで
第3回 プログラム実行で最初に行うこと
第4回 送受信サブルーチン
第5回 パラレルポートの入出力
第6回 eZ8CPU命令(1)
------------------------------------------------------------

■ごあいさつ(2016/10/01掲載,2016/11/06最終変更)

 ザイログのマイコンZ8 Encore!(*1)の1つZ8F6421PM020SGの機械語プログラミングを解説します。
 このマイコンは日本語の技術資料が少なく、英文マニュアルが苦手の人にはとっつきが悪いのですが、所詮コンピュータ用語の羅列です。
 何とか慣れてしまえば、アセンブラで遊ぶ/学ぶには最適なマイコンです。(理由はコラム「色々」の「ごあいさつ」をご覧ください)
 ここでは、マイコンキットZCPU1/K(E)で具体的に説明しますが、メーカー純正ツール(*2)を使用する方にも参考になることと思います。
 私の理解不足から間違った説明をしてしまうことがあるかもしれませんが、それはご了承ください。
 では、始めます。
--------------------
(*1)厳密には、Z8 Encore!(R)、Z8 Encore! XP(R)、Z8 Encore! MC(TM)の3種類(無印、XP、MC)があり、このうちのXPです。
(*2)ザイログ社から直接購入か、Digi-Key(http://www.digikey.jp/)から購入可能かと思います。

■第1回 ハードウェア概要と開発環境(2016/10/01掲載,2016/10/22最終変更)

 まず最初に、プログラム開発する対象マイコン(Z8F6421PM020SG)のハードウェアの特徴を知る必要があります。
 このマイコンの特徴を列挙します。

・8ビットCPUコア(eZ8)内蔵のマイクロコントローラ
・40ピンDIPパッケージ、3.3V動作
・ROM64Kバイト、RAM4Kバイト、各種I/O、オンチップデバッガー(*1)内蔵
・最小外付部品はセラミック振動子と若干の抵抗のみ(ROM書込時にはさらに数個の部品が必要)
・リセット解除(電源投入)後、内蔵ROMの2~3番地に書かれたベクタアドレスからプログラム実行
・各種コントロールレジスタはRAM空間の最後0F00H~0FFFH
・RAMに対し16バイト、256バイト、4Kバイトのアドレッシングモードがある
・ROMアドレス空間とRAMアドレス空間は別々にあり、RAM上の機械語プログラムは実行不可

 他のマイコンでプログラミング経験のある方は、以上の情報でZ8 Encore!の全体像が理解いただけたと思います。
 あとは、マニュアルとサンプルプログラムがあれば、3日後にはプログラムを書き始められる方もいるとは思いますが、ここではもう少し丁寧に説明し ま す。

 次に参考資料ですが、次のものがあります。
 ここでは、参考資料が手元になくても読めるようにしていくつもりですが、実機でプログラミングする方はダウンロードをお勧めします。

・マイコンメーカーのマニュアル2冊(CPUコアとマイコン)(*2)
・マイコンキット関連資料(アセンブラ命令形式、キットおよび添付ソフトの取扱説明書、回路図、ファームウェアリスト抜粋)(*3)
--------------------
(*1)名前の通りマイコンチップに内蔵のデバッガーで、外部とのシリアル通信でROM読出/書込/消去が可能です。
(*2)具体的には次のマニュアルです。ザイログ社のホームページ(http://www.zilog.com/)等からダウンロードできます。
 eZ8 CPU User Manual(UM0128)
 Z8 Encore! XP F64xx Series Product Specification (PS0199)
(*3)具体的には次のマニュアルです。(2016年10月時点)
 本ホームページの「関連文書」からダウンロードできます。
 取扱説明書 (doc1c.pdf)
 添付ソフトウェア取扱説明書 (doc2b.pdf)
 添付アセンブラ命令形式 (doc4.pdf)
 回路図 (kairo-zcpu1r2.pdf)
 ファームウェアリスト抜粋 (rom-zcpu1v102.txt)

■第2回 電源投入からのプログラム実行まで(2016/10/09掲載,2016/10/22最終変更)

 第1回で触れましたが、このマイコンは電源投入後、内蔵ROMの2~3番地に「書かれたベクタアドレス」のプログラムから実行します。(*1)
 今回は、この電源投入後マイコンを正しく動作させるために必要なプログラムを見てみます。
 プログラム例としてキットのファームウェアリストを使います。
 本当は長いリストなのですが、ここでは説明に不要な部分を省略して表記しています。

【リスト2-1】
                :PAADDR EQU %FD0        'PORT A ADDRESS(01H:DATA DIRECTION,02H:PACTL=ALTEMATE FUNCTION)
                :PACTL  EQU %FD1        'PORT A CONTROL
                :PAIN   EQU %FD2        'PORT A INPUT DATA
                :PAOUT  EQU %FD3        'PORT A OUTPUT DATA
                '
                :PCADDR EQU %FD8        'PORT C ADDRESS(01H:DATA DIRECTION,02H:PACTL=ALTEMATE FUNCTION)
                :PCCTL  EQU %FD9        'PORT C CONTROL
                :PCIN   EQU %FDA        'PORT C INPUT DATA
                :PCOUT  EQU %FDB        'PORT C OUTPUT DATA
                '
                :FLAGS  EQU %FFC        'FLAGS
                :RP     EQU %FFD        'REGISTER POINTER
                :SPH    EQU %FFE        'STK POINTER H
                :SPL    EQU %FFF        'STK POINTER L

 リスト2-1では、EQU疑似命令でマイコン内蔵レジスタのアドレスにラベル(名前)を割り当てています。
 これにより内蔵レジスタをアドレスではなく名前で呼ぶことができ、プログラムは格段に見やすくなります。
 ラベルは何でも構わないのですが、メーカーで決めたれレジスタ名を使った方が便利です。(*3)
 なお、本アセンブラ特有のルールなのですがラベル先頭にはコロン(:)を付けます。 

 リストを見ると左側のアドレス、データ部分が空白になっています。
 これは単なるラベルに数値を割り当てているだけで、アセンブラがコードを生成しないからです。
 
 では、次にリスト2-2を見てみます。

【リスト2-2】
                    ORG %0000       '以降、0番地からコード展開
                'DB文で、ROM空間のメモリに数値を置くことが可能
0000 EF             DB  %EF         'オプションビット設定(OSC SEL=10)
0001 FF             DB  %FF
                '
0002 00             DB  %00         'リセットベクター(0038番地へジャンプ)
0003 38             DB  %38
(途中省略)
0038 8D0068         JP  :START      'システムコール38h(56) START   (非公開)システムスタート

 リスト2-2の1行目にORG疑似命令があります。
 これは、指定番地からコード展開することをアセンブラに指示しています。
 ここでは%0000なので、0番地を指定しています。(%は16進数を意味します)

 3、4行目ではDB疑似命令で0番地のデータをEFH、1番地のデータをFFHとしています。
 データが0番地以降に展開されたのは、先程のORG命令で0番地を指定したためです。
 本マイコンの0番地と1番地はオプションビットといって、マイコンの動作モードを規定する特殊なROMエリアです。
 結論を言うと、本キットでは4MHzのセラミック振動子を使っているため0番地のデータをEFHにしています。(*4)
 
 次の6、7行目ではDB疑似命令で2番地のデータを00H、3番地のデータを38Hとします。
 このデータは基本的には自由な値を書いてかまいません。
 マイコンは電源投入後、ROMの2~3番地に書かれたアドレス(ベクターアドレスと呼ぶ)からプログラムを実行します。
 このプログラムの場合、マイコンが最初に実行する機械語プログラムは38H番地に書かれた機械語ということになります。

 では、38H番地を見て見ましょう。
 リストでは途中省略していますが最後の行(0038H番地)にJP(ジャンプ)命令があります。
 マイコンは最初にこのJP命令を実行することになります(*5)。
 リストの左側を見ると「8D0068」と書いてありますが、これがJP命令(JP :START)の機械語です。
 
 次回は、START以降のプログラムを見ていくことにします。
--------------------
(*1)2~3番地に書かれたプログラムから実行ではないことに注意してください。
(*2) マイコン内蔵ROMは、マイコンメーカーから消去状態(データFFH)で出荷されています。(一部CPU情報エリアは例外)
 キットZCPU1/K(E)のマイコン内蔵ROMに書き込まれているプログラムは、後から書き込んだものです。
(*3)メーカー純正ツーの場合、ヘッダファイルとして提供されているかも知れません。この場合、ヘッダファイルをプログラム先頭でインクルードする必要があ りま す。
(*4)詳細は、マイコンチップの方のマニュアルのオプションビット(Option Bits)を見てください。
(*5)せっかく、38番地から実行できるのに、わざわざ別の番地(START)へジャンプさせるのは本キットの都合です。
 新規にマイコンのプログラムを開発する場合は、わざわざ別の番地にジャンプさせる必要はなく、ここから(この場合38H番地)からプログラムを書 いて かまいません。

■第3回 プログラム実行で最初に行うこと(2016/10/22掲載,2016/11/05最終変更)

 前回は、マイコンの電源が投入されてから最初の命令を実行するまでのプログラムを説明しました。
 このプログラムをマイコンのROMに書き込んで電源投入すれば、マイコンは最初の命令を正しく実行します。
 しかし、この時点ではマイコン内部のレジスタやマイコンの各ピンの機能はマイコンチップ内部のハードウェアで決められた初期状態になっています。
 マイコンに目的の処理(機械制御、言語処理など)を行わせるためには、この初期状態を適切な状態に変更(初期設定)する必要があります。
 今回はこの初期設定について説明します。
 では、プログラム例としてキットのファームウェアの初期設定を見てみましょう。

【リスト3-1】
                :START
0068 8F             DI              '割込禁止
0069 0100           SRP #%00        'RP=0(ワーキングレジスタを000h~00Fh番地に割り当てる)
006B E9010FFE       LDX :SPH,#%01   'スタックポインタ設定(100h)
006F E9000FFF       LDX :SPL,#%00
0073 E9000F46       LDX :U0BRH,#0   'BR=26(4MHzのとき、9600bps)
0077 E91A0F47       LDX :U0BRL,#26

 リスト3-1の2行目では、DI(Disable Interrupts)命令で割込禁止にしています。
 本キットのファームウェアでは割込を使用していないのでこのようにしています。
 なお、割込が必要な場合は、後でEI(Enable Interrupts)命令で割込を許可することが可能です。

 3行目にはSRP(Set Register Pointer)命令があります。
 ここでは、RP(Register Pointer)を00Hとしています。
 このマイコンはRAMの任意の16バイト範囲(xx0H~xxFH番地)をレジスタr0~r15として扱うことができ、このときRPでxx部分を 指定 します。
 RP=00Hとしたので、r0~r15は000H~00FH番地に割り当てられることになります。

 4~5行目では、サブルーチンや割込で使用するスタックポインタを設定しています。
 ここでは100H番地に設定しているので、100H番地"未満"のFFH,FEH,FDH…番地のRAMがスタックエリアに使用されます。
 どこまで使用されるかはプログラムによって決まります。

 6~7行目では、シリアル通信の通信速度を設定しています。
 通信速度はマイコンのクロック(4MHz)をどの程度分周するかで決まります。
 ここでは9600bpsに設定しています。

 では、次にリスト3-2を見てみます。

【リスト3-2】
                'PA0-PA3初期化(キースイッチ)
007B E9010FD0       LDX :PAADDR,#%01    'DATA DIRECTION選択
007F E90F0FD1       LDX :PACTL,#%0F     'PA3,PA2,PA1,PA0=1(INPUT)
                'PC2-PC5初期化(EEPROM)
0083 E9010FD8       LDX :PCADDR,#%01    'DATA DIRECTION選択
0087 E9200FD9       LDX :PCCTL,#%20     'PC5=1(INPUT),PC6,PC4,PC3,PC2=0(OUTPUT)
(途中省略)
                'UART1初期化
009C E9020FD0       LDX :PAADDR,#%02    'ALTEMATE FUNCTION選択
00A0 E9F00FD1       LDX :PACTL,#%F0     'PA7,PA6,PA5,PA4=ALTEMATE FUNCTION(SDA,SCL,TXD0,RXD0)
00A4 E9000FD0       LDX :PAADDR,#%00    '選択保護
00A8 E9C00F42       LDX :U0CTL0,#%C0    '送受信有効、CTS無効、パリティなし、1ストップビット
00AC E9020F43       LDX :U0CTL1,#%02

 リスト3-2の2~3行目は、マイコンの汎用入出力ポート(A~D)のAポートの設定です。
 多くのマイコンは、データ方向レジスタの各ビットに0または1を書き込むと、対応するICのピンが入出力のどちらの機能で動作するかが決定されま す。
 このマイコンのポートの設定は少し複雑で、データ方向レジスタが隠されています。
 このため、まず2行目でデータ方向レジスタを見えるようにしてから、3行目で入力/出力を決定しています。

 同様に、5~6行目ではCポートの入力/出力を決定しています。

 9~13行目は、シリアル通信(RS-232Cポート)の設定です。
 汎用入出力ポートと同様、機能を設定するレジスタが見えるようにしてから、10行目で対応するICのピンの機能を設定しています。
 11行目は、必要かどうかはわかりませんが念のため入れてあります。
 12行目は、シリアル通信の色々なパラメータの設定で、これは隠されていないので直接操作できます。

 以上が、本キットファームウェアの初期設定の主要部分です。
 特に、データ方向レジスタが隠れていることと、データ方向レジスタに0(1)を書き込むと出力(入力)であることに注意してください。

 次回は、ターミナル(パソコン)との送受信サブルーチンを見ていくことにします。

■第4回 送受信サブルーチン(2016/11/06掲載,2016/11/08最終変更)

 マイコンの送受信に関しては1つの悩ましい問題があります。
 昔のパソコンなら背面のパネルにCOMポートがあり、マイコン側は信号電圧を変換するだけで簡単な調歩同期方式で通信ができました。
 ところが、最近のパソコンにはUSBポートはありますが、COMポートはありません。
 それならUSBということで、パソコンとマイコンをUSBケーブルで接続すればハード的には解決ですが、この方法ではUSBの処理をマイコン側が 行う ことになってしまいます。
 実は、このUSBの処理というが結構難易度が高く、できれば避けて通りたいところです。

 一番手っ取り早い解決方法として、パソコンとマイコンを市販の「USB-シリアル変換ケーブル」で接続する方法があります。
 この方法は、マイコン側からパソコンがCOMポートとして見えるため、USBの処理が不要となり、従来通りの簡単な調歩同期方式で通信ができるこ とに なります。(*1)
 本キットでは、この一番手っ取り早い解決方法を使っています。

 では、キットの送信サブルーチンを見てみましょう。

【リスト4-1】
                :OUTCH
0112 7000           PUSH 0
                'モードによらず端末、液晶表示器の両方に表示
                :L2000
0114 840F41         LDX  r0,:U0STAT0    'TRN REG FULL?
0117 F620FA         BTJZ 2,r0,:L2000
011A 5000           POP  0
011C 940F40         LDX  :U0TXD,r0      'TRN
(途中省略)
012E AF             RET

 リスト4-1の5行目でシリアル通信のステータスレジスタを読んでいます。
 6行目でそのビット2(送信データが書き込み可能なら1となるフラグ)を見ています。
 6行目のBTJZ(Bit Test and Jump if Zero)命令は、その名の通り指定レジスタの指定ビットが0ならジャンプする命令です。
 つまり、この2行(ラベルL2000を含むと3行)で送信データが書き込み可能になるまでループで待つ処理をおこなっていることになります。

 ビット2が1(送信データが書き込み可能)になったらこのループを抜けて、8行目で送信データを送信データレジスタに書き込んでいます。
 後はマイコンのハードウェアが自動的に調歩同期方式で送信を行ってくれます。

 次に受信サブルーチンを見てみましょう。
 考え方は、送信サブルーチンとほぼ同じです。

【リスト4-2】
                :INPCH
(途中省略)
                :L2010
0134 840F41         LDX  r0,:U0STAT0    'REC REG EMPTY?
0137 F670FA         BTJZ 7,r0,:L2010
013A 840F40         LDX  r0,:U0RXD      'REC
013D AF             RET

 リスト4-2の4行目でシリアル通信のステータスレジスタを読んでいます。
 5行目でそのビット7(受信データが読み出し可能なら1となるフラグ)を見ています。
 この2行(ラベルL2010を含むと3行)で受信データが読み出し可能になるまでループで待つ処理をおこなっていることになります。

 ビット7が1(受信データが読み出し可能)になったらこのループを抜けて、6行目で受信データを受信データレジスタから読み出しています。

 以上が送受信サブルーチンです。
 このサブルーチンはループで送受信のフラグを監視する方法ですが、別の方法としてループで待たずに割込みで送受のフラグを監視する方法もありま す。

 次回は、パラレルポートの入出力を見ていくことにします。
--------------------
(*1)USBーCOMポート変換をデバイスドライバに処理させるため、パソコンアプリケーション(ターミナルソフトなど)からもCOMポートに見えます。

■第5回 パラレルポートの入出力(2016/11/20掲載,2018/12/15最終変更)

 今回はパラレルポートの入出力について見てみます。
 パラレルポートは処理が単純(というよりは通信の約束事(プロトコル)をソフトウェアに任せているためマイコンが面倒を見ないという意味で単純) で す。
 すでに初期設定(リスト3-2)で説明した内容がほぼすべてですが、ここではハードウェアとの関連で見てみます。

【リスト3-2の一部(再掲)】
                'PA0-PA3初期化(キースイッチ)
007B E9010FD0       LDX :PAADDR,#%01    'DATA DIRECTION選択
007F E90F0FD1       LDX :PACTL,#%0F     'PA3,PA2,PA1,PA0=1(INPUT)
                'PC2-PC5初期化(EEPROM)
0083 E9010FD8       LDX :PCADDR,#%01    'DATA DIRECTION選択
0087 E9200FD9       LDX :PCCTL,#%20     'PC5=1(INPUT),PC6,PC4,PC3,PC2=0(OUTPUT)
 
 図4-1は、マイコンキットの回路図の一部分を抜粋したも のです。
 マイコンにPAx,PBx,PCx,PDx(x=0~7)というピン名があることが判ります。(*1)


                                        【図4-1】マイコンキットの回路図の一部分
 
回路図を見るとスイッチSW4はマイコンのピンPA3に接続されていて、マイコンにとっては入力装置です。
 したがって、PA3のデータ方向レジスタは入力に設定しなければなりません。
 リスト3-2を見ると、確かに次の2行でPA3は入力に設定されていることが判ります。

007B E9010FD0       LDX :PAADDR,#%01    'DATA DIRECTION選択
007F E90F0FD1       LDX :PACTL,#%0F     'PA3,PA2,PA1,PA0=1(INPUT)

 さらに回路図を見ると3V3(3.3V)が10kΩの抵抗を介してPA3に常時接続されています。
 また、スイッチSW4を押したときだけGNDにも接続されます。
 したがって、スイッチSW4を押していなときはPA3はHレベルとなり、ポートA入力レジスタ(具体的にはFD2H番地)のビット3には1が現れ ま す。
 また、スイッチSW4を押しているときはPA3はLレベルとなり、ポートA入力レジスタのビット3には0が現れます。
 最初に書いたように、マイコンはプロトコルの面倒まで見ません。
 単純に、入力ポートの電圧状態(HレベルまたはLレベル)を入力レジスタに反映(1または0)させるだけです。

 では、次に出力ポートを見てみましょう。
 LED1はマイコンのピンPC6に接続されていて、マイコンにとっては出力装置です。
 したがってPC6のデータ方向レジスタは出力に設定しなければなりません。
 リスト3-2を見ると、確かに次の2行でPC6は出力に設定されていることが判ります。

 回路図を見ると3V3(3.3V)が制限抵抗330ΩとLED1を介してPC6に接続されています。(*2)
 したがって、PC6がLレベル(ほぼ0V)のときのみ、制限抵抗330ΩとLED1両端に電位差(3.3V)が発生し電流が流れLEDが光りま す。
 これは、ポートC出力レジスタ(具体的にはFDBH番地)のビット6に0を書き込んだ状態です。
 反対に、ポートC出力レジスタのビット6に1を書き込んだ状態では、電流は流れずLEDは光ません。

 以上でわかる通り、パラレルポートは初期設定してしまえば後はメモリ(RAM)と大差ありません。
 外部ピンの電圧レベルと連動したメモリと考えると解りやすいと思います。

 次回から数回にわたりマイコン(eZ8CPUコア)の命令を見ていきましょう。
 難しいわけではありませんが、結構ユニークな部分があります。(*3)
--------------------
(*1)よく見ると、PC7やPD3が見あたりませんが、40ピンというピン数の制約だと思います。
(*2)キットのLED1の配線では出力ポートがLのとき電流が流れ込みますが、出力ポートがHのとき電流が流れ出す配線(LEDの向きが逆になる)でもかま いま せん。
(*3)レジスタをいわゆるRAMに配置し直接RAMをいじれたり、命令のオペランドが特定パターンのとき別動作をしたりと、自由奔放(?)なアーキテクチャ で す。

■第6回 eZ8CPU命令(1)(2017/01/04掲載)

 今回から数回、マイコン(eZ8CPUコア)の命令を説明していくことにします。(*1)
 命令は、一般に次の形式で表せます。

  <ラベル> <命令ニーモニック> <オペランド1>,<オペランド2>,<オペランド3>

 ここで、<ラベル>は必要無ければ省略可能です。
 また、<命令ニーモニック>の後にオペランドがいくつ続くかは、命令によって異なります。

 次に、eZ8CPUの命令を便宜的に分類してみました。
 アセンブラのプログラミング経験のある人は、おおよそ2/3の命令はニーモニックだけでどんな命令か予測がつくと思います。
オペランド0個 BRK,NOP,ATM,WDT,STOP,HALT,DI,EI,RET,IRET,RCF,SCF,CCF
オペランド1個 SRP,RLC,INC,DEC,DA,POP,COM,PUSH,DECW,RL,INCW,CLR,RRC,SRA,RR,SWAP,BSWAP,MUL,SRL,TRAP,PUSHX,POPX
オペランド2個 ADD,ADC,SUB,SBC,OR,AND,TCM,TM,CP,XOR,CPC,ADDX,ADCX,SUBX,SBCX,ORX,ANDX,TCMX,TMX,CPX,XORX,CPCX
ロー ド命令 LDE,LDC,LDEI,LDCI,LDWX,LEA,LD,LDX
ジャンプ・ビット操作 JP,JR,CALL,BTJZ,BTJNZ,DJZN,BIT0,BIT1

 次にレジスタについて説明します。
 あまりしっくりこないのですが、eZ8CPUでは4KバイトのRAMはメモリではなくレジスタと呼んでいます。
 したがって、4Kバイトのメモリはレジスタの感覚で直接操作可能です。
 ただし、プログラマがメモリを直接操作するのに慣れていないと、非常に違和感があります。(*2)

 次に、オペランドについて簡単に説明します。
 種々のオペランド表現がありますが、基本は、定数、4ビットレジスタ、8ビットレジスタ、12ビットレジスタの4種類です。

(1)定数
 先頭に記号(#)を付けることで10進数定数を意味します。さらに記号(%)を付けると16進定数を意味します。

 例 LD %FE,#123        '定数123をRAMのFEh番地に転送

(2)4ビットレジスタ(ワーキングレジスタ)
 r0~r15と表現されていた場合、ワーキングレジスタを意味します。
 ワーキングレジスタは、メモリ(RAM)上の任意の場所(レジスタポインタRPで指定)に設けられた連続した16個の8ビットレジスタです。
 4ビットでレジスタが指定できるため、短い命令サイズが可能です。

 例 INC    r15            'ワーキングレジスタ15を+1加算

(3)8ビットレジスタ
 4KバイトのRAMの先頭256バイト(00h~FFh番地)を意味します。特にレジスタを示す記号(Rなど)は付けません。

 例 ADD %23,%24    '23h番地の内容と24h番地の内容を加算して23番地に保存

(4)12ビットレジスタ
 4KバイトのRAM全体(000h~FFFh番地)を意味します。特にレジスタを示す記号(Rなど)は付けません。

 例 ADDX %8FF,%D12    '8FFh番地の内容とD12h番地の内容を加算して8FFh番地に保存

 定数や、4ビットレジスタは記号(#やr)で明示されていますが、8ビットレジスタと12ビットレジスタは記号がありません。
 この2つは、ニーモニックで区別しています。(*3)

 今回は、ここまで。
--------------------
(*1)以下の説明は、キット付属のアセンブラによる説明でメーカー純正ツール純正と異なる部分があることをご了承ください。
(*2)ワーキングレジスタの番地を固定し、汎用レジスタのように使う方法も可能です。
(*3)すべて当てはまるかどうかはわかりませんが、ニーモニック末尾にXが付くと12ビットレジスタみたいです。


[タ カミコムボードのトッ プページへ移動]