17
計算機アーキテクチャ 2014728電気情報工学科 田島 孝治 15回 計算機アーキテクチャ 1 15PCSpimの使い方

計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

計算機アーキテクチャ

2014年 7月28日

電気情報工学科 田島 孝治

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

第15回 PCSpimの使い方

Page 2: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

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

※5/5はこどもの日、7/21は海の日のため休講

※授業変更:6/23 1時限→6/20 3時限

2

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

回 日付 タイトル

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: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

今日の授業の目的

メモリ管理のための特殊なコマンドについて知る

文字や数字を画面に出力する方法について学ぶ

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

3

PCSpimによるプログラムの基礎を学ぶ メモリの扱いとシステムコールを使ってみる

Page 4: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

PCSpimの画面の意味

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

4

レジスタの状態

メモリの状態

システムメッセージ

Page 5: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

プログラム領域でないメモリは?

上側は通常のDATA領域

ラベルを付けて自由に使うことができる

初期状態ではすべて0の値が入っている

下側はスタック領域

スタックポインタで管理しながら自由に使うことができる

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

5

Page 6: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

メモリの確保とデータの入力

次のプログラムを入力しPCSpimで実行してみよう

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

6

# Data segment .data a: .word 5 # Text segment .text .globl main main: la $t0, a lw $s0, 0($t0) addi $s1,$s0,10 sw $s1, 0($t0) jr $ra

Page 7: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

プログラムを読み込んだ後の状態

0x10010000番地からデータ領域が作られる

5があらかじめ入力されている

実行すると・・・

値の書き換えが行われる

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

7

Page 8: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

メモリ上の値の取り方

.word以外にもいくつか設定方法がある

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

8

コマンド 使い方 例

.word ワード単位でデータを格納する領域を作成し、同時に値を代入する。 カンマで区切り複数の値を代入できる。

.word 5,2,34,53

.space バイト単位でデータを格納する領域を作成する。値の代入はできない。

.space 64

.asciiz 文字列を記述する。メモリの最後にnull文字が追加される。

.asciiz "hello world"

.double 倍精度の小数を記述する。カンマ区切りで複数の値を記述可能。

.double 3.14,2.71

Page 9: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

複数の値を記述してみよう

次のプログラムを記入し実行

メモリの様子に注目すること

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

9

# Data segment .data value: .word 1,2,4,8,0 # Text segment .text .globl main main: la $t0, value lw $s0, 0($t0) lw $s1, 4($t0) lw $s2, 8($t0)

lw $s3, 12($t0) add $t1,$s0,$s1 add $t2,$s2,$s3 add $s4,$t1,$t2 sw $s4, 16($t0) jr $ra

Page 10: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

(重要・復習)lw,swの使い方

メモリアドレスは1バイト単位で割り当てられている

1word = 4バイト

ベース相対アドレッシングの場合offsetは4バイトづつ増やす

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

10

番地 データ

0x10010000 0x00

0x10010001 0x00

0x10010002 0x00

0x10010003 0x01

0x10010004 0x00

0x10010005 0x00

0x10010006 0x00

0x10010007 0x02

Offset = 0 の示すデータ

0x00000001

Offset = 4 の示すデータ

0x00000002

Page 11: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

文字列の扱い方

定義は先のルールに従うだけ

どうやって文字を出力するの?

文字の出力はCPUとメモリで終わる処理ではない

外部ハードウェアへのアクセスが必要

OSを経由して外部装置にアクセスする必要がある

システムコールで出来ること

コンソールへの文字、数字の出力

キーボードからの文字、数字の入力

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

11

このような処理をシステムコールと呼びます

Page 12: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

文字列を出力してみよう

次のプログラムを入力して実行

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

12

# Data segment .data hello: .asciiz "hello world¥n" # Text segment .text .globl main main: la $s2, hello # copy the address from s2 to a0 addi $a0,$s2,0 # v0 = 4 : output text li $v0, 4 syscall jr $ra

Page 13: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

システムコール(syscall)の使い方

動作の種類をv0レジスタに設定

引数をa0レジスタ等に設定

動作によって微妙に使うレジスタが変わる

詳細は下記の表のとおり

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

13

動作の種類 v0 その他引数

整数の出力 1 $a0 = number

文字列の出力 4 $a0 = address

少数の出力 3 $f12 = number

整数の入力 5 Number in $v0

文字列の入力 8 String in $a0 $a1 = read size

Page 14: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

サブルーチンを作ろう

Print用のサブルーチンを作る

$s0に値をいれてから呼び出す

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

14

printt: addi $a0,$s0,0 li $v0, 4 #print text syscall # jr $ra printi: addi $a0,$s0,0 li $v0, 1 #print int value syscall # jr $ra

Page 15: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

サブルーチンの呼び出し方法

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

15

# Data segment .data a: .word 10 hello: .asciiz "hello world" nl: .asciiz "¥n" # Text segment .text .globl main main: la $t0, a lw $s0, 0($t0) la $s2, hello la $s3, nl

Page 16: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

サブルーチンの呼び出し方法

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

16

#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 addi $s0,$s2,0 jal printt addi $s0,$t1,0 jal printi addi $s0,$s3,0 jal printt #Pop lw $s0, 4($sp) lw $ra, 0($sp) addi $sp, $sp, 8 # Increment stack pointer by 8 end: jr $ra # end of program

Page 17: 計算機アーキテクチャ...1word = 4 バイト ベース相対アドレッシングの場合offsetは4バイトづつ増やす 第15回 計算機アーキテクチャ 10 番地

期末試験について

模擬問題を配布しています

範囲はこれまでにやった部分全てです

用語問題などもでます

データシートは配布予定です

プログラム制作の問題は穴埋め問題です

細かなミスで加点できないので注意してください

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

17