スライド 1

Similar documents
スライド 1

スライド 1

スライド 1

スライド 1

スライド 1

ex04_2012.ppt

ex05_2012.pptx

計算機アーキテクチャ

ソフトウェア基礎技術研修

スライド 1

スライド 1

スライド 1

Microsoft PowerPoint - ProcML-12-3.ppt

ソフトウェア基礎技術研修

Microsoft PowerPoint - Chap4 [Compatibility Mode]

計算機アーキテクチャ

Microsoft PowerPoint - Sol7 [Compatibility Mode]

6. パイプライン制御

スライド 1

スライド 1

Microsoft PowerPoint - Chap2 [Compatibility Mode]

問 2. タイミングチャート以下に示す VHDL コードで記述されている回路に関するタイミングチャートを完成させよ ) レジスタの動作 use IEEE.std_logic_64.all; entity RegN is generic (N : integer := 8 port ( CLK, EN

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

< B8CDD8AB B83685D>

3 SIMPLE ver 3.2: SIMPLE (SIxteen-bit MicroProcessor for Laboratory Experiment) 1 16 SIMPLE SIMPLE 2 SIMPLE 2.1 SIMPLE (main memo

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

ソフトウェア基礎技術研修

1 はじめに このアプリケーションは 計算機ハードウェア論 のアセンブリ言語 ( 超簡単命令セット ) の理解を助けるために製作されました 便宜的に機能を追加 削除した箇所があるため このアプリケーション上での動き方が実際のCPUでの動き方と異なる場合があることに留意してください このアプリケーショ

スライド 1

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め

ex03_2012.ppt

Microsoft PowerPoint - CompArch_Exercise3.pptx

PowerPoint プレゼンテーション

コンピュータ工学Ⅰ

Microsoft PowerPoint ppt

スライド 1

コンピュータ工学Ⅰ

Microsoft PowerPoint - Lec ppt [互換モード]

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

Microsoft PowerPoint ppt

コンピュータの仕組み(1)ハードウェア

Microsoft PowerPoint - Chap5 [Compatibility Mode]

目次 1. はじめに 1 2. マルチALUプロセッサ MAP MAP の構成 MAP 命令セットアーキテクチャ 並列 連鎖判定のアルゴリズムについて 5 3. Booth 乗算のアルゴリズム 次 Booth アルゴリズム 次 Bo

スライド 1

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

hard3.pptx

Microsoft PowerPoint - Lec pptx

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

Microsoft PowerPoint ppt

CASL入門

Prog1_10th

Microsoft PowerPoint - NxLec ppt

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft Word - HW06K doc

出 アーキテクチャ 誰が 出 装置を制御するのか 1

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

DRAM SRAM SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DRAM 4 C Wikipedia 1.8 SRAM DRAM DRAM SRAM DRAM SRAM (256M 1G bit) (32 64M bit)

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint - kougi7.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - 11.pptx

2ALU 以下はデータ幅 4ビットの ALU の例 加算, 減算,AND,OR の4つの演算を実行する 実際のプロセッサの ALU は, もっと多種類の演算が可能 リスト 7-2 ALU の VHDL 記述 M use IEEE.STD_LOGIC_1164.ALL; 00 : 加算 use IEE

PowerPoint プレゼンテーション

プログラミング基礎

スライド 1

Microsoft PowerPoint - NxLec ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

Microsoft PowerPoint - handout07.ppt [互換モード]

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

Microsoft PowerPoint - NxLecture ppt [互換モード]

Microsoft PowerPoint - kougi7.ppt

Microsoft PowerPoint - 11Web.pptx

Microsoft PowerPoint - CproNt02.ppt [互換モード]

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

プログラミング実習I

main.dvi

MW100 Modbusプロトコルによるデータ通信の設定について

memo

Microsoft PowerPoint - OS07.pptx

Microsoft Word - no202.docx

JEB Plugin 開発チュートリアル 第3回

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

MIPSのマイクロアーキテクチャ

Microsoft PowerPoint ppt

Microsoft Word - 19-d代 試é¨fi 解ç�fl.docx

情報処理Ⅰ演習

02: 変数と標準入出力

Microsoft Word - Cプログラミング演習(11)

PowerPoint プレゼンテーション

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

本日の範囲 ファイルとその中身 コンピュータにおける情報の表現 ファイルとフォルダ コンピュータの仕組み 通信 ネットワーク, インターネット 情報の符号化, その限界 コマンドライン プログラムの仕組み 通信の符号化, その限界 暗号 簡単なプログラムの作成 実行 Excel で計算 データの可視

Microsoft PowerPoint - ruby_instruction.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog07.ppt

02: 変数と標準入出力

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog04.ppt

Transcription:

東北大学工学部機械知能 航空工学科 2019 年度クラス C D 情報科学基礎 I 6. MIPS の命令と動作 演算 ロード ストア ( 教科書 6.3 節,6.4 節命令一覧は p.113) 大学院情報科学研究科 鏡慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/

レジスタ間の演算命令 (C 言語 ) c = a + b; ( 疑似的な MIPS アセンブリ言語 ) addu $c, $a, $b # $c $a + $b ただし, 変数 a, b, c の内容がそれぞれレジスタ a, b, c に置かれているとする ( $a でレジスタ a の値を表す ) 以下, 特に断らない限り変数は整数 (int) とする # 以下は説明用のコメント. アセンブリ言語の一部ではない addu をオペコード,$c, $a, $b をオペランドと呼ぶ 特に $c を出力オペランド,$a, $b を入力オペランドと呼ぶ 2

例 (C 言語 ) e = (a + b) - (c + d); ( 疑似的な MIPS アセンブリ言語 ) addu $e, $a, $b # $e $a + $b addu $t, $c, $d # $t $c + $d subu $e, $e, $t # $e $e - $t ただし, 変数 a~e の内容がそれぞれレジスタ a~e に置かれており, それ以外にレジスタ t が自由に使えるとする レジスタ t のように計算の都合上一時的に使われるレジスタを一時レジスタ (temporary register) と呼ぶ addu, subu の u は unsigned の略である.add 命令,sub 命令も計算内容は同じだが, オーバフローが起きたときに例外処理が行われる.C 言語では通常オーバフローは無視する 3

資料 : 主なレジスタ間演算命令 命令 説明 addu $c, $a, $b $c $a + $b (add unsigned の略 ) subu $c, $a, $b $c $a $b (subtract unsigned の略 ) and $c, $a, $b $c $a & $b or $c, $a, $b $c $a $b nor $c, $a, $b $c ~($a $b) xor $c, $a, $b $c $a ^ $b sll $c, $a, $b $c $a << $b (shift left logical の略 ) srl $c, $a, $b $c $a >> $b (shift right logical の略 ) slt $c, $a, $b 符号つきで $a < $b ならば $c 1; さもなくば $c 0 (set on less than の略 ) sltu $c, $a, $b 符号無しで $a < $b ならば $c 1; さもなくば $c 0 (set on less than unsigned) 4

MIPS のレジスタ ここまでは便宜上, レジスタ名として変数名をそのまま用いて来たが, 実際には MIPS には a, b, c などのような名前のレジスタは存在しない 実際には,32 本のレジスタに 0 ~ 31 の番号がついており, その番号により指定する addu $10, $8, $9 # $10 $8 + $9 このままではわかりにくいので, 次ページのような別名がついている 0 番レジスタは, 常に値 0 が読み出される特殊なレジスタである 5

資料 : レジスタ一覧 番号表示 別名 説明 $0 $zero 常にゼロ $1 $at アセンブラ用に予約 $2, $3 $v0, $v1 関数からの戻り値用 $4 ~ $7 $a0 ~ $a3 関数への引数用 $8 ~ $15 $t0 ~ $t7 ( 主に ) 一時レジスタ $16 ~ $23 $s0 ~ $s7 ( 主に ) 変数割り当て用 $24, $25 $t8, $t9 ( 主に ) 一時レジスタ $26, $27 $k0, $k1 OS 用に予約 $28 $gp グローバルポインタ $29 $sp スタックポインタ $30 $s8 ( 主に ) 変数割り当て用 $31 $ra リターンアドレス 6

例題 1. レジスタ s0 の内容を s1 にコピーする命令を示せ.( ヒント : レジスタ $zero を活用する. 一般に, 同じ動作をする命令は一通りとは限らない ) この操作はよく使うので, マクロ命令を用いて move $s1, $s0 # $s1 $s0 と書いてよいことになっている. 2. レジスタ s0 の内容の各ビットを反転した結果を s1 に保存する命令を示せ.( ヒント : nor と $zero を活用する ) 7

例題解答例 1. 例えば以下の各命令 or $s1, $s0, $zero or $s1, $zero, $s0 addu $s1, $s0, $zero ほか多数 2. 例えば以下の命令 nor $s1, $s0, $zero 8

命令フェッチと命令デコードの動作 PC (3) PC PC + 4 次 PC 計算 メモリ (1) 命令読み出し 命令デコーダ 制御回路 (2) 命令デコード アドレス (32 ビット ) データ (8, 16, 32 ビット ) 32x32 ビットレジスタ 32 ビット ALU は選択回路 9

レジスタ間演算の動作 PC 次 PC 計算 (3) レジスタ書き込み 命令デコーダ 32x32 ビットレジスタ メモリ (1) レジスタ読み出し 制御回路 32 ビット ALU アドレス (32 ビット ) データ (8, 16, 32 ビット ) (2) 演算 は選択回路 10

レジスタ - 即値間の演算命令 (C 言語 ) y = x + 100; ただし, 変数 x, y の内容がそれぞれレジスタ s0, s1 に置かれているとする (MIPS アセンブリ言語 ) addu $s1, $s0, 100 # $s1 $s0 + 100 命令内で直接指定される定数を即値 (immediate) と呼ぶ. 演算命令は,2 つめの入力オペランドとして即値を取れる. 1 つめは必ずレジスタ. 出力オペランドももちろんレジスタ 即値を取る addu 命令は, 実際には addiu という命令として実行される ( アセンブラが自動的に変換する.SPIM の実行画面にも注目 ) 即値を取る subu 命令は, 実際には addiu 命令に符号反転した即値を渡すことで実行される. 11

例 (C 言語 ) y = x - 8; z = 15; ただし, 変数 x, y, z の内容がそれぞれレジスタ s0, s1, s2 に置かれているとする (MIPS アセンブリ言語 ) subu $s1, $s0, 8 # $s1 $s0-8 or $s2, $zero, 15 # $s2 15 2 行目のようにレジスタへの定数代入よく行われるので,li (load immediate) というマクロ命令でも書けるようになっている. li $s2, 15 # $s2 15 12

資料 : 主なマクロ命令 命令 説明 move $a, $b $a $b # or $a, $zero, $b と等価 li $a, imm $a imm # or $a, $zero, imm と等価 (load immediate) nop 何もしない # sll $zero, $zero, $zero と等価 (no operation) ハードウェアとして用意されているわけではなく, アセンブラが他の命令 ( の組み合わせ ) に変換することによって実現される命令 13

レジスタ - 即値間演算の動作 PC 命令デコーダ 次 PC 計算 (1) レジスタ読み出し 即値生成 (3) レジスタ書き込み 32x32 ビットレジスタ メモリ 制御回路 32 ビット ALU アドレス (32 ビット ) データ (8, 16, 32 ビット ) (2) 演算 は選択回路 14

ロード ストア命令 レジスタとメモリアドレスを指定して, 相互間でデータ転送を行う メモリアドレスの指定方法をアドレッシングモードと呼ぶ MIPS の場合, アドレッシングモードは 1 つしかない lw $s1, 12($s0) # $s1 mem[12 + $s0] 操作対象のメモリアドレス ( 実効アドレス ) はレジスタ s0 の値と定数 12 を加えたもの 例えばレジスタ s0 に 10000 が保存されていたとすると, アドレス 10012 から始まる 4 バイト (= 1 ワード ) のデータを読み出し, レジスタ s1 に書き込む 15

資料 : 主なロード ストア命令 命令 lw $t, offset($base) 説明 $t mem[offset + $base] (load word) sw $t, offset($base) mem[offset + $base] $t (store word) 他に,half word 単位や byte 単位のロード命令, ストア命令がある 16

(C 言語 ) c = a + b; 例 ただし, 各変数は右図のようにメモリに割り当てられているとし, レジスタ t0, t1, t2 が自由に使えるとする. 以下同様. 0x7ffff008 c (MIPS アセンブリ言語 ) 0x7ffff004 b lw $t0, 0($sp) # $t0 mem[$sp + 0] lw $t1, 4($sp) # $t1 mem[$sp + 4] addu $t2, $t0, $t1 # $t2 $t0 + $t1 sw $t2, 8($sp) # mem[$sp + 8] $t2 0x7ffff000 a sp 0x7ffff000 実際のアドレスがいくつになるかは場合により異なる 17

例 (C 言語 ) int i; int x[3]; /* 中略 */ x[i] = 300; (MIPS アセンブリ言語 ) addu $t0, $sp, 4 # $t0 $sp + 4 lw $t1, 0($sp) # $t1 mem[$sp + 0] sll $t1, $t1, 2 # $t1 $t1 4 addu $t0, $t0, $t1 # $t0 $t0 + $t1 li $t2, 300 # $t2 300 sw $t2, 0($t0) # mem[$t0] $t2 0x7ffff00c 0x7ffff008 0x7ffff004 0x7ffff000 x[2] x[1] x[0] i sp 0x7ffff000 18

ロード命令の動作 PC 次 PC 計算 命令デコーダ 32x32 ビットレジスタ メモリ 制御回路 (1) 実効アドレス計算 32 ビット ALU アドレス (32ビット) データ (8, 16, 32ビット ) (2) メモリ読み出し は選択回路 19

ストア命令の動作 PC 次 PC 計算 メモリ 命令デコーダ 制御回路 (1) 実効アドレス計算 32x32 ビットレジスタ 32 ビット ALU アドレス (32ビット) データ (8, 16, 32ビット ) (2) メモリ書き込み は選択回路 20

例 ( 余談 ): スーパーマリオブラザーズ 256W ファミリーコンピュータ用ゲーム スーパーマリオブラザーズ ( 任天堂, 1985) では, 以下のような操作により, 通常は 1 ~ 8 までしか存在しない ワールド ( ゲーム内のステージの呼称 ) が, テニスのプレイヤの位置に応じて最大 256 種類出現する現象が生じた. ゲームプレイ中に電源を切らずにゲームカセットをゲーム機本体から引き抜き, 別のゲーム テニス ( 任天堂, 1984) のカセットを挿入してリセットボタンを押し, しばらくプレイした後に, 同様にカセットを抜き, スーパーマリオブラザーズに戻してリセットボタンを押し,A ボタンを押しながらプレイを開始する. この事実から推測できることを述べよ. (2014 年度期末試験 改題 ) 21

https://www.youtube.com/watch?v=axv05nwztxo 22

各ワールドのマップデータ開始アドレス = マップデータ開始アドレス + ワールド番号 マップデータサイズ このような不具合は, バッファオーバランと総称される world 2 map data world 1 map data マップデータサイズ マップデータ開始アドレス ワールド番号 (0-7) プレイヤ位置 (0-255) Super Mario Bros. Tennis 23

練習問題 4 要素の 4 バイト整数型からなる配列が右図のようにメモリに配置されているとする.x[0] x[3] に格納されている値がそれぞれ 1, 3, 5, 7 の状態から, 以下のコードを実行した. 実行後の x[0] x[3] の値はどうなっているか. lw $t0, 0($sp) addu $t0, $t0, 3 sw $t0, 0($sp) lw $t1, 4($sp) lw $t0, 8($sp) sll $t0, $t0, $t1 sw $t0, 8($sp) lw $t0, 12($sp) slt $t0, $t0, $t1 sw $t0, 12($sp) 0x7ffff00c 0x7ffff008 0x7ffff004 0x7ffff000 x[3] x[2] x[1] x[0] sp 0x7ffff000 24

練習問題解答例 lw $t0, 0($sp) # $t0 x[0] (= 1) addu $t0, $t0, 3 # $t0 $t0 + 3 (= 1 + 3) sw $t0, 0($sp) # x[0] $t0 (= 4) lw $t1, 4($sp) # $t1 x[1] (= 3) lw $t0, 8($sp) # $t0 x[2] (= 5) sll $t0, $t0, $t1 # $t0 $t0 << $t1 (= 5 << 3) sw $t0, 8($sp) # x[2] $t0 (= 40) lw $t0, 12($sp) # $t0 x[3] (= 7) slt $t0, $t0, $t1 # $t0 ($t0 < $t1)? 1 : 0 sw $t0, 12($sp) # x[3] $t0 (= 0) 結局 x[0] x[3] は 4, 3, 40, 0 になる. 25