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 を作れ
文字列のコピー
.datastring_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 とします。