68000アセンブラプログラミング(授業資料)

科目の目的

本科目は、68000プロセッサのアセンブラプログラミングを通じて、コンピュータの動作原理を実践的に理解することを目的とする。UNIX環境での開発手法、CPU・メモリ・レジスタの連携、プログラム制御フローの仕組みを体系的に習得する。

カリキュラム構成

本科目は演習(全7回)と説明資料(全6回)で構成される。演習では手を動かしながら技術を習得し、説明資料で理論的背景を学ぶ構成である。

演習パート(全7回)

テーマ 習得スキル
1 UNIX基本操作 ログイン/ログアウト、emacsエディタ、ファイル管理コマンド(ls, cat, mv, rm)
2 開発環境の習得 ソースファイル作成、m68k-asによるアセンブル、m68k-emuによる実行
3 デバッグ基礎 エラーメッセージの読み方、emacs編集機能(カット&ペースト、検索、アンドゥ)
4 制御フロー理解 equ疑似命令、分岐命令、プログラムカウンタ、ステータスレジスタ
5 デバッグ応用 ブレークポイント設定、CCR(コンディションコードレジスタ)、bge命令
6 サブルーチン jsr/rts命令、スタック操作、movem.l命令によるレジスタ退避・復帰
7 データ構造実装 リングバッファ型キュー、ポインタ管理、循環バッファ処理

説明資料パート(全6回)

テーマ 学習内容
1 アセンブラ言語基礎 メモリアクセス、条件分岐、繰り返し処理の基本概念
2 CPU・メモリ連携 レジスタの役割、アドレスバス・データバス、R/W信号制御
3 プログラムカウンタ 命令フェッチ・デコード・実行サイクル、実行フロー制御
4 条件分岐と繰り返し CCRに基づく制御、比較命令と分岐命令の組み合わせ
5 関数呼び出し リターンアドレス、スタック管理、パラメータ渡し、戻り値
6 割り込み処理 スーパーバイザモード、例外処理、割り込みレベル、状態保存・復帰

学習の流れ

本科目は段階的にスキルを積み上げる構成である。

Phase 1(第1〜2回):開発環境の構築とツールの基本操作を習得する。

Phase 2(第3〜5回):プログラムの制御構造とデバッグ技法を学ぶ。CCRと分岐命令の関係性を理解することが重要である。

Phase 3(第6〜7回):サブルーチンとデータ構造の実装を通じて、実践的なプログラミング能力を養成する。

使用ツール

本科目で使用する主要ツールは以下の通りである。

前提知識

プログラミングの基礎知識を有することを前提とする。C言語のプログラム例(branch.c, loop.c, add.c等)が参考資料として提供されており、高級言語とアセンブラの対応関係を理解する助けとなる。

到達目標

本科目修了時に以下の能力を習得することを目標とする。

  1. UNIX環境での開発ワークフローを実践できる
  2. 68000アセンブラでプログラムを作成・デバッグできる
  3. CPU、メモリ、レジスタの動作原理を説明できる
  4. サブルーチンとスタックの仕組みを理解し実装できる
  5. 基本的なデータ構造(キュー)をアセンブラで実装できる

【目次】

  1. 演習資料
  2. 説明資料
  3. レポート
  4. その他
  5. 68000 開発環境を作る
  6. 関連する外部ページ

教材の利用条件: クリエイティブコモンズ 表示-非営利-継承 4.0 国際ライセンス(CC BY-NC-SA 4.0)に基づき、著作者表示・非営利目的・同一ライセンスでの再配布を条件として自由に利用可能である。

