基礎実験1 UNIX・アセンブラ実習 第2回

2007411 ()

実習内容

68000 実習用の各種のソフトを使ってみます.(1) アセンブラソースプログラムファイルの作成, (2) アセンブラソフト(m68k-as)による言語処理, (3) エミュレータ(m68k-emu)による実行, (4) バグの発見とデバッグという一連の流れを体験してみます.

 

1.     ファイル(add.s)の準備

今日の実習では、アセンブラの方法と、エミュレータの使い方について学びます。

まず、アセンブラソースプログラムファイルを用意します。次の命令をTerminal上で実行しましょう。

 


$ /u/matsuki/jishu2-setup  自分のユーザ名 <Enterキー>

 

ファイルadd.s の中身をemacsで確認しましょう./**/で囲まれた文はコメントを表し,実行時には影響を与えませんので,省略しても構いません.

 

 


      /*    sample program add.s */

.org  0x0000

.dc.l 0x5000

.dc.l start

 

.org  0x0400

start:

      move.w #3,a         /* a番地に3を格納 */

      move.w #4,b         /* b番地に4を格納 */

      move.w a, %d0       /* a番地の値をレジスタd0に格納 */

      add.w b, %d0       /* b番地の値をレジスタd0に加える */

      move.w %d0,c        /* レジスタd0の値をc番地に格納 */ 

      .dc.w 0x4848       /* BSVC break 相当 */

      stop  #0           /* 終了 */

a:    .ds.w 1    

b:    .ds.w 1

c:    .ds.w 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


図1.今日の実習の流れ

2. アセンブラ

アセンブラソースプログラムファイルが準備できたので,次に,アセンブラソフト m68k-as を起動します.Terminal上で次のコマンドを実行しましょう。

 


$ m68k-as add.s Enterキー>

 

アセンブラは、68000というCPUやそのエミュレータで実行可能なファイルに変換する言語処理プログラムです。そして、上記のm68k-asという命令は、引数で指定されたファイルをアセンブルするコマンドです。

うまく,アセンブルが出来ると,ディレクトリ中に次のようなファイル add.LIS, add.abs, add.mapが生成されていることが分かります.

 

      % ls  Enterキー>

      add.LIS      add.abs      add.map      add.s

 

add.LIS :エミュレータで参照できるリスティングファイル

add.abs :エミュレータや実機で実行可能なファイル

add.map:メモリーマップのファイル

add.s     :ソースファイル

 


課題1.次のファイルの中身について報告せよ.報告は簡単でよいが,「実際に中身を見た」ことが分かるような報告であること

              (1) add.LIS         (2) add.abs          (3) add.map

 

3. エミュレータ(BSVC

教育用計算機のCPU68000ではありません。そのため、この計算機のCPUでは実行ファイル(add.abs)を直接動作させることはできません。しかしながら、エミュレータと呼ばれるプログラム(BSVC)を用いることによって、68000CPU上で動作を「再現」することが可能です。このエミュレータは、m68k-emuというコマンドによって起動します。

 


$ m68k-emu & Enterキー>

 

このBSVC(エミュレータ)のウィンドウの左側にはD0D7(データレジスタ)、A0A7A7’A0A6がアドレスレジスタで,A7A7’ はスタックポインタ)、PC(プログラムカウンタ)、SR(ステータスレジスタ)の値が表示されます。

このウィンドウ上部にあるFileメニューから、「Load Program」を実行し、実行したいプログラムを選びます。ここでは、add.absを選択してください。

さらに、「Window」メニュー中の、「Memory Viewer」および「Program Listing」を実行すると、アセンブラプログラムの実行の様子を詳しく観察することが出来ます。それぞれのMemory ViewerProgram Listingのウィンドウを開いて,見やすく配置しておきましょう.準備が出来たら,いよいよプログラムを実行してみましょう.実行は右下の「Run」ボタンを押します.

このプログラムはa番地に3を、b番地に4を格納し、それぞれのアドレスに格納された値をレジスタd0を使って足し合わせ、最終的にc番地にその結果を格納する(「アドレス」や「番地」という言葉については,授業の方で説明があったので思い出して下さい)。今回の実習では,「BSVC: Programming Listing add.LIS」の次の部分に注目してください.

              000424 0000                    15 a: .ds.w 1

              000426 0000            16 b: .ds.w 1

              000428 0000                    17 c: .ds.w 1

この3行には,データabcを確保する擬似命令「a: .ds.w.1」, b: .ds.w. 1」,「c: .ds.w 1」が並んでいるのですが,それらの行の一番左側に表示されいるアドレス「000424」、「000426」、「000428」がデータabcのメモリアドレスを表しています。

Memory Viewerの値で,メモリの中身を観察できるので,「000424」、「000426」、「000428」番地の中身を観察してみましょう.Memory Viewer のメニュー「View」から「From Address…」を選択し,任意のアドレスを入力します.これにより,そのアドレスにあるメモリ内容を確認することが出来ます.ここでは,キリの良い000420からのメモリを見てみましょう(エディットボックスに420と入力する).

Memory Viewerを使うと000424番地に0000425番地に03が格納されています(ds.wという命令が1ワード(2バイト)分のデータ領域を確保する命令であるため2バイト使用する).同様に,0000426番地からの2バイトに00040000428番地からの2バイトに計算結果の0007が格納されているのを確認できるはずです(注: a, b, c のメモリアドレスは000424000426000428に固定されているわけではありません.これらのアドレス値はこの例に限ったもので、異なる場合もあります)

              000424番地: 00

000425番地:  03

000426番地: 00

000427番地:  04

000428番地: 00

000429番地:  07

また、レジスタd0にも0007が格納されていることを確認しましょう(メインウィンドウ左側)。

結果

 

4. ステップ実行

エミュレータでは、命令毎に実行を止めて、段階的にプログラムを実行する方法(ステップ実行)があります。

プログラムの再実行の前に,実行結果をクリアしておくべきです(そうしないと,前の実行結果が残ってしまい,プログラムの振る舞いを観察するときに混乱します).まず、実行した結果が000424番地から000429番地まで残っているのでそれをクリアしましょう。Memory ViewerEditメニューの「Fill Memory Block…」を実行しましょう。Starting Address000424Length6Value0を入れて「OK」をクリックします。

 

 

 

 

 

 

 

 

 

次に、BSVCのメインウィンドウでResetボタンを押します。するとPC(プログラムカウンタ)が00000400になりProgram Listingのウィンドウの水色の部分が000400番地に戻ります。この水色で選択されている行が,次に実行される命令です(PCは次に実行する命令のアドレスを表す).

一回だけSingle Stepボタンを押しましょう。するとTrace(灰色の領域)に実行した命令が現れ、PC00000408になり、Program Listingの水色の部分も移動します。最初の命令は000424番地からの2バイトに0003を書き込むという命令です。Memory Viewerで確認しましょう。

PC00000420になるまで(Trace00000422 BREAKがでるまで)Single Stepを押し、実行の様子を一行ずつ確認しましょう。

 

 

5.エミュレータの終了

エミュレータを終了するにはFileメニューのQuitをクリックしてください。

 

今日の実習はここまでです。

参考Webページ: http://www.db.is.kyushu-u.ac.jp/kaneko/as/index.html