Lecture on Programming I   7/12

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

Lecture on Programming I 7/12

先週の復習
授業について
アセンブラの復習
* Intel IA32 のアセンブラ
簡単な例1
* プログラム
16 進数の表示
* 16進数を表示するプログラム
10 進数の表示
* 10進数を表示するプログラム
問題
メモリのクリア
メモリのコピー
文字列の表示
音声処理
* テスト音声データ
エコーを加える
* Java で echo を付ける
人工の音を作る (Synthesizer)
* Java で 三角波 を作る
問題
malloc を書く
malloc を使って見る
問題
Binary Tree Sort をアセンブラで書く
提出
宿題

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