サンプルプログラム
68000アセンブラの簡単なサンプルプログラムです.
お断り: 68000 クロス開発環境で最も入手が容易で、しかも使いやすい GNU の文法にあわせています
- add.s 足し算
- add64.s 64ビットの足し算を行う
- bcmp.s 2つのメモリブロックの内容が一致するかを調べる
- displace.s ディスプレースメント付きアドレスレジスタ間接のテスト
- exgarray.s メモリブロック間で各要素を交換する
- fillc.s 連続するメモリ領域を0から255までの数値で満たす
- fill.s 連続するメモリ領域を0で満たす
- ix.s 構造体の要素へのアクセス
- lenz.s 00 で終了するデータの長さを求める
- prime.s 素数を求めるプログラム(未テスト)
- prob6.s 「1」であるビットの数え上げ
- prob7.s 階乗を計算するプログラム
- sdata.s メモリ上から特定の値をサーチする
- sub.s 引き算を行うテストプログラム
- sub64.s 64ビットの減算を行う
68000 に詳しい人向けの注意点
九州大学電気情報工学科の教育用計算機(eecs??.st.csce.kyushu-u.ac.jp) で動作するプログラムです. 様々な理由(GNU の gas を使っているなど)から,ここのサンプルプログラ ムは,次のようなスタイルでプログラムを書くことにしている.書き方一般
- レジスタ (データレジスタ,アドレスレジスタ,プログラムカウンタ, スタックポインタ,ステータスレジスタ) には, %d0のように % を付けること.
- 16進数は頭に「0x」を付けること(9以下の16進数なら「0x」は省略).
- プログラムの最後は改行して終わること.
- コメントは次のように,/* */ ではさむこと
/* コメント */
次のようには書かない; コメント
- ラベル名の最後には,区切りのための「:」を付けること(ラベルを使うとき
には「:」を付けない).
A: .ds 10000
命令
- 命令は move.b のように小文字にすべし
- moveq 命令で 128以上の数を使えないので,代わりに move 命令を使う
こと.
「moveq.l #128 %d0」はだめ,代わりに「move.l #128,d0」
- stop 命令は 「stop #0」 のように,#数字を付けるのを忘れないこと
疑似命令
- 擬似命令は .ds.b のように "."で始まる小文字
- .section (.text .bss .data) を積極的に使うべし
.section .text プログラム領域
.section .data 初期値のあるデータ領域
.section .bss 初期値のない (= 0 クリアされる) データ領域
次の例を見てください.「プログラム本体」の部分の先頭には 「.section .text」 を書く.「データ領域確保の部分」には,「.section .data」 か「.section .bss」を書く. 「.section .data」になるのは dc 疑似命 令などで値を指定してデータ領域確保している部分です. 「.section .bss」になるのは ds 疑似命 令などで大きさを指定してデータ領域確保している部分です. スタック領域(これも一種のデータ領域です)を確保するコードも 「. section .bss」になる.
.section .text
.even
/* プログラム本体 */
.section .data
.even
/* データ領域確保(疑似命令dc, ascii なとを使用) */
.section .bss
.even
/* データ領域確保(疑似命令 ds なとを使用) */
「.section .text」, 「.section .data」, 「.section .bss」は,望む順番で何度も繰り返して書くことができる. 間違い(例えば,プログラム本体の部分なのに「.section .data」と書いたな ど)のときは,うまく動作しません.
- 代わりに「.even」を使うように統一すべし.「.even」は,4バイト 境界になるように,データ/プログラムを置くための疑似命令です.
- .section は省略しないこと
- .equ は次のように使う
.equ DATA, 0x10000
- 文字列 "abcde" の「確保」は,疑似命令 dc か ascii か asciz を使っ
て,次のように行う
.dc.b 'a','b','c','d','e',0
次のようには書かない.
.ascii "abcde\0"
.asciz "abcde"
.dc.b 'abcde',0
質問などは,電子メールも利用してください.なお,この Web ページの内容 は予告無く変更,削除,追加される.