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 を付け加えるプログラムを書いてみよう。

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 とします。


Shinji KONO / Thu Jul 12 16:22:39 2001