*情報学類 機械語序論の講義ページ(2008年度後半分) [#h8fbe9b6] このページは情報学類2年生科目「機械語序論」の講義ページです.(前半は佐藤三久先生の担当で別ページになります) *期末試験について [#gfe061e3] 3月3日(火)の第2時限(10:10-11:25)に期末試験を行います。会場はいつも第1時限に講義を行っている教室です。持ち込みは自筆資料等の紙資料のみ可とします(パソコン、電卓、PDA等は不可)。 *アップデート情報 [#d5340eec] -2009/02/17: 第10回講義資料をアップロードし、バグ(「レジスタスタック」という用語の統一、SSE命令の例でaddsdとすべきところがmovsdとなっていた)を修正しました。 -2009/02/17: 第8回講義資料のバグ(ビットテスト命令のビット番号指定レジスタが8-bitレジスタでは不可)を修正しました。 -2009/02/04: 第8回講義資料のバグ(浮動小数点演算の例でスタックフレーム上のローカル変数への参照オフセットがプラスだったのをマイナスに修正)を修正したものを添付資料"lecture8.pdf"として置きました。 -2009/02/03: 2月17日は通常講義時間で、「復習」をやることにします。期末試験は通常の期末試験週間に行います。 -2009/02/02: 第8回講義資料を追加しました。 -2009/01/29: 第6回・第7回講義資料を追加しました。 *講義のスケジュール [#l9ce1090] |12/2〜1/13|第1回〜第5回|佐藤先生講義|http://www.hpcs.cs.tsukuba.ac.jp/~msato/lecture-note/kikaigo2008/| |1/20| 第6回&中間試験|「関数呼び出しとスタックフレーム|講義資料6&ref(lecture6.pdf);| |1/27| 第7回|「C言語と機械語のリンク」|講義資料7&ref(lecture7.pdf); &演習課題5&ref(kadai5.pdf);| |2/3| 第8回|「各種データの扱い」|講義資料8&ref(lecture8.pdf); &演習課題6&ref(kadai6.pdf);| |2/10| 第9回|「機械語と命令セットアーキテクチャ」|講義資料9&ref(lecture9.pdf);&演習課題7&ref(kadai7.pdf);| |2/17| 第10回|復習・総合問題演習|講義資料10&ref(lecture10.pdf);| |2/24| 英語検定のため休講||| |3/3| 期末試験(第2時限目)||| *講義・演習のtips [#tba5e8ff] **x86環境のマシンについて [#l9f7a82e] coinsではx86アーキテクチャのマシンは数台しかありません。演習はそのマシンにsshコマンドでリモートログインして行ってください。マシン名は "orchid-calc?" で、最後の "?" には数字の1〜6が入ります。自分の学籍番号の下2桁を6で割って、その余りに1を加えた数を使ってください。例えば、あなたの学籍番号の下2桁が "13" だった場合は orchid-calc2 を使ってください。 **orchid-calc? での文字コード [#rdb4f952] orchid-calc? では文字コードがMacintoshとは異なっており、sshでリモートログインした後のエラーメッセージ等が文字化けします。これを防ぐために、orchid-calc? にリモートログインした後で以下のコマンドを実行して下さい。 % setenv LANG C これは、文字コードを無効(常に英語)にするという意味を持ちます。 **ファイルの終端コードについて [#ga784467] アセンブラのソースプログラムを書いて cc コマンドで機械語にコンパイルしようとすると、以下のメッッセージが出ることがあります。 Warning: end of file not at end of a line; newline inserted これは、「ファイルの最後に改行がないままファイルが終わってしまったので、改行を入れておいたよ」という警告です。ファイルの最後は必ず改行を1つ打っておかなければいけません。ただ、このメッセージはそういう警告を出した後、コンパイラは改行を自動的に入れてくれているので、コンパイル自体はちゃんと終わります。 **16進電卓 [#qc527fbd] 課題を解く上で、多倍長計算の答え合わせが難しい、という声を聞きました。簡単に検算を行う方法として「16進電卓」を教えます。 UNIXのbcというコマンドがあります。これは簡易電卓のプログラムですが、この中で「入力/出力の基数を設定する」という機能があります。以下のようにして実行すると、入力を16進数で与え、結果も16進数で表示する」という電卓を作ることができます。 % bc (何かメッセージが出てくるが、気にしない) obase=16 ibase=16 このように ibase と obase を設定した後で、例えば 1F+35 とか入力すると、結果が 54 のように表示されます。コマンドを終了するには control-D をタイプします。 &color(blue){マメ知識:bcコマンドにおけるibase=は「入力の基数(base number)を変更する」という意味です。これ以降の入力は指定された値を基数とする「進数」で表されます。obaseは同様に出力の基数を変更します。obaseを指定する前にibaseを指定するとおかしなことになるので注意してください。(なぜそうなるのかは自分で考えてみてください)。};