プログラム

 H8/300H-CPUのアセンブラプログラムで頻繁に使用する命令と,後のPID制御,PWM制御で使用するプログラム命
令の説明を行う。

代表的なプログラム命令

(1) アセンブラ制御命令
 制御命令はプログラムの始めに指定するプログラム命令である。以下に命令の種類と説明,基本フォーマット,使用
法方などを示す。

@ .HEADING命令
 アセンブラリストを表示した時,この次に"○"でくくった内容を表示するという命令。

【例】
.HEADING "TEST FOR H8/3664F"


A .CPU命令
 .CPU命令は,アセンブラにCPUの種別を指定するプログラムである。この指定を確実に行わないと,どの種別のCPU
を使っているのか解らず認識されない。

【例】
.CPU300H


B .SECTION命令
 セクションとはプログラムの単位である。機械語に変換されたプログラムは,セクション情報によってメモリに配置され
る。H8マイコンのプログラムは必ずどこかのセクションに属する。
 例1のプログラムは,PROGがセクション名,CODEがセクション属性を表し,プログラムを書き込む番地をF780からと
指定する命令である。
 例2のプログラムは,リセットした時に0000番地からプログラムを開始するという命令である。

【例1】
.SECTION PROG, CODE, LOCATE=H'F780

【例2】
.SECTION VECTOR, DATA, LOCATE=H'00

C .DATA命令
 プログラムにはMOV命令やADD命令のように,CPUが実行する命令の他に,データの格納庫であるメモリの領域が
必要である。そこで,.DATA命令は必要となる。.DATA命令は,メモリの領域を定義する命令である。例の命令は,
DATA1としたワードサイズのメモリ領域に,100(10進数)を確保する意味を持つ。

【例】

DATA1:.DATA.W 100

D .EQU命令
 .EQU命令は,指定の番地に名前を付けるアセンブラ制御命令である。例の命令は,PCR1というレジスタの番地の指
定をする命令である。

【例】

PCR1:.EQUH'FFE8

E .END命令
 .END命令は, プログラムの終わりを意味する命令である。

【例】

;----------------------------------
.END
;----------------------------------

(2)実行命令

@ MOV命令
 MOV命令はデータを転送するための命令で,アセンブラプログラムで最も使われる命令である。メモリ上のデータを
加工するためには,まずメモリの内容をCPUのレジスタに移動させ,処理した後,再びメモリに返す。そういった一連の
移動にMOV命令を使用する。

【例】

MOV.B  #H'11,R0L
MOV.B  R0L,@PCR

 なお,データのサイズはB(バイトデータ:8ビット),W(ワイドデータ:16ビット),L(ロングデータ:32ビット)で表現される。例
のプログラムは16進で"11"というデータを8ビットのレジスタに移動させたいので,命令サイズをBとしている。


A 演算命令
 代表的な演算命令に,ADD命令,SUB命令,MULXU命令,DIVXU命令などがある。これらは左から加算,減算,乗
算,除算をする命令である。操作内容と基本的な使い方の例を以下に示す。

(a) ADD命令

【操作内容】
Rd16+Rs16→Rd16(RsとRdの内容を加算しRdレジスタに格納する。)

【例】

MOV.W  #D'1,R0
MOV.W  #D'2,R1
ADD.W   R0,R1

(b) SUB命令
【操作内容】

Rd16-Rs16→Rd16(RdからRsを減算しRdレジスタに答えを格納する。)

【例】

MOV.W  #D'1,R0
MOV.W  #D'2,R1
SUB.W   R0,R1

(c) MULXU命令
【操作内容】

Rd16×Rs16→ERd32(RdとRsを乗算し答えをERdレジスタに格納する。)

【例】

MOV.W  #D'1,R0
MOV.W  #D'2,R1
MULXU.W   R0,ER1

(d) DIVXU命令
【操作内容】

ERd32÷Rs16→ERd32(ERdをRsで除算し答えをERdに格納する。)
※答えを格納したERdには上位16ビットに余り,下位16ビットに商が格納される。

【例】

MOV.W  #D'1,R0
MOV.W  #D'2,R1
DIVXU.W  R0,ER1

B その他の命令

(a) BTST命令及びBEQ命令
BTST命令はビットの状態を調べて結果をCCRのZフラグに反映させる命令である。BEQ命令はBTSTと対でよく使われ
る命令であり,調べるレジスタが0になった時,指定のサブルーチンへ分岐する命令である。

【例】
                      LOOP:・・・
         BTST  @(指定したレジスタ)
 BEQ   LOOP

(b) BSET命令及びBRA命令
 BSET命令は,指定したレジスタの各ビットを1にする事が出来る命令である。BRA命令はよくBSET命令と対でよく使
われる命令であり,強制的に前のルーチンへ分岐させる事の出来る命令である。

【例】

                      LOOP:・・・
           BSET  #7,@(指定したレジスタ)
  BRA    LOOP
 
プログラム例

 プログラムには規定のフォーマットが細かく指定されている。マニュアルを見ても理解しがたいので,実際にプログラ
ムを見て覚えるのが最適である。そこで,以下に幾つかのプログラムを記載する。

【プログラム例1】

 このプログラムはH8Tinyマイコンキットに入っているテストプログラムであり,TERA2ボードの二つのLEDを交互に点灯
させるプログラムである。

ダウンロード(メモ帳1.02KB)

.【プログラム例2】

 以下のプログラムは後に出てくるPWM制御プログラムの単純なPWM波形出力をするプログラムである。詳しくは4章
で参照する。

ダウンロード(メモ帳921B)


トップへ
トップへ
戻る
戻る