2012年度 計算機システム演習 第4回 2012.05.07 白幡 晃一.

Slides:



Advertisements
Similar presentations
1 B10 CPU を作る 1 日目 解説 TA 高田正法
Advertisements

5.制御構造と配列 場合分け( If Then Else , Select Case ) 繰返し( Do While ) 繰返しその2( For Next )
2006/10/26 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
コンパイラ 第13回 最適化 38号館4階N-411 内線5459
実習用サーバの利用開始手順 (Windowsの場合) TeraTerm Proをインストール 公開鍵をメールで送付
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
4章 制御の流れ-3.
2012年度 計算機システム演習 第3回 白幡 晃一.
情報システム基盤学基礎1 コンピュータアーキテクチャ編 第2回 命令
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第2週目
コンパイラ 第9回 コード生成 ― スタックマシン ―
C言語 配列 2016年 吉田研究室.
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
App. A アセンブラ、リンカ、 SPIMシミュレータ
2006年度 計算機システム演習 第4回 2005年5月19日.
ソフトウェアとのインターフェース.
計算機システムⅡ 命令セットアーキテクチャ
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
コンパイラ演習 第 4 回 (2011/10/27) 中村 晃一 野瀬 貴史 前田 俊行 秋山 茂樹 池尻 拓朗 鈴木 友博 渡邊 裕貴
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
プログラムはなぜ動くのか.
計算機基礎Ⅱ,Ⅲ (指導書 pp. 76~94) 改訂:佐竹 純二 (作成:岡本 吉央).
第3回目 2006/05/01.
公開鍵認証方式の実習 TeraTermの場合
型付きアセンブリ言語を用いた安全なカーネル拡張
2012年度 計算機システム演習 第6回 福田 圭祐.
プログラミング言語入門 手続き型言語としてのJava
勉強会その1    2016/4/ 分35秒 コンピュータアーキテクチャとは? コンピュータの構成 命令の実行.
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
条件分岐と繰り返し.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
プログラミング演習I 2003年5月7日(第4回) 木村巌.
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
第7回 プログラミングⅡ 第7回
TA 高田正法 B10 CPUを作る 3日目 SPIMの改造 TA 高田正法
情報基礎Ⅱ (第11回) 月曜4限 担当:北川 晃.
公開鍵認証方式の実習 MacOS Xの場合.
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
情報とコンピュータ 静岡大学工学部 安藤和敏
プログラムの基本構造と 構造化チャート(PAD)
情報工学科 3年生対象 専門科目 システムプログラミング 第4回 シェルスクリプト 情報工学科 篠埜 功.
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
コンピュータアーキテクチャ 第 2 回.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
コンピュータアーキテクチャ 第 3 回.
コンピュータアーキテクチャ 第 2 回.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1.
コンピュータアーキテクチャ 第 5 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
アルゴリズムとデータ構造1 2009年6月15日
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
ネットワーク・プログラミング Cプログラミングの基礎.
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
コンピュータアーキテクチャ 第 5 回.
プログラムの開発手順 1.プログラム設計(仕様の決定) 2.コーディング(ソースファイルの作成) 3.アセンブル(オブジェクトファイル
コンパイラ 2012年10月11日
Inline 展開のアルゴリズム 長谷川啓
アルゴリズムとデータ構造 2010年6月17日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
情報システム基盤学基礎1 コンピュータアーキテクチャ編
場合分け(If Then Else,Select Case) 繰返し(Do While) 繰返しその2(For Next)
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
情報処理Ⅱ 2006年10月20日(金).
6.3 インタプリタ (1)インタプリタ(interpreter)とは
6.5 最終コード生成 (1)コードの形式 ①絶対2進コード(AB : absolute binary) 命令後のオペランドが絶対番地指定。
Presentation transcript:

2012年度 計算機システム演習 第4回 2012.05.07 白幡 晃一

第2回課題の補足 TSUBAMEへのログイン TSUBAMEは学内からのログインはパスワードで可能 公開鍵,秘密鍵の生成 しかし、演習室ではパスワードでログインできない設定 公開鍵認証でログイン 公開鍵,秘密鍵の生成 ターミナルを開く $ ssh-keygen Enter file in which to save the key (/Users/shirahata/.ssh/id_rsa): Return Enter passphrase (empty for no passphrase): 公開鍵のパスワードを入力 Enter same passphrase again: もう一度同じパスワードを入力 「id_rsa」が秘密鍵、「id_rsa.pub」が公開鍵になる。 TSUBAMEへの公開鍵の登録 東工大ポータル -> TSUBAME2.0 利用ポータル -> SSH公開鍵アップロード 公開鍵を選択しアップロード(生成した公開鍵 id_rsa.pub をアップロード) 以上の操作により演習室からTSUBAMEへログインできるようになる

今日の内容 高水準言語 (C言語) アセンブリ言語 (MIPS) 機械語 (MIPS) 計算結果 アセンブラ命令 2 配列の操作方法 コンパイラ アセンブリ言語 (MIPS) アセンブラ 機械語 (MIPS) 計算結果 今日の内容 アセンブラ命令 2 配列の操作方法

加減算 add $A, $B, $C addi $A, $B, 数値 sub $A, $B, $C subiは無い 即値可算(add immediate) レジスタが示す値に定数を加算 $A <- $B + 数値 sub $A, $B, $C $A <- $B - $C subiは無い addiで数値に負の値を指定 add $t0, $t1, $t2 addi $t0, $t1, 4 sub $t0, $t1, $t2 addi $t0, $t1, -16

レジスタ CPU内部の記憶素子 MIPSでは32本 $a0 ~ $a3 サブルーチンの引数を入れる $v0 ~ $v1 レジスタ領域 $a0 ~ $a3 サブルーチンの引数を入れる $v0 ~ $v1 サブルーチンの返り値が入る $t0 ~ $t9 一時変数(自由に使える) $ra (メイン)ルーチンから戻るアドレスを保持 $zero 定数値0

よく使う命令 分岐命令 (ジャンプ命令) 条件分岐命令 比較命令 j, jr beq, bne, blt, ble, bgt, bge slt, slti

分岐命令(1/2) j label j next : next: ラベルの命令へジャンプ m3.s .data J: .asciiz "Jump\n" NJ: .asciiz "Not Jump\n" .text main: j jump li $v0, 4 la $a0, NJ syscall jr $ra jump: la $a0, J j label ラベルの命令へジャンプ j next : next: ※ labelの有無に関係なく、jump命令が呼び出されるまで、次の命令が実行され続ける Jump

分岐命令(2/2) jr $A la $t0, next jr $t0 : next: レジスタ $A の値の指す アドレスにジャンプ m4.s .data J: .asciiz "Jump\n" NJ: .asciiz "Not Jump\n" .text main: la $t0, jump jr $t0 li $v0, 4 la $a0, NJ syscall jr $ra jump: la $a0, J jr $A レジスタ $A の値の指す アドレスにジャンプ 例: jr $ra la $t0, next jr $t0 : next: Jump

条件分岐命令 beq $A, $B, label bne $A, $B, label beq $t0, $t1, Label : branch on equal $A == $B ならラベルにジャンプ bne $A, $B, label branch on not equal $A != $B ならラベルにジャンプ beq $t0, $t1, Label : Label:

if 文の実現 if (x != 0) y = 1; else y = 2; bne $t0, $zero, then # if (x!=0) goto then li $t1, 2 # y=2 j end then: li $t1, 1 # y=1 end: ($t0にx, $t1にyが該当する)

while 文の実現 while (true) { if (x==y) break; while (x != y) { y++; y++; } while (x != y) { y++; } while: beq $t0, $t1, end # if (x==y) goto end addi $t1, $t1, 1 # y++ j while end: ($t0にx, $t1にyが該当する)

比較命令 slt $A, $B, $C slti $A, $B, 数値 set less than $B < $C なら $A = 1; そうでなければ $A = 0 slti $A, $B, 数値 set less than immediate $B < 数値 なら $A = 1; そうでなければ $A = 0

その他の条件分岐命令 blt $A, $B, label $A < $B なら分岐 ble $A, $B, label $A <= $B なら分岐 bgt $A, $B, label $A > $B なら分岐 bge $A, $B, label $A >= $B なら分岐 (less than, less than equal, greater than, greater than equal) これらは疑似命令 slt, beq, bne の組み合わせで実現できる (⇒課題) 「move $A, $B」も擬似命令 add A, B, $zero その他の命令 http://www.cs.wisc.edu/~larus/HP_AppA.pdf の A.10 (A-51) 以降にその他の命令が載ってい る

配列 ワードの配列 .data A: .word 1 2 3 .word でワード (4 byte)の数値を 定義できる MIPSでは、1 ワード(語) = 4バイト = 32ビット 1バイト = 8ビット 要素 A[i] にはアドレス A+i*4 が対応 ワード単位でデータは格納され るが、アドレッシングはバイト 単位で表現 .data A: .word 1 2 3 アドレス メモリ 配列表現 0x00000000 A+0 1 A[0] A+4 2 A[1] A+8 3 A[2] 0xffffffff

メモリアクセス命令 lw $A, X($B) sw $A, X($B) $A = メモリ[X + $B] 例:lw $t0, 8($s1) $A, $B:レジスタ、 X:定数 (ラベルor数字) メモリ上のアドレス「X+$B」から始まる 1ワード(4バイト)のデータを レジスタ$Aに転送する 例:lw $t0, 8($s1) $s1が示すアドレスから2ワード 先のデータ(1ワード分)を$t0に読込む sw $A, X($B) メモリ[X+$B] = $A レジスタ$Aの値 (1ワード)を メモリ上のアドレス「X+$B」に転送する 例:sw $t0, 8($s1) $s1が示すアドレスから2ワード先のデータ(1ワード分)に$t0の値を書き込む $s1 1 word 1 byte $s1 +8

配列の操作 (例) 配列Aの値を表示する プログラム m5.s .data A: .word 1 2 3 .text main: la $t0, A li $v0, 1 lw $a0, 0($t0) syscall lw $a0, 4($t0) li $t0, 8 lw $a0, A($t0) jr $ra 配列Aの値を表示する プログラム どちらでもよい 123

課題

課題1:bltの実装 sltを用いてbltを実装せよ 「blt $s1, $s2, label」を対象に、一時レジスタとして$t0を使うこ と bltを実装したコード断片をレポートに記述し、その解説をする こと 注意点 短いコードで記述されたもの程よい。

課題2: 2つの配列の要素の和 これら2つの配列の i 番目と 3-i 番目の要素どうしを足し 合わせ、表示せよ .wordとして、2つの配列を定義 A = { 1, 2, 3, 4 } B = { 5, 6, 7, 8 } 注意点 A[0] + B[3], A[1] + B[2], A[2] + B[1], A[3] + B[0] ループ処理で実装すること syscallを使ってコンソールに表示すること 9999

課題3:最大値の探索 配列の中から最大値を出力するコードをかけ 以下のような配列を定義 A = { 2, 7, 8, 1, 3, 9 } 結果をsyscallを使ってコンソールに出力すること 以下のような配列を定義 A = { 2, 7, 8, 1, 3, 9 }

補足 課題2 課題3 .data A: .word 1 2 3 4 B: .word 5 6 7 8 .text main: #和を表示 #最大値を出力

課題提出 〆切: 5/21(月) 23:59 提出物:以下のファイルをアーカイブ, 圧縮したもの ドキュメント(pdf,plain txt,wordなんでも可) 以下の内容を含めること 課題1の解答 課題2,3の実行結果 もしあれば感想、質問等 プログラムソース 課題2,3 (適宜コメントを記述すること)