計算機アーキテクチャ今日の授業の目的...
TRANSCRIPT
![Page 1: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/1.jpg)
計算機アーキテクチャ
2014年 7月14日
電気情報工学科 田島 孝治
第14回 計算機アーキテクチャ 1
第14回 サブルーチンの実現/PCSpimの使い方
![Page 2: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/2.jpg)
授業スケジュール(前期)
※5/5はこどもの日、7/21は海の日のため休講
※授業変更:6/23 1時限→6/20 3時限
2
第14回 計算機アーキテクチャ
回 日付 タイトル
1 4/7 コンピュータ技術の歴史と コンピュータアーキテクチャ
2 4/14 ノイマン型コンピュータ
3 4/21 コンピュータのハードウェア
4 4/28 数と文字の表現
5 5/12 固定小数点数と浮動小数点表現
6 5/19 計算アーキテクチャ(ARU)
7 5/26 計算装置のハードウェア実装
8 6/2 文字コード
9 6/11 中間試験(9:00-9:50)
回 日付 タイトル
10 6/16 主記憶装置とレジスタ
11 6/20 命令実行の流れ
12 6/30 命令形式とアセンブリ言語
13 7/7 命令セットとアドレッシング
14 7/14 サブルーチンの実現
15 7/28 PCSpimによるアセンブリ言語プログラム
8/4 期末試験(日程はほぼ確定)
16 9/29? フォローアップ(日程は仮)
![Page 3: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/3.jpg)
今日の授業の目的
プログラムの実行順を制御する命令の使い方を学ぶ
R形式、I形式につづく最後の形式であるA形式の バイナリの表現をできるようにする
PCSpimの基本的な使い方(プログラムの記述と実行)について学ぶ
第14回 計算機アーキテクチャ
3
分岐命令について理解する J形式の命令ついて理解を深める
PCSpimによるプログラムの基礎を学ぶ
![Page 4: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/4.jpg)
条件分岐命令
ジャンプ命令
メモリ上の特定の番地にプログラムの処理を移す
無条件でジャンプするための命令
リンク付きジャンプ命令
命令実行後、元の位置に戻れるようにジャンプする
関数呼び出しに使う
命令の形式:J形式
命令長はどの形式でも変わらない
第14回 計算機アーキテクチャ
4
op(6bit) アドレス(26bit)
分岐操作 (条件分岐、ジャンプ等)
アドレス
![Page 5: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/5.jpg)
具体的な命令の例(J形式)
J形式の命令
第14回 計算機アーキテクチャ
5
演算命令 命令コード 使用例 意味
ジャンプ j j label 指定した場所へ処理を移す
リンク付き ジャンプ jal jal label
現在の命令の次の命令番地を$raに書き込んでから指定した場所(label)へ処理を移す
J形式の命令は実はこれしかありません
jal命令はjr命令(レジスタを指定してジャンプ)と 組み合わせて使います
![Page 6: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/6.jpg)
ビット列の作り方(J形式)
第14回 計算機アーキテクチャ
6
targetはどんなバイナリデータになるの?
![Page 7: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/7.jpg)
J形式命令のアドレッシング
(疑似)直接アドレッシング
命令番地を直接記入する
なぜ疑似?
J形式のアドレス記入可能ビット数:26 bit
システムのメモリアドレスビット数:32 bit
6ビット分は指定できない!
6ビットは現在のPCの値等を使います
第14回 計算機アーキテクチャ
7
![Page 8: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/8.jpg)
具体的な例 8
メモリ番地 メモリ内容 意味
0x0040002c 0x08100010 j end
・・・・ ・・・ ・・・
0x00400040 0x00400040 jr $ra end:
0 8 1 0 0 0 1 0
0000 1000 0001 0000 0000 0000 0001 0000 op target
ジャンプ先のアドレス
target
0 0 4 0 0 0 4 0
0000 1000 0001 0000 0000 0000 0100 0000
PCの上位4bit 必ず0
![Page 9: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/9.jpg)
例題
次のjal命令をビット列に直せ
第14回 計算機アーキテクチャ
9
メモリ番地 意味
0x0040002c jal printf
・・・・ ・・・
0x0040003c ・・・・ printf:
op target
![Page 10: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/10.jpg)
サブルーチンの作り方
サブルーチンとすべき場所にラベルを付ける
jal命令をつかってサブルーチンを呼び出す
jr $ra 命令を使って元にもどる
第14回 計算機アーキテクチャ
10
main: li $s1,2 li $s2,5 add $s0,$s1,$s2 jal func # call sub fuction j end func: li $s0,5 li $t0,2 add $t1,$s0,$t0 jr $ra # return
![Page 11: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/11.jpg)
サブルーチンコールの注意点
書き換えてはいけないレジスタがある
レジスタを一度上書きすると元にもとに戻せない
$raを書き換えると呼び出し元に戻れない
MIPSのルールで保存すべきレジスタがある
第14回 計算機アーキテクチャ
11
メモリ上に一部のレジスタの値を退避
MIPSのルールで決まった保護すべきレジスタ
$ra
どうやって値を守る?
![Page 12: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/12.jpg)
値の退避と復元方法
スタックポインタを使うと簡単
第14回 計算機アーキテクチャ
12
#Push addi $sp, $sp, -8 # Decrement stack pointer by 8 sw $ra, 0($sp) # Save $ra to stack sw $s0, 4($sp) #Call sub function jal func #Pop lw $s0, 4($sp) lw $ra, 0($sp) addi $sp, $sp, 8 # Increment stack pointer by 8
![Page 13: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/13.jpg)
PC Spimの使い方
第14回 計算機アーキテクチャ 13
![Page 14: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/14.jpg)
簡単なプログラムを実行してみよう
PCSpimの起動
配布したポータブル版のpcspim.exeを実行
初回は設定をするか聞かれる
YESを選択
設定画面
基本的にはそのままでOK
Exceptionを指定
Browse(日本語の場合は「参照」)ボタンを押してから、exceptions.sファイルを選択する
あとはプログラムソースを開くだけ 第14回 計算機アーキテクチャ
14
![Page 15: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/15.jpg)
加算の実験ファイルの実行
起動完了後「add.asm」ファイルを開きましょう
F5キーで実行開始です
最初のPCの値を聞かれます
そのままOKを押せば大丈夫です
第14回 計算機アーキテクチャ
15
![Page 16: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/16.jpg)
PCSpimの画面の意味
第14回 計算機アーキテクチャ
16
レジスタの状態
メモリの状態
システムメッセージ
![Page 17: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/17.jpg)
レジスタの状態について
表現形式はすべて同じ
レジスタの名前 = 現在のレジスタの値
前半は特殊レジスタ
後半は汎用レジスタ(General Registers)
第14回 計算機アーキテクチャ
17
![Page 18: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/18.jpg)
メモリの状態について
メモリは4列に分かれています
1列目:メモリ番地
2列目:メモリの内容(バイナリデータ)
3列目:メモリの内容(少し解釈したもの)
4列目:元のプログラム
第14回 計算機アーキテクチャ
18
① ② ③ ④
![Page 19: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/19.jpg)
ステップ実行
もう少し細かく実行の様子が知りたいときに利用
1行づつプログラムを実行できます
ステップ実行の方法
ファイルを読み込みます
一度実行してしまった場合は再度読み直しが必要
F10キーを押すと1行づつ実行されます
どこからが自分の作ったプログラム?
jal main までは自動で作られた部分です
前のページをよく見ながら確認してください
第14回 計算機アーキテクチャ
19
![Page 20: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/20.jpg)
実行してみよう
加算プログラムをステップ実行し命令の 実行によるレジスタの変化を確認せよ
加算のプログラムは配布します
第14回 計算機アーキテクチャ
20
![Page 21: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/21.jpg)
プログラムの作り方
メモ帳などのテキストエディタがあれば作成可能
プログラム以外にも少し記入しなければならない 内容がある
基本的なフォーマット
第14回 計算機アーキテクチャ
21
# Data Segment .data # Text Setgment .text .globl main main: li $s1,2 (以下はプログラムを書いていく)
データ 記入部
プログラム記入部
![Page 22: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/22.jpg)
演習課題
先々週の結果を確認しよう
プログラムを入力し、動作とバイナリ変換結果を見る
第14回 計算機アーキテクチャ
22
プログラム op rs rt rd shamt funct
add $t3 $s1 $s2
sra $t1 $s1 3
sub $t2 $t1 $s3
add $s3 $t2 $t3
![Page 23: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/23.jpg)
検討課題
次のC言語で書かれたプログラムをMIPS形式に直し動作を確認せよ
第14回 計算機アーキテクチャ
23
c = a + b; d = d + a; ans = c – d + a;
c = a * b; a = a + b; ans = c – (a + b) * b;
レジスタには何を割り当ててもかまわない
(1)
(2)
![Page 24: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の](https://reader033.vdocuments.pub/reader033/viewer/2022043000/5f7712c6d8ca89684c7aab61/html5/thumbnails/24.jpg)
最終課題
次のプログラムを作成せよ
等比行列の作成
1, 2, 4, 8, …
レジスタを使ってもメモリを使ってもよい
適当なところで止めること
自分の生年、月、日の和を求めよ
積や商なども適当に試してみること
よく出てくる疑問
printfはできないの?
関数のテストは? 第14回 計算機アーキテクチャ
24
来週syscall命令など特殊な形式を紹介します