基準となるメモリアドレスの設定
.org 0x0000 /* 68000 のベクタテーブルの先頭に設定 */ .org 0x400 /* 0x400 に設定 */
データを実メモリ内に配置
dc.l 0x3000 /* 0x00003000を格納 (.l は4バイト) */ dc.l START /* ラベル START が指し示すメモリアドレスの値そのものをメモリ中に格納 */ dc.b 'a','b','c',0 /* カンマで区切られて4つ並んでいるので,4バイト分格納される */
データエリアを指定されたサイズだけ確保
ds.b 500 /* 500 バイト確保 */
シンボルの定義(ラベルとシンボルは別のものです.ラベルは、プログラムやデータが置いてある「メモリアドレス」と関連付けられた文字列。シンボルは、.equ に記述された値に関連付けられた文字列)
.equ BUFFER_SIZE,256 /* シンボル BUFFER_SIZE の値を 256 と定義 */
データ転送
move.w #200,%d2 /* #200 は10進数. d2 の上位バイトは変化しない */ move.l #0x01,%d1 /* #0x01 は16進数. d0 に 0x00000000 がセットされる */ move.w #0x2700,%sr /* 割り込み禁止 */ move.w #BUFFER_SIZE,%d2 /* 「.equ BUFFER_SIZE 100」のような文とペアで使う */ move.l %d0,%d1 move.l %d0,(%a0) /* アドレスレジスタ a0 がポイントするメモリに転送(a0は変化しない) */ move.b #0x00,(%a0) /* アドレスレジスタ a0 がポイントするメモリに 0 をセット(.b なので1バイト) */ move.l (%a2),%d3 /* アドレスレジスタ a0 がポイントするメモリの中身が d3 に転送される */ move.w %sr,-(%sp) /* システムスタックエリアに sr の中身をプッシュ */ move.w (%sp)+,%sr /* システムスタックエリアから sr の中身をポップ */ move.b (%a0),(%a1) /* メモリからメモリへのデータ転送 */
メモリアドレスの転送
movea.l %a0,%a1 movea.l (%a2),%a3 /* a2 がポイントするメモリの中身(4バイト)が a3 にセットされる */
一括転送
movem.l %d0-%d7/%a0-%a6,-(%sp) /* システムスタックエリアにプッシュ */ movem.l (%sp)+,%d0-%d7/%a0-%a6 /* システムスタックエリアからポップ */
実効アドレスのロード
lea DATA1,%a0 /* ラベル DATA1 が指し示すメモリアドレスを a0 にセット */
加算(15まで)
addq.l #1,%a1 /* 1加算. a1 が1増える */ addq.1 #0x01,(%a2) /* 1加算. アドレスレジスタ a2 がポイントするメモリの中身(4バイト)が1増える */
アドレスレジスタに対しての加算
adda.l %d0,%a0 /* a0 の値が変化する */ adda.l #0xff,%a0
乗算
muls %d0,%d1 muls #0x04,%d1 /* 4倍 */
比較
cmp.l (%a4),%d3 /* アドレスレジスタ a4 がポイントするメモリの中身(4バイト)を,d3 と比較 */
数値との比較
cmpi.b #0,(%a0) /* アドレスレジスタ a0 がポイントするメモリの中身(1バイト)を,数値0と比較 */ cmpi.b #0,%d0 /* データレジスタ d0 の中身のうち下位1バイトを,数値 0 と比較 */
等しい場合にのみ分岐
beq START /* ラベル START が指し示すメモリアドレスへ条件付きで分岐 */
無条件分岐
bra inputQue /* ラベル inputQue が指し示すメモリアドレスへ無条件で分岐 */
dbra %d0,START
サブルーチンへの分岐
jsr initQue /* ラベル initQue が指し示すメモリアドレスについて,サブルーチン呼び出し */
質問などは,電子メールも利用してください.なお,この Web ページの内容 は予告無く変更,削除,追加される.
氏名: 金子邦彦(かねこくにひこ)