計算機アーキテクチャ今日の授業の目的...

24
計算機アーキテクチャ 2014714電気情報工学科 田島 孝治 14回 計算機アーキテクチャ 1 14回 サブルーチンの実現/PCSpimの使い方

Upload: others

Post on 27-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

計算機アーキテクチャ

2014年 7月14日

電気情報工学科 田島 孝治

第14回 計算機アーキテクチャ 1

第14回 サブルーチンの実現/PCSpimの使い方

Page 2: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

授業スケジュール(前期)

※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形式の

今日の授業の目的

プログラムの実行順を制御する命令の使い方を学ぶ

R形式、I形式につづく最後の形式であるA形式の バイナリの表現をできるようにする

PCSpimの基本的な使い方(プログラムの記述と実行)について学ぶ

第14回 計算機アーキテクチャ

3

分岐命令について理解する J形式の命令ついて理解を深める

PCSpimによるプログラムの基礎を学ぶ

Page 4: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

条件分岐命令

ジャンプ命令

メモリ上の特定の番地にプログラムの処理を移す

無条件でジャンプするための命令

リンク付きジャンプ命令

命令実行後、元の位置に戻れるようにジャンプする

関数呼び出しに使う

命令の形式:J形式

命令長はどの形式でも変わらない

第14回 計算機アーキテクチャ

4

op(6bit) アドレス(26bit)

分岐操作 (条件分岐、ジャンプ等)

アドレス

Page 5: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

具体的な命令の例(J形式)

J形式の命令

第14回 計算機アーキテクチャ

5

演算命令 命令コード 使用例 意味

ジャンプ j j label 指定した場所へ処理を移す

リンク付き ジャンプ jal jal label

現在の命令の次の命令番地を$raに書き込んでから指定した場所(label)へ処理を移す

J形式の命令は実はこれしかありません

jal命令はjr命令(レジスタを指定してジャンプ)と 組み合わせて使います

Page 6: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

ビット列の作り方(J形式)

第14回 計算機アーキテクチャ

6

targetはどんなバイナリデータになるの?

Page 7: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

J形式命令のアドレッシング

(疑似)直接アドレッシング

命令番地を直接記入する

なぜ疑似?

J形式のアドレス記入可能ビット数:26 bit

システムのメモリアドレスビット数:32 bit

6ビット分は指定できない!

6ビットは現在のPCの値等を使います

第14回 計算機アーキテクチャ

7

Page 8: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

具体的な例 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形式の

例題

次のjal命令をビット列に直せ

第14回 計算機アーキテクチャ

9

メモリ番地 意味

0x0040002c jal printf

・・・・ ・・・

0x0040003c ・・・・ printf:

op target

Page 10: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

サブルーチンの作り方

サブルーチンとすべき場所にラベルを付ける

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形式の

サブルーチンコールの注意点

書き換えてはいけないレジスタがある

レジスタを一度上書きすると元にもとに戻せない

$raを書き換えると呼び出し元に戻れない

MIPSのルールで保存すべきレジスタがある

第14回 計算機アーキテクチャ

11

メモリ上に一部のレジスタの値を退避

MIPSのルールで決まった保護すべきレジスタ

$ra

どうやって値を守る?

Page 12: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

値の退避と復元方法

スタックポインタを使うと簡単

第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形式の

PC Spimの使い方

第14回 計算機アーキテクチャ 13

Page 14: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

簡単なプログラムを実行してみよう

PCSpimの起動

配布したポータブル版のpcspim.exeを実行

初回は設定をするか聞かれる

YESを選択

設定画面

基本的にはそのままでOK

Exceptionを指定

Browse(日本語の場合は「参照」)ボタンを押してから、exceptions.sファイルを選択する

あとはプログラムソースを開くだけ 第14回 計算機アーキテクチャ

14

Page 15: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

加算の実験ファイルの実行

起動完了後「add.asm」ファイルを開きましょう

F5キーで実行開始です

最初のPCの値を聞かれます

そのままOKを押せば大丈夫です

第14回 計算機アーキテクチャ

15

Page 16: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

PCSpimの画面の意味

第14回 計算機アーキテクチャ

16

レジスタの状態

メモリの状態

システムメッセージ

Page 17: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

レジスタの状態について

表現形式はすべて同じ

レジスタの名前 = 現在のレジスタの値

前半は特殊レジスタ

後半は汎用レジスタ(General Registers)

第14回 計算機アーキテクチャ

17

Page 18: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

メモリの状態について

メモリは4列に分かれています

1列目:メモリ番地

2列目:メモリの内容(バイナリデータ)

3列目:メモリの内容(少し解釈したもの)

4列目:元のプログラム

第14回 計算機アーキテクチャ

18

① ② ③ ④

Page 19: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

ステップ実行

もう少し細かく実行の様子が知りたいときに利用

1行づつプログラムを実行できます

ステップ実行の方法

ファイルを読み込みます

一度実行してしまった場合は再度読み直しが必要

F10キーを押すと1行づつ実行されます

どこからが自分の作ったプログラム?

jal main までは自動で作られた部分です

前のページをよく見ながら確認してください

第14回 計算機アーキテクチャ

19

Page 20: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

実行してみよう

加算プログラムをステップ実行し命令の 実行によるレジスタの変化を確認せよ

加算のプログラムは配布します

第14回 計算機アーキテクチャ

20

Page 21: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

プログラムの作り方

メモ帳などのテキストエディタがあれば作成可能

プログラム以外にも少し記入しなければならない 内容がある

基本的なフォーマット

第14回 計算機アーキテクチャ

21

# Data Segment .data # Text Setgment .text .globl main main: li $s1,2 (以下はプログラムを書いていく)

データ 記入部

プログラム記入部

Page 22: 計算機アーキテクチャ今日の授業の目的 プログラムの実行順を制御する命令の使い方を学ぶ R形式、I形式につづく最後の形式であるA形式の

演習課題

先々週の結果を確認しよう

プログラムを入力し、動作とバイナリ変換結果を見る

第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形式の

検討課題

次の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形式の

最終課題

次のプログラムを作成せよ

等比行列の作成

1, 2, 4, 8, …

レジスタを使ってもメモリを使ってもよい

適当なところで止めること

自分の生年、月、日の和を求めよ

積や商なども適当に試してみること

よく出てくる疑問

printfはできないの?

関数のテストは? 第14回 計算機アーキテクチャ

24

来週syscall命令など特殊な形式を紹介します