37
命令:コンピュータの言葉 Arch 2016年春 輪講 ya-y

命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

命令:コンピュータの言葉

Arch2016年春 輪講ya-y

Page 2: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

前提として

・C及びJavaの変数に対応するレジスタ →$s0, $s1,…・プログラムをMIPSの命令にコンパイルするために必要な一時レジスタ→$t0,$t1,…

Page 3: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

前提として

•  ハードウェアの設計に関する基本原則は3つ 1、単純性は規則性につながる。 2、小さければ小さいほど高速になる。 3、優れた設計は適度な妥協が必要。

Page 4: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

コンピュータ内での命令表現

Page 5: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

コンピュータ内での命令表現

•  命令は高と低の電気信号系列で保持されるので、数値として表現可能。

•  命令を構成する信号一つ一つは一個の数値

とみなすことができる。→つまり、数値を並べたものも命令とみなすことができる。

Page 6: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

コンピュータ内での命令表現

MIPSのアセンブリ言語では、・レジスタの$s0から$s7は→レジスタ16から23に対応

・レジスタの$t0から$t7は→レジスタの8から15に対応

Page 7: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

コンピュータ内での命令表現

このような命令は

10進数なら

2進数なら

このような枠取りを命令形式(instrucConformat)と呼ぶ。

MIPS命令の長さはちょうど32ビットである。

Page 8: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

コンピュータ内での命令表現

•  命令を数値で表したものをアセンブリ言語と区別して機械語(machinelanguage)

 → これらの命令を連ねたものマシンコード・ コンピュータのデータ・サイズは4の倍数 →16進数が採用されている。 → 2進数を4ビットごとに区切って16進数に置き換えれば簡単に変換可能

Page 9: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

コンピュータ内での命令表現

2進数と16進数の対応表

Page 10: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

MIPSのフィールド

それぞれのフィールドに名前が付いている

・op: 命令操作コード(opcode)→命令の基本操作・rs:第1のソース・オペランドのレジスタ・rt:第2のソース・オペランドのレジスタ・rd:デスティネーション・オペランドのレジスタ。結果を収める先・shamt:シフト量・funct:機能コード→機能、命令操作フィールドのバリエーションを表す。

Page 11: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

設計原則の3

•  優れた設計には適度な妥協が必要である。MIPSの設計者が選択したのは・・・→全ての命令長を同じに保つこと結果・・・→命令の種類によって命令形式が異なる場合が存在する。

Page 12: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

解決策

先ほど示した命令形式がR形式(レジスタ用)解決策→I形式即値及びデータ転送命令用であり、下記のフィールド形式をとる。

Page 13: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

例えば

lw$t0,32($s3)#A[8]が一時レジスタ$t0に代入されるこの場合`rtフィールド`は転送されるデータを受け取るデスティネーション・レジスタ(desCnaConregister)

Page 14: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

R形式とI形式の区別の仕方

最初のフィールドの値によって区別される。

Page 15: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

論理演算

Page 16: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

シフト(shiT)

•  後中の全てのビットを左右にずらして開いた部分に0を詰める操作

Page 17: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

シフト(shiT)

•  R形式におけるshamtはshiTamoutの略 → シフトする量を表す↑上記の例では

sll$t2,$s0,4# レジスタ$t2=レジスタ$s0<<4ビット

ShiTleTlogical(sll)なので4ビット左にシフトする

Page 18: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

条件判定用の命令

Page 19: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

条件判定用の命令

•  プログラミング言語ではif文など →MIPSのアセンブリ言語では条件判定用の命令が二つ用意されている。1.  beqregister1,register2,L1 →レジスタ1と2が等しい時にL1にプログラム実行の流れを分岐 (branchifequal)の略

2.  bneregister1,register2,L1 →レジスタの1と2が等しくない時にL1にプログラム実行の流れを分岐   (branchifnotequal)の略

Page 20: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

ループ

•  条件判定の重要な2つの局面

1.  If文においてどちらの処理を選択するか

2.  ループにおける繰り返し制御どちらも同じアセンブラ命令を用いて制御を行う。

Page 21: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

forループの判定

