Lecture on Programming I 7/12
Menu Menu
先週の復習
i386 のアセンブラ
授業について
この授業は7/25まで。課題の提出は、電子メールで7月一杯までとします。それ以降は受け付けません。試験はありません。宿題あるいは授業のレポートのどちらかを一つも提出してない人に単位を出すことはありません。
アセンブラの復習
Intel IA32 のアセンブラ簡単な例1
入力から出力をコピーする簡単なプログラム
.text # プログラム開始 .globl main # main を他から呼び出せるようにする宣言 main: # ここが main というアドレスだというラベル pushl %ebp # おまじない movl %esp,%ebp # おまじない .L2: # loop 用のラベル call getchar # 入力を読み込む cmpl $-1,%eax # -1 だったら終わり je .L3 # 終わりだったら .L3 にjump pushl %eax # 出力をスタックにつむ call putchar # 出力ルーチンを呼び出す addl $4,%esp # スタックを元に戻す jmp .L2 # .L2 に飛ぶ .L3: leave # おまじない ret # 帰る
16 進数の表示
16進数を表示するプログラム (先行する0を消すには、どうすれば良いか?)
10 進数の表示
10進数を表示するプログラム %esi を使って、一度、バッファにいれて、逆順に表示している。
問題
メモリのクリア
特定のメモリ領域を0 で埋めるプログラムを作れ1-100までの和を計算する
メモリのコピー
特定のメモリ領域をコピーするプログラムを作る
memcpy
文字列の表示
文字列は、
ascii code の列で、\n (= ascii で10) で終了するまたは、
ascii code の列で、0で終了するという形式で扱うことが多い。
文字列を表示するプログラムを作ってみよう。
.data 文で文字列を、前もって作っておくことができる。
1-100までの積を計算するプログラムをアセンブラで作れ
文字列を1行のうちで逆順に表示するプログラムをアセンブラで作れ
入力された16進数を10進数に変換するプログラムを作れ
% ./a.out 10 20 f ^d 16 32 15のようになる。
音声処理
vplay コマンドで音を出してみよう。テスト音声データ WAV フォーマット。sox コマンド。 って何?
エコーを加える
Java で、echo を付け加えるプログラムを書いてみよう。人工の音を作る (Synthesizer)
Java で人工の音を作ってみよう。
矩形波 三角波 サイン波Java で 三角波 を作る
問題
矩形波、三角波、サイン波を生成するプログラムをアセンブラ書いてみよう。echo を付け加えるプログラムをアセンブラで書いてみよ。
malloc を書く
malloc とは? メモリを徐々にとっていくプログラム。最初の領域はどのように確保する?
.data/.comm で取っておく sbrk system call で取りに行く
malloc を使って見る
strcpy は、文字列をmalloc で確保した新しい領域にcopyするプログラムである。strcpy をアセンブラで記述してみよう。
問題
文字列を辞書式順序で比較するルーチンを書け。比較の結果、より小さい -1 等しい 0 より大きい 1を%eax に返すこととする。
入力を行単位で逆順に表示するプログラムをアセンブラで作れ(入力があふれた時にはどうすれば良いか?)
Binary Tree Sort をアセンブラで書く
node を作るにはどうすれば良いか?(時間を測るにはどうすれば良いか?)
提出
以上の問題を
Subject: Practice on Programming I 7/12というサブジェクトで、18:30 までに、できるだけ、kono@ie.u-ryukyu.ac.jp までメールを出すこと。
宿題
残りは、
Subject: Report on Programming I 7/12というサブジェクトで、kono@ie.u-ryukyu.ac.jp までメールを出すこと。
(*) がついている問題は option とします。