App. A アセンブラ、リンカ、 SPIMシミュレータ

Slides:



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

1 プログラム言語 と 言語プロセッ サ 基本情報技術概論 II ( 第1回 ) 埼玉大学 理工学研究科 堀山 貴史.
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
2012年度 計算機システム演習 第3回 白幡 晃一.
情報システム基盤学基礎1 コンピュータアーキテクチャ編 第2回 命令
情報工学基礎(改訂版) 岡崎裕之.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
通信処理のカーネル内競合を 検出するアスペクト指向 カーネルレベルロガー
2012年度 計算機システム演習 第4回 白幡 晃一.
2006年度 計算機システム演習 第4回 2005年5月19日.
第4回目 2006/05/08.
ソフトウェアとのインターフェース.
計算機システムⅡ 命令セットアーキテクチャ
2007/1/18 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
計算機基礎Ⅱ,Ⅲ (指導書 pp. 76~94) 改訂:佐竹 純二 (作成:岡本 吉央).
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
2016年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
計算機入門I ハードウェア(1) 計算機のハードウェア構成 ~計算機のハードウェアとは何か~
第3回目 2006/05/01.
コンピュータの原理 1E17M053-9 奈良 皐佑 1E17M070-7 師尾 直希        1E17M078-6 渡邊 惇.
型付きアセンブリ言語を用いた安全なカーネル拡張
2012年度 計算機システム演習 第6回 福田 圭祐.
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
プログラミング言語入門 手続き型言語としてのJava
AMD64の仮想化技術を利用した 仮想マシンモニタの実装
勉強会その1    2016/4/ 分35秒 コンピュータアーキテクチャとは? コンピュータの構成 命令の実行.
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
TA 高田正法 B10 CPUを作る 3日目 SPIMの改造 TA 高田正法
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
サブルーチン呼び出しの メカニズム.
情報とコンピュータ 静岡大学工学部 安藤和敏
オペレーティングシステム i386アーキテクチャ(1)
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
2010年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
プログラミング演習I 2003年4月30日(第3回) 木村巌.
コンピュータアーキテクチャ 第 2 回.
2013年度 プログラミングⅠ ~ 内部構造と動作の仕組み(2) ~.
2017年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
コンピュータアーキテクチャ 第 3 回.
コンピュータアーキテクチャ 第 2 回.
Mondriaan Memory Protection の調査
コンピュータアーキテクチャ 第 5 回.
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
コンピュータアーキテクチャ 第 3 回.
コンピュータアーキテクチャ 第 5 回.
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
2014年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
情報システム基盤学基礎1 コンピュータアーキテクチャ編
2008年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
1.2 言語処理の諸観点 (1)言語処理の利用分野
6.5 最終コード生成 (1)コードの形式 ①絶対2進コード(AB : absolute binary) 命令後のオペランドが絶対番地指定。
Presentation transcript:

App. A アセンブラ、リンカ、 SPIMシミュレータ yasu & kanai

機械語 2進数の命令 アセンブリ言語 機械語をシンボル表記したもの アセンブラ アセンブリ言語→機械語

コンパイル・アセンブル・リンク 1オブジェクトファイル≒1モジュール アセンブリ言語 ファイル アセンブラ (マクロ) (条件付アセンブル) ソースファイル オブジェクト ファイル 実行ファイル (機械語) マクロ 条件付コンパイル コンパイラ リンカ ソースファイル オブジェクト ファイル ライブラリ 外部ラベルの解決 再配置(リロケーション) 内部ラベルの解決

アセンブリ言語 利点 欠点 読める 時間(命令数)に厳しいプログラム ある一部のコードの性能改善 コンパイラがサポートしていない特殊命令 パイプライン処理等によって困難になりつつある コンパイラがサポートしていない特殊命令 (高級言語の)コンパイラが無い(いらない) 欠点 マシンアーキテクチャ依存 長い・読みにくい

アセンブラ シンボル名とアドレスの解決 アセンブリ言語の2進命令への翻訳 シンボル表 シンボル/アドレス main 0xXXXXXXXX loop 0xXXXXXXXX str 0xXXXXXXXX printf ????????? シンボル名とアドレスの解決 アセンブリ言語の2進命令への翻訳 .text .align 2 .global main main: subu $sp, $sp, 32 : sw $zero, 28($sp) loop: lw $t6, 28($sp) ble $t0, 100, loop la $a0, str lw $a1, 24($sp) jal printf .data .align 0 str: .asciiz “The sum ... \n” アセンブラ指令 (assembler directive) external/globalラベル localラベル back patching 前方参照 (forward reference)

