140 likes | 322 Views
工学部講義. マイクロプロセッサ応用 (3). はじめに 講義概要 アドレス指定方式 サブルーチン. 坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科. はじめに. 本講義の目的 マイクロプロセッサのハード・ソフトの基本を実践的に学習する 前半:講義 坂井 (ソフトの基本:機械語プログラミング) 三田先生(ハードの基本) 後半:実習 時間・場所: 火曜日 8 :30 - 10:00、3-31 ホームページ (坂井分:ダウンロード可能)
E N D
工学部講義 マイクロプロセッサ応用(3) • はじめに • 講義概要 • アドレス指定方式 • サブルーチン 坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
はじめに • 本講義の目的 • マイクロプロセッサのハード・ソフトの基本を実践的に学習する • 前半:講義 • 坂井(ソフトの基本:機械語プログラミング) • 三田先生(ハードの基本) • 後半:実習 • 時間・場所:火曜日 8:30 - 10:00、3-31 • ホームページ(坂井分:ダウンロード可能) • url: http://www.mtl.t.u-tokyo.ac.jp/~sakai/micro/ • 教科書・参考書 • Patterson and Hennessy: Computer Organization and Design:The Hardware/Software Interface 2nd Ed. (邦訳 「コンピュータの構成と設計」(第2版)日経BP) 東大・坂井
講義の概要と予定(坂井分) • 1.マイクロプロセッサのモデルと命令 • 2.命令とプログラム • 3.アドレス指定方式 • アドレス指定方式、サブルーチン • 4.入出力、例外処理等 • 5.課題出題 • 2月15日: 坂井分課題レポート提出期限(仮) 東大・坂井
3.アドレス指定方式 • オペランド(operand) • 命令の対象 • ソースオペランド: 被演算データ • デスティネーションオペランド:結果データ • アドレス指定方式(addressing) • オペランドを特定する方式のこと • アドレス指定方式の大別 • 即値: 「アドレス」でなく「値」でオペランドを指定 • アドレス指定 • レジスタアドレス指定:直接アドレッシング(のみ) • rs, rt, rd:命令のフィールドがレジスタアドレスを表す • メモリアドレス指定: 次のスライド 東大・坂井
3.1 メモリアドレス指定 • RISCとCISC • RISC: メモリアドレス指定方式の種類は少ない • load/store以外には、メモリの中身をオペランドとすることはない • load/storeのアドレス指定 • ベース相対モード: address = rs + dpl • インデクス相対モード: address = rs + rt (+dplはないのが普通) • PC相対モード:address=pc+dpl (分岐命令で用いる) • CISC: メモリアドレス指定方式の種類が多い • 一般の演算命令がメモリの中身をオペランドとすることができる • アドレス指定 • 直接モード: address = dpl • レジスタ間接モード:address = rs • ベース相対モード: address = rs + dpl • インデクス相対モード: address = rs+rt+dpl • スケールインデクスモード: address = rs+rt*scl+dpl • メモリ間接モード:address= (rs)+dpl • 自動インクリメントモード:address = rs++ + dpl • etc. 東大・坂井
rs rs rs rs rs rs dpl dpl dpl dpl dpl dpl OP OP OP OP OP OP rt rt rt rt rt rt アドレス指定方式の図解 + PC (a)直接モード (d)PC相対モード rt + * SCL + rs rs (b)ベース相対モード (e)スケールインデクスモード rt + rs rs + (c)インデクス相対モード (b)メモリ間接モード 東大・坂井
3.2 各アドレス指定方式の使い方 • ベース相対モード • ベース相対モードの用途 • ある番地A以後に連続してデータが格納されているときの各データへのアクセス • Aをベースアドレスレジスタに入れておいて、各データはここからの変位(相対番地)でアクセスする Base DW 6 DUP #(アドレスBaseを定義する疑似命令) add r2 r0 Base ; r2 <- Base lw r3 0(r2) ; r3 <- x lw r4 4(r2) ; r4 <- y add r3 r3 r4 ; r3 <- r3 + r4 sw r3 8(r2) ; z <- r3 lw r3 12(r2) ; r3 <- u lw r4 16(r2) ; r4 <- v sub r3 r3 r4 ; r3 <- r3 - r4 sw r3 20(r2) ; w <- r3 メモリ ベース アドレス 東大・坂井
(注)疑似命令 • 機械語の命令に対応する命令ではなく、メモリ番地の定義を変数で表すため等に使う見かけ上の命令 • X DW X番地に1語データがある • DWは一語の領域の定義(Define Word) • Y DW 10 DUP Y番地から10語データがある • D UPはduplicate (重複)の略 東大・坂井
各アドレス指定方式の使い方(続き) • インデクス相対モード • インデクス相対モードの用途 • 配列データへのアクセスなど • 領域の先頭番地Aaをベースアドレスレジスタ、配列の先頭番地(Aからの相対番地)Amをインデクスレジスタに入れておいて、配列要素はここからの変位でアクセスする メモリ ベース アドレス Base DW 2 DUP A DW 10 DUP B DW 10 DUP add r2 r0 Base ; r2 <- Base mul r3 r1 4 ; r1 = Iとする lw r4 8(r2, r3) ; r4 <- A[I] lw r5 48(r2, r3) ; r5 <- B[I] add r4 r4 r5 ; r4 <- A[I]+B[I] 東大・坂井
3.3 RISC型アドレス指定方式の拡張性 • RISC型にないモードの実現 • 直接モード • 0レジスタ:値が恒常的に0のレジスタ • 例.MIPS: r0=0 • rs=0レジスタとすれば、直接モードになる • インデクス相対モード • ベース+インデクスの値を別のレジスタに入れておけばよい • 潤沢なレジスタ資源を活用する! • 他のモード • 複数の命令に展開する • スケール: アドレスの入っているレジスタの値を定数倍 • RISC型は、アドレス指定方式の種類が少なく、複雑なアドレス指定は命令の組合せで実現する。 • よく使うアドレス指定だけを用意し、単純化の利点を活かして高速化することで、全体の処理を高速化する 東大・坂井
3.4 アドレス空間 • セグメント化アドレス方式 • 語長16ビット以下の計算機 • 「語 = アドレス」では、アドレス空間が狭い(64KB) → セグメントレジスタを用意し、その中身と16ビットアドレスと足しあわせる • 8086:論理空間 1MB • 80286: 仮想記憶 → 論理空間 1 GB • 80386: 32ビット化 → 論理空間 64TB • セグメント 4GB • 32ビット全空間をセグメントを切り替えずにアクセスできる (リニアアドレス) • 仮想記憶、記憶保護 (田中英彦先生講義) 東大・坂井
4.サブルーチン • サブルーチン • プログラムの中であるまとまった処理をする部分 • Cの関数、Pascalのprocedure、FORTRANのsubroutine • 引数と返値をもつ • 一般的な手順(機械語レベル) • レジスタ値の待避 • 戻り番地(次の命令番地)の待避 • サブルーチンの先頭番地へのジャンプ • サブルーチン本体の実行 • 戻り番地へのジャンプ • レジスタ値の復帰 • もとの命令列の実行再開 本方式は、レジスタ値を呼び出し側が待避するので、 Caller Save方式と呼ばれる 東大・坂井
4.1 サブルーチンの実現 • スタックを用いる • スタック(Stack): Last In First Out (LIFO)型のデータ構造 • 通常はメモリの領域を使う • スタックポインタ(SP): スタックの一番上を指すレジスタ • サブルーチンを呼び出すときは、待避するデータをスタックに積み上げる(PUSH) • サブルーチンから復帰するときは、待避したデータをスタックから読み出す(POP) New SP P →Q → Rの順で サブルーチンが呼ばれた とき PUSH POP Q Old SP P SP: Stack Pointer スタック 東大・坂井
4.2 サブルーチンのプログラム sw r1 0(sp) ; レジスタ値の待避(必要なだけ)始め sw r2 4(sp) ....... sw rk 4k(sp) ; レジスタ値の待避終わり add sp 4k+4 call address sub sp 4k+4 lw r1 0(sp) ; レジスタ値の復帰始め lw r2 4(sp) ..... lw rk 4k(sp) ; レジスタ値の復帰終わり もとの仕事の続き ............. body of subroutine ...... ...... ret call: 戻り番地をスタックに積んで、addressへ ジャンプ ret: スタックから戻り番地をPCに戻す address: 注. 戻り番地の待避は特定のレジスタ上にしてもよい。 この場合、ひとつ前の戻り番地をスタックに積む 東大・坂井