講義に登場する命令と疑似命令のまとめ

擬似命令 (directive)

.org

基準となるメモリアドレスの設定

.org    0x0000   /* 68000 のベクタテーブルの先頭に設定 */
.org    0x400    /* 0x400 に設定 */

dc

データを実メモリ内に配置

dc.l    0x3000   /* 0x00003000を格納 (.l は4バイト) */
dc.l    START    /* ラベル START が指し示すメモリアドレスの値そのものをメモリ中に格納 */
dc.b    'a','b','c',0 /* カンマで区切られて4つ並んでいるので,4バイト分格納される */

ds

データエリアを指定されたサイズだけ確保

ds.b    500     /* 500 バイト確保 */

.equ

シンボルの定義(ラベルとシンボルは別のものです.ラベルは、プログラムやデータが置いてある「メモリアドレス」と関連付けられた文字列。シンボルは、.equ に記述された値に関連付けられた文字列) 

.equ    BUFFER_SIZE,256    /* シンボル BUFFER_SIZE の値を 256 と定義 */    

命令 (instruction)

move

データ転送

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

メモリアドレスの転送

movea.l %a0,%a1
movea.l    (%a2),%a3        /* a2 がポイントするメモリの中身(4バイト)が a3 にセットされる */

movem

一括転送

movem.l    %d0-%d7/%a0-%a6,-(%sp)     /* システムスタックエリアにプッシュ */
movem.l    (%sp)+,%d0-%d7/%a0-%a6    /* システムスタックエリアからポップ */

lea

実効アドレスのロード

lea DATA1,%a0    /* ラベル DATA1 が指し示すメモリアドレスを a0 にセット */

addq

加算(15まで)

addq.l #1,%a1    /* 1加算. a1 が1増える */
addq.1 #0x01,(%a2)    /* 1加算. アドレスレジスタ a2 がポイントするメモリの中身(4バイト)が1増える */

adda

アドレスレジスタに対しての加算

adda.l %d0,%a0    /* a0 の値が変化する */
adda.l #0xff,%a0

muls

乗算

muls    %d0,%d1
muls    #0x04,%d1    /* 4倍 */

cmp

比較

cmp.l    (%a4),%d3    /* アドレスレジスタ a4 がポイントするメモリの中身(4バイト)を,d3 と比較 */

cmpi

数値との比較

cmpi.b #0,(%a0)    /* アドレスレジスタ a0 がポイントするメモリの中身(1バイト)を,数値0と比較 */
cmpi.b #0,%d0    /* データレジスタ d0 の中身のうち下位1バイトを,数値 0 と比較 */

beq

等しい場合にのみ分岐

beq START    /* ラベル START が指し示すメモリアドレスへ条件付きで分岐 */

bra

無条件分岐

bra inputQue    /* ラベル inputQue が指し示すメモリアドレスへ無条件で分岐 */

dbra

dbra %d0,START

jsr

サブルーチンへの分岐

jsr initQue     /* ラベル initQue が指し示すメモリアドレスについて,サブルーチン呼び出し */

質問などは,電子メールも利用してください.なお,この Web ページの内容 は予告無く変更,削除,追加される.

氏名: 金子邦彦(かねこくにひこ)