オブジェクトファイル・実行ファイルのフォーマット リンク a.out 形式 exec header text segment data segment text relocations data relocations symbol table string table オブジェクトファイル ヘッダ テキストセグメント データセグメント リロケーション情報 シンボル表 デバッグ情報 oh1 oh2 oh3 text1 text2 text1 data2 data1 text2 reloc2 reloc1 data1 symb2 symb1 data2 reloc3 symb3 リロケーション

ローダ 実行ファイルをメモリにロードする カーネルの機能 オブジェクトヘッダに従って 引数や戻り値レジスタ等の設定・準備 メモリの確保 メモリにマップ 引数や戻り値レジスタ等の設定・準備

メモリ上のプロセス 予備 テキスト セグメント 静的データ 動的データ スタックセグメント main プロセス func1 データ $fp func2 $gp $sp スタックフレーム or 手続き呼び出しフレーム

スタック・LIFO main func1 func2

main start CPU $fp main_ra main_fp main_sp 退避 main $ra = main_ra $fp = main_fp $sp = main_sp main: : jal func1 jr $ra func1: jal func2 func2: $sp PC

main -> func1 CPU main_ra main main_fp main_sp main: $fp : func1_ra $ra = func1_ra $fp = func1_fp $sp = func1_sp main_fp main_sp main: : jal func1 jr $ra func1: jal func2 func2: $fp func1 func1_ra func1_fp func1_ra func1_sp $sp PC

func1 -> func2 CPU main main_ra $ra = func2_ra $fp = func2_fp $sp = func2_sp main_fp main_sp main: : jal func1 jr $ra func1: jal func2 func2: func1 func1_ra func1_fp func1_ra func1_sp $fp func2 func2_ra $sp PC

func2 -> func1 CPU main main_ra $ra = func2_ra $fp = func2_fp $sp = func2_sp main_fp main_sp main: : jal func1 jr $ra func1: jal func2 func2: func1 func1_ra func1_fp func1_ra func1_sp $fp func2 func2_ra $sp PC

func1 -> main CPU main_ra main main_fp main_sp main: $fp : $ra = func1_ra $fp = func1_fp $sp = func1_sp main_fp main_sp main: : jal func1 jr $ra func1: jal func2 func2: $fp func1 func1_ra $sp PC

main exit CPU ローダ $fp main main: $sp : jal func1 $ra = main_ra $fp = main_fp $sp = main_sp main: : jal func1 jr $ra func1: jal func2 func2: $sp PC

コンパイラとレジスタ(gccの場合) コンパイラはレジスタの「利用目的」を決める *Zeroレジスタはハードウェア的に0 演算結果レジスタ(vレジスタ) 引数レジスタ(aレジスタ) 一時変数レジスタ(s,tレジスタ) カーネル用レジスタ(kレジスタ) 特殊レジスタ(gp,sp,fp,ra) *Zeroレジスタはハードウェア的に0

割り込みの例 コプロセッサ0 レジスタ14 EPC レジスタ12 Status Device 1 割り込み許可フラグ Cause 割り込みが起こったアドレス レジスタ14 EPC レジスタ12 Status Device 1 レジスタ13 割り込み許可フラグ Cause レジスタ 割り込みの原因 ・・・・ 割り込みハンドラのアドレス Program Counter 受け取ったデータ I/O1 Data デバイス コントローラ I/O1 Control ・・・ CPU内部 割り込み 制御部 割り込み 割り込み許可フラグ CPU

I/Oアクセスの手法(1/2) 専用のアドレス空間がある場合 CPU アドレスバス 0x00 Device A の制御レジスタ 0x02 Device A 0x04 Device B の制御レジスタ ... I/Oのアドレス空間 「IN」や「OUT」などのI/O制御用の特殊な命令でのみアクセス可 (ATMEL-AVR等..) メモリのアドレス空間

I/Oアクセスの手法(2/2) Memory Mapped I/O CPU アドレスバス 通常のメモリ操作命令で操作可能 メモリにデータが 格納されている Device A の制御レジスタ 0xffff0000 実際にメモリにデータが格納されているわけではない特殊な領域 Device A 0xffff0004 0xffff0008 Device B の制御レジスタ メモリのアドレス空間

SPIMデモ MIPSシミュレータ サンプルコード http://www.cs.wisc.edu/~larus/spim.html http://www.mtl.t.u-tokyo.ac.jp/~mtakada/jikken_b10/ Googleで「B10 CPU」検索