H8/300H-CPUのアセンブラプログラムで頻繁に使用する命令と,後のPID制御,PWM制御で使用するプログラム命
令の説明を行う。
代表的なプログラム命令
(1) アセンブラ制御命令
制御命令はプログラムの始めに指定するプログラム命令である。以下に命令の種類と説明,基本フォーマット,使用
法方などを示す。
@ .HEADING命令
アセンブラリストを表示した時,この次に"○"でくくった内容を表示するという命令。
【例】
A .CPU命令
.CPU命令は,アセンブラにCPUの種別を指定するプログラムである。この指定を確実に行わないと,どの種別のCPU
を使っているのか解らず認識されない。
【例】
B .SECTION命令
セクションとはプログラムの単位である。機械語に変換されたプログラムは,セクション情報によってメモリに配置され
る。H8マイコンのプログラムは必ずどこかのセクションに属する。
例1のプログラムは,PROGがセクション名,CODEがセクション属性を表し,プログラムを書き込む番地をF780からと
指定する命令である。
例2のプログラムは,リセットした時に0000番地からプログラムを開始するという命令である。
【例1】
【例2】
C .DATA命令
プログラムにはMOV命令やADD命令のように,CPUが実行する命令の他に,データの格納庫であるメモリの領域が
必要である。そこで,.DATA命令は必要となる。.DATA命令は,メモリの領域を定義する命令である。例の命令は, DATA1としたワードサイズのメモリ領域に,100(10進数)を確保する意味を持つ。
【例】
D .EQU命令
.EQU命令は,指定の番地に名前を付けるアセンブラ制御命令である。例の命令は,PCR1というレジスタの番地の指
定をする命令である。
【例】
E .END命令
.END命令は, プログラムの終わりを意味する命令である。
【例】
(2)実行命令
@ MOV命令
MOV命令はデータを転送するための命令で,アセンブラプログラムで最も使われる命令である。メモリ上のデータを
加工するためには,まずメモリの内容をCPUのレジスタに移動させ,処理した後,再びメモリに返す。そういった一連の 移動にMOV命令を使用する。
【例】
なお,データのサイズはB(バイトデータ:8ビット),W(ワイドデータ:16ビット),L(ロングデータ:32ビット)で表現される。例
のプログラムは16進で"11"というデータを8ビットのレジスタに移動させたいので,命令サイズをBとしている。
A 演算命令
代表的な演算命令に,ADD命令,SUB命令,MULXU命令,DIVXU命令などがある。これらは左から加算,減算,乗
算,除算をする命令である。操作内容と基本的な使い方の例を以下に示す。
(a) ADD命令
【操作内容】
Rd16+Rs16→Rd16(RsとRdの内容を加算しRdレジスタに格納する。)
【例】
(b) SUB命令
【操作内容】
Rd16-Rs16→Rd16(RdからRsを減算しRdレジスタに答えを格納する。)
【例】
(c) MULXU命令
【操作内容】
Rd16×Rs16→ERd32(RdとRsを乗算し答えをERdレジスタに格納する。)
【例】
(d) DIVXU命令
【操作内容】
ERd32÷Rs16→ERd32(ERdをRsで除算し答えをERdに格納する。)
※答えを格納したERdには上位16ビットに余り,下位16ビットに商が格納される。
【例】
B その他の命令
(a) BTST命令及びBEQ命令
BTST命令はビットの状態を調べて結果をCCRのZフラグに反映させる命令である。BEQ命令はBTSTと対でよく使われ
る命令であり,調べるレジスタが0になった時,指定のサブルーチンへ分岐する命令である。
【例】
LOOP:・・・
(b) BSET命令及びBRA命令
BSET命令は,指定したレジスタの各ビットを1にする事が出来る命令である。BRA命令はよくBSET命令と対でよく使
われる命令であり,強制的に前のルーチンへ分岐させる事の出来る命令である。
【例】
LOOP:・・・
プログラム例
プログラムには規定のフォーマットが細かく指定されている。マニュアルを見ても理解しがたいので,実際にプログラ
ムを見て覚えるのが最適である。そこで,以下に幾つかのプログラムを記載する。
【プログラム例1】
このプログラムはH8Tinyマイコンキットに入っているテストプログラムであり,TERA2ボードの二つのLEDを交互に点灯
させるプログラムである。
ダウンロード(メモ帳1.02KB)
.【プログラム例2】
以下のプログラムは後に出てくるPWM制御プログラムの単純なPWM波形出力をするプログラムである。詳しくは4章
で参照する。
ダウンロード(メモ帳921B)
|