Lecture on Programming I 7/19

Menu Menu


先週の復習

    i386 のアセンブラ


授業について

課題の提出は、電子メールで7月一杯までとします。それ以降は受け付けません。試験はありません。宿題あるいは授業のレポートのどちらかを一つも提出してない人に単位を出すことはありません。

来週は、自習とします。


Typing の練習

今日も typing の練習をすること (20分)

結果をscript でメールすること。

整形した結果を、

    Subject: Report on Programming I   7/19-typist

というサブジェクトで、kono@ie.u-ryukyu.ac.jp までメールを出すこと。

    % rsh pw006 "Mail -s 'Report on Programming I   7/19-typist' kono@ie.u-ryukyu.ac.jp" < typescript


アンケート

アンケート に答えて、印刷して、僕のところに持ってくること


Assembler に関する復習

gdb を使いやすくする。info を使って gdb のコマンドを調べよう。

アセンブラの実行を調べるgdbの初期化ファイル をソースのディレクトリに置いて、ni, si を実行して見よう。


メモリの指定された領域を hex dump する

何をするサブルーチンなのかをコメントに書こう

どのようなフォーマットで表示するか?

    04002000 00 00 00 00 00 00 00 00 00 00  ......a.b...
    アドレス   データ                       ASCII code 

途中まで作ったもの


文字列の内部構造

上の表示ルーチンを使って、文字列が格納された部分を表示してみる
	.data
   string_a:
	.string "test\n"

として、string_a の部分を hex dump する。


文字列の表示

文字列を表示する putstr を作れ


文字列のコピー

	.data

string_b:
	.byte 0x100

で、場所を確保する。string_a から string_b へコピーする。

上の表示ルーチンを使って、文字列のコピーが行なうルーチンが正しく実行されているかどうかを調べる


三角波

矩形波、三角波、サイン波をメモリ上に生成するプログラムをアセンブラ書いてみよう。

生成した値を10進数で書き出すルーチンを付けたし、実際に、正しい波形になっているかどうかを、gnuplot で調べよ。

一行に、

    0 0
    1 1
    2 2

のように生成してく。行末に \n をいれるのを忘れないようにしよう。


malloc を書く

malloc とは? メモリを徐々にとっていくプログラム。

最初の領域はどのように確保する?

    .data/.comm で取っておく
    sbrk system call で取りに行く


malloc を使って見る

strcpy は、文字列をmalloc で確保した新しい領域にcopyするプログラムである。strcpy をアセンブラで記述してみよう。


文字列の比較

文字列を辞書式順序で比較するルーチン strcmp を書け。比較の結果、
    より小さい -1
    等しい      0
    より大きい  1

を%eax に返すこととする。

入力を行単位で逆順に表示するプログラムをアセンブラで作れ(入力があふれた時にはどうすれば良いか?)


Binary Tree Sort をアセンブラで書く

node を作るには malloc を使う。


node をmalloc によって一つ作るサブルーチンを作れ

%eax,%ebx,%ecx に node.left, node.right, node.value をそれぞれいれておく


node をinsert するサブルーチンを作成する

strcmp を呼び出して、left, right のどちらに insert するかを決める

left, right が null (=0) だったら、新しいnode を作る


node をたどりながら表示するルーチンを作成する


提出

以上の問題を

  Subject: Practice on Programming I   7/19

というサブジェクトで、18:30 までに、できるだけ、kono@ie.u-ryukyu.ac.jp までメールを出すこと。


宿題

残りは、

  Subject: Report on Programming I   7/19

というサブジェクトで、kono@ie.u-ryukyu.ac.jp までメールを出すこと。

(*) がついている問題は option とします。


Shinji KONO / Thu Jul 19 16:45:32 2001