•  値が0よりも小さいかそうでないかアセンブリにおける比較のための命令setonlessthan命令(slt)→Ex)slt$t0,$s3,$s4 # $s3が$s4よりも小さい場合に$t0を1に設定即値版のsetonlessthan命令(slC)→Ex)slC$t0,$s2,10#$s2が10よりも小さい場合.$t0を1に設定

Page 22: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

MIPSコンパイラの条件判定

・ slt,slC,beq,bneの命令・ 「等しい」「等しくない」「より小」「以下」「より大」「以上」が判定可能。

Page 23: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

case文,switch文

•  If-then-elseをつなげる方法

•  ジャンプ・アドレス・テーブル(jumpadresstable)を使う

 →それぞれの処理のアドレスをテーブル化 →そのどれを取るかを示すインデックスに従って該当処理にジャンプする

Page 24: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

ジャンプ・レジスタ命令(jumpregister:jr)

•  ジャンプアドレステーブルを利用するための命令

 →該当するアドレスをレジスタにロード →レジスタ中のアドレスを使用してジャンプ

Page 25: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

コンピュータ・ハードウェア内での手続きのサポート

Page 26: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

手続き、関数

•  プログラムを構成する方法の一つ<メリット>・可読性の向上・コードの再利用が可能手続き→プログラマはタスクの一部だけに専念できる

Page 27: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

手続きとはスパイのようなものである

•  秘密裏に計画を立て、情報を入手•  仕事を遂行•  自分の足跡を消す•  要求された結果を手元に元の場所に戻ってくる•  使命をかんすいした後に何の痕跡も残してはならな

い•  「知る必要」のみに基づいて活動する。•  自分の雇い主に関して想定を行うことはできない。

Page 28: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

手続き

•  ソフトウェアにおいて抽象化を実現

1.  手続きからアクセスできる場所にパラメータを置く2.  手続きに制御を移す3.  手続きに必要なメモリ資源を入手する4.  必要なタスクを実行する5.  呼び出し元のプログラムからアクセスできる場所に結果を

置く6.  制御を元の位置に戻す.

Page 29: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

手続き

•  コンピュータにデータを保持する場所としてはレジスタが最高速

 →可能な限りレジスタを使用したい・$a0-$a3:4本の引数レジスタ.パラメータを渡すために使用・$v0-$v1:2本の値レジスタ.結果の値を返すために使用・$ra:1本の戻りアドレス・レジスタ.制御を元に戻すために使用

Page 30: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

アセンブリ言語:手続き専用命令

ジャンプ&リンク命令(Jump-and-link)命令→アセンブリ:jal [手続きのアドレス]•  アドレスにジャンプする•  次の命令のアドレスをレジスタ$raに退避する命

令歴史的な経緯上、このレジスタはプログラムカウンタと呼ばれることが多い。

Page 31: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

さらに多くのレジスタを使用する場合

•  レジスタをスピル・アウトする →理想はスタック(stack)1.手続きがジャンプした処理の直後のアドレスをスタックに積む2.ジャンプ先のアドレスに実行の流れを移す3.処理が終わったらスタックに積んであったアドレスにジャンプして続きの手続きを実行する。

Page 32: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

入れ子にされた手続き

•  レジスタの$a0の使用に関して競合が発生•  同様にレジスタ$raの中の戻りアドレスも競合

Page 33: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

解決策

・保存されるべき他の全てのレジスタをスタック上にプッシュ(push)すること手続きの呼びだしの間に保持されるもの

Page 34: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

新しいデータ用のスペースのスタック上での割り当て

•  手続きないの変数であるがレジスタに割り付けられないものを格納するためにスタックが使用される。

→Ex)配列・データ構造

Page 35: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

新しいデータ用のスペースのスタック上での割り当て

•  手続きフレーム(アクティベーション・レコード) 

Page 36: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

新しいデータ用のスペースのヒープ上での割り当て

•  Cプログラマは静的変数及び動的なデータ構造のためのメモリを必要とする。

•  リンクト・リストのようなデータ構造は使用中に伸縮する。

 →ヒープと呼ばれる

Page 37: 命令 コンピュータの言葉 - web.sfc.keio.ac.jpweb.sfc.keio.ac.jp/~s15904sy/reading/patahene2.pdfコンピュータ内での命令表現 • 命令を数値で表したものをアセンブリ言語と

MIPSのレジスタ使用規約

目的:一般的な場合を高速化する