演習資料

  1. 第1回演習資料 [PDF], [MS-Word]

    【概要】 UNIXシステムにおけるログイン・ログアウト、ウィンドウ操作、emacsエディタの基本操作、ファイル管理コマンド(ls、cat、mv、rm)の基本を学ぶ演習内容である。特にemacsでは文字入力、カーソル移動、ファイル保存、日本語入力などの基本機能を習得し、UNIXの基本的な操作スキルを身につける。

  2. 第2回演習資料 [PDF], [MS-Word]

    【概要】 68000プロセッサのアセンブラプログラミングにおいて、ソースファイル作成からm68k-asによるアセンブル、m68k-emuエミュレータでの実行までの開発フローを学ぶ。メモリ操作やレジスタの働きをステップ実行で確認し、プログラムの動作原理を実践的に理解する演習である。

  3. 第3回演習資料 [PDF], [MS-Word]

    【概要】 アセンブラプログラミングにおけるデバッグスキルを習得する演習である。m68k-asのエラーメッセージを手がかりにプログラムの誤りを発見・修正する過程を通じて問題解決能力を養い、同時にemacsエディタの削除、カット&ペースト、検索、アンドゥなどの実用的な編集機能の活用方法を学ぶ。

  4. 第4回演習資料 [PDF] [MS-Word]

    【概要】 68000CPUのアセンブラプログラミングにおける制御フローと命令実行を理解するための演習である。m68k-emuエミュレータを使用してレジスタ・メモリの値の変化を観察し、擬似命令equによるシンボル定義、分岐命令の動作、プログラムカウンタとステータスレジスタの関係性を実践的に学ぶ。ステップ実行による詳細な動作追跡を通じてCPUの基本的な仕組みを習得する。

  5. 第5回演習資料 [PDF], [MS-Word]

    【概要】 68000アセンブラプログラミングにおけるデバッグ技法を実践的に学ぶ演習である。階乗計算プログラムを例に、ブレークポイントを設定してレジスタやCCR(コンディションコードレジスタ)の値の変化を観察し、条件分岐命令の動作原理を理解する。特にbge命令とCCRの関係性を把握し、効率的なプログラム作成とデバッグ手法を習得する。

  6. 第6回演習資料 [PDF], [MS-Word]

    【概要】 68000アセンブラのサブルーチン機能を実践的に学ぶ演習である。jsr命令による呼び出しとrts命令による復帰時のスタック操作を理解し、movem.l命令を使用した複数レジスタの退避と復帰の仕組みを習得する。最小値探索プログラムを例に、プログラムカウンタとスタックポインタの変化を観察しながら、サブルーチンの動作原理を体系的に学ぶ。

  7. 第7回演習資料 [PDF], [MS-Word]

    【概要】 68000アセンブラでリングバッファ型キューを実装する演習である。256バイトのキューに対して、PUT_PTRとGET_PTRによる書き込み/読み出し位置の管理、PUT_FLGとGET_FLGによる状態管理、BF_START/BF_ENDによる循環バッファ処理を実装し、データ構造の実践的な実装方法を学ぶ。

説明資料

  1. 参考資料:68000 の主な命令と疑似命令のまとめ
  2. 第1回説明資料 [PDF],   [パワーポイント], [HTML]

    【概要】68000アセンブラ言語では、メモリへのデータアクセス、条件分岐、繰り返し処理が基本操作である。メモリは1バイト単位でアドレス指定され、データの読み出しと書き込みが可能である。条件分岐と繰り返し処理は比較命令とジャンプ命令を組み合わせて実現される。

    プログラム例   branch.c,   branch.s,   loop.c

  3. 第2回説明資料 [PDF],   [パワーポイント], [HTML]

    【概要】CPUとメモリの連携において、メモリから読み出されたデータは一時的にCPU内のレジスタに格納され、演算処理後に再びメモリに書き込まれる。この過程でアドレスバスとデータバスを介してデータ転送が行われ、R/W信号により読み書きが制御される。

    演習問題   [PDF],   [MS-Word]

    プログラム例   add.c,   add.s

  4. 第3回説明資料 [PDF],   [パワーポイント], [HTML]

    【概要】プログラムカウンタは、プログラム命令をメモリから読み出すために使用され、命令フェッチ・デコード・実行の各サイクルで適切に更新される。命令デコード時にプログラムカウンタは次の命令をポイントするように進み、分岐命令では新しい値に書き換えられることで、プログラムの実行フローを制御している。

    演習問題   [PDF],   [MS-Word]

    プログラム例   add.c,   add.s,   sum.s

  5. 第4回説明資料 [PDF],   [パワーポイント], [HTML]

    【概要】68000アセンブラにおける条件分岐と繰り返しの制御は、コンディションコードレジスタの値に基づいて実行される。プログラムカウンタの値を変更することで分岐を実現し、比較命令と分岐命令の組み合わせによって条件分岐と繰り返し処理を実現する仕組みである。

    演習問題   [PDF],   [MS-Word]

    プログラム例   branch.c,   branch.s,   loop.c,   array.c,   array2.s,   str.c,   str2.s

  6. 第5回説明資料 [PDF],   [パワーポイント], [HTML]

    【概要】68000アセンブラ言語における関数呼び出しでは、リターンアドレスのプッシュ、動的メモリ管理、パラメータ渡し、戻り値返却が厳密に制御される。システムスタックを用いて関数実行に必要な処理を実現し、レジスタとメモリの連携によってサブルーチン機能を実装している。

    演習問題   [PDF],   [MS-Word]

    プログラム例   func1.c

  7. 第6回説明資料 [PDF],   [パワーポイント], [HTML]

    【概要】CPUの割り込みでは、現在の処理を一時中断し、スーパーバイザモードへの自動切り替えと例外処理の呼び出しを行う。処理の中断時には状態を保存し、例外処理完了後に元の状態に復帰する。割り込みレベルによる優先制御と割り込み禁止機能を備えている。

    演習問題   [PDF],   [MS-Word]

レポート

  1. レポート1
  2. レポート2

その他

68000 開発環境を作る

関連する外部ページ