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

Similar documents
計算機アーキテクチャ

コンピュータ工学Ⅰ

PowerPoint プレゼンテーション

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

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

-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

PowerPoint プレゼンテーション

Microsoft PowerPoint - Chap4 [Compatibility Mode]

ガイダンス 2

UNIX 初級講習会 (第一日目)

情報科学概論

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

PowerPoint プレゼンテーション

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

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

PowerPoint プレゼンテーション

Microsoft PowerPoint - Sol7 [Compatibility Mode]

Microsoft PowerPoint - 3.3タイミング制御.pptx

Microsoft PowerPoint ppt

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

プログラミング基礎

PowerPoint プレゼンテーション

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

020105.メモリの高機能化

PowerPoint Presentation

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

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

計算機アーキテクチャ

ex05_2012.pptx

スライド 1

Microsoft PowerPoint - ProcML-12-3.ppt

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

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

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

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

VelilogHDL 回路を「言語」で記述する

Microsoft PowerPoint - OS07.pptx

スライド タイトルなし

Microsoft PowerPoint - NxLec ppt

Microsoft PowerPoint - Chap3 [Compatibility Mode]

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

目次 1 I2Cとは 13 結線写真 2 センサの多くがI2Cに対応 14 WHO_AM_I 3 マイコンでのI2C通信例 15 I2C読込みプログラム 4 とは 16 I2C読込みスクリプト概要① 5 タイミングパラメータ 17 I2C読込みスクリプト概要② 6 書込み 18 センサ読込みプログラ

スライド 1

回路 7 レジスタ ( 同期イネーブル及び非同期リセット付 ) 入力データを保持するのに用いる記憶素子 使用用途として, マイクロプロセッサ内部で演算や実行状態の保持に用いられる Fig4-2 のレジスタは, クロック信号の立ち上がり時かつ 信号が 1 のときに外部からの 1 ビットデータ R をレ

プログラミング実習I

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Transcription:

Copyright 守屋悦朗 2005 コンピュータの仕組み (1) ハードウェア 2.1 CPU の基本原理 2 つの整数の和を出力するプログラムを考えよう main() { int a, b, c; /* 変数 a,b が整数値をとる変数であることを宣言する */ a = 1; /* a に 1 を代入する */ b = 2; /* b に 2 を代入する */ c = a+b; /* a と b の和を c に代入する */ cout << c; /* c の値を出力する */ } コンピュータは このプログラムをそのまますぐに実行できるわけではない このプログラムは人間にとって理解し易い汎用高級言語 ( この例ではC++ 言語 ) で書かれたものであり コンピュータが直接認識して実行することはできない そのため コンパイラ (compiler) と呼ばれるプログラムによって コンピュータが直接理解して実行できる形の命令 ( 機械語命令 (machine instruction) と呼ばれ 対応するハードウェア的機構ないしはそれに近いものが存在するもの ) の列に翻訳する 1つの機械語命令は 命令の種類とその作業対象となるデータの入っている場所 ( アドレス ) などを 0,1 で表現したものであり このような機械語命令の列を機械語プログラムという 機械語 (machine language) は単に 0,1 の列であるが より人間に分かりやすいように記号化したものをアセンブリ言語 (assembly language) という X と Y の和を Z に代入するプログラム 機械語 (8080A) アセンブリ言語 (8080A) 汎用高級言語 00111011 LDA X Z=X+Y (FORTRAN) 00000000 LXI H,X COMPUTE Z=X+Y. (COBOL) 10000000 ADD M z:=x+y; (PASCAL) 10000000 STA Z Z X+Y (APL) 00100001 (SETQ Z (+ X Y)) (LISP) 00000001 Z=X+Y; (PL/I)

10000000 ADD M _z is _x+_y (Prolog) 00110010 STA Z z=x+y; (C) 00000010 10000000 高級言語と違い 機械語の仕様はCPU( すなわち 機種 ) ごとに異なっている 上の例に用いたのは インテル社製の 8080A と呼ばれるMPUの機械語である (8080A はマイコンが出現した当初の 8 ビットマシン MPU=micro processor unit=マイコンのcpu) 通常 機械語命令の種類 ( 命令セット ) は 100 個から 200 個くらいあり ( 命令の種類が複雑で多種な CISC 型コンピュータ (complex instruction set computer) と 命令を単純にして実行効率を向上させた方式の RISC 型コンピュータ (ristricted instruction set computer) とでは命令の数がかなり異なる ) 1つの命令は次のような構造をしている ( 命令によって 長さや形式がかなり異なる ): 1 2 3 命令コード補助情報命令の対象となるアドレスあるいはデータ 1の 命令コード はその命令の名前を 2 進数で表したものであり 3の アドレス部 にはその命令の操作対象となるデータが入っているメモリ ( 主記憶装置 ) のアドレス あるいは使われるデータ自身が入れられる 2( 修飾部 ) には レジスタ番号その他の補助情報が入れられる ( レジスタ (register) とは 演算に使われる少数個の高速メモリのこと ) 参考サイト MIPSの仕様 http://www.is.titech.ac.jp/~ohshima/ta/architecture/matsu/2/index.html 情報処理技術者試験アセンブリ言語 CASLの仕様 http://www.jitec.jipdec.or.jp/1_13download/hani01.pdf http://www.jitec.jipdec.or.jp/ ( 情報処理技術者試験センター ) さて 機械語に翻訳されたプログラムが行うことは次のようになる : 1 int a,b,c; によって主記憶装置上に int( 整数 ) 型変数 a,b,c それぞれのための領 域が確保される

2 a = 1; によって確保された変数 a に int 型の値 1が格納される ( 値 1は 機械語命令自身内に作られ その命令が実行されるか あるいは 主記憶装置内のデータ用領域に作られ それが演算装置を経由して変数に格納される ) 3 b = 2; についても2と同様 4 c = a+b; によって変数 a と b の値は " ロード命令 "( 機械語の命令 ) によって演算装置に渡され " 加算命令 " を使って和がとられ その演算結果が再び " ストア命令 " によって変数 c に格納される 5 cout << c; によって変数 c の値は出力装置 ( 例えば ディスプレイ ) に出力される 例えば 4 を行うためには次の 5 つの機械語命令が実行される : アセンブリ言語による記述 mov dword ptr [a (00428bf4)],1 mov dword ptr [b (00428bf8)],2 mov eax,[a (00428bf4)] add eax,dword ptr [b (00428bf8)] mov [c (00428bfc)],eax 定数 1 を a( アト レス 00428bf4) に格納せよ定数 2 を b( アト レス 00428bf8) に格納せよ a の値を演算装置にロート せよ同上演算装置に b の値を加算せよ同上演算装置の値を c( アト レス 00428bc) に格納せよ 対応する機械語命令の列 11000111 00000101 11110100 10001011 01000010 00000000 00000001 11000111 00000101 11111100 10001011 01000010 00000000 00000010 10100001 11110100 10001011 01000010 00000000 00000011 00000101 11111000 10001011 01000010 00000000 10100011 11111100 10001011 01000010 00000000 この機械語 1つ1つが何であるかを解読して 対応する処理を実行するために CPU は 各機械語命令を 命令の読み込み 命令の解読 命令の実行 結果の出力 というステップに分解して実行するというステップを繰り返す ( 下図参照 ) もう少し 細かく言うと 1 命令の読込み ( フェッチ ): プログラムカウンタ ( プログラム内のいくつめの命令を解読実行中であるかを記憶しておくためのメモリ ) が示すアドレスに従い主記憶装置から命令を読み出し 命令レジスタ (1つの命令を格納しておくためのレジスタ レジスタ (register) とは読み書きが高速にできるメモリのこと ) に格納する 次に実行すべき命令を示すようにプログラムカウンタの値を更新する ( 普通は現在実行中の命令の直後の命令

を実行するので 1 を足す ジャンプ命令の場合は 飛び先の命令の番号を入れる ) 2 命令の解読 ( デコード ): 命令レジスタの命令 ( 命令部とアドレス部と修飾部に分けられる ) のうち 命令部をデコーダー (decoder) に渡す デコーダーは渡されたものがどのような命令であるかを解読し 命令を実行するための制御信号を生成し 命令が主記憶装置上のデータを必要とするならば そのアドレスをアドレスレジスタに転送する 3 以下 命令の実行 : アドレスレジスタは インデックスレジスタやベースレジスタ ( これらのレジスタは アドレスを表すためのもので 実際のアドレスは ベースアドレスにインデックスレジスタの値を足したものになる ( アドレスの決め方は方式によって異なり もっと複雑な方式によっている場合もある ) の修飾をうけて 有効アドレスを割り出す 4 有効アドレスの該当アドレスに記憶されているデータをデータバス上に読み出す 5 メモリレジスタ ( メモリからのデータを記憶しておくためのレジスタ ) は データバス上のデータを受け取って記憶する 6 演算が必要なときは演算装置のアキュムレータ ( 演算器 accumulator) に渡す 7 アキュムレータは演算回路を使って演算を行う 8 以下 結果の格納 : アキュムレータは演算回路から演算結果を受け取る 主記憶 装置に格納する場合はいったんメモリレジスタに戻す 9 指定されたアドレスに演算結果を格納する 1 に戻る コンピュータの動作速度 コンピュータ内部のあらゆる処理は 一定の時間幅で同期をとって行われる この同期の幅 ( で時間を割ったもの=クロック ) が動作周波数である 例えば 1クロックが1 秒間に 1000 個であれば 1KHz( キロヘルツ ) 100 万個あれば 1MHz( メガヘルツ ) 10 億個あれば 1GHz( ギガヘルツ ) である このため 動作周波数が大きいほど処理速度が速い パソコンの場合 動作周波数はマザーボード上にある水晶発振器で作り出されるクロック信号をもとに 部品ごとに調整して用いられる CPU 内部での処理は動作周波数に合わせて 1クロックで1つの処理を行う すなわち 1クロック目に命令を読み込み 2 クロック目にそれを解読し 3クロック目に実行を行い 4クロック目に結果の書き込みを行う しかし これらの処理はそれぞれ CPU 内の別々の部分で行われるので 2 クロック目に 1 つ前の命令を解読すると同時に次の命令を読み込むことができ 2 クロック目には 2 つ前の命令を実行すると同時に 1 つ前の命令を解読し次の

命令も読み込むことができ というように同時に4つの処理を並行して行うことができる このような処理方法をパイプライン (pipelining) という ( 下図参照 ) 最近では CPU の内部処理を 4 ステップではなく 8 ステップあるいはそれ以上にしたり ( スーパーパイプライン : superpipelining) フェッチやデコードを複数同時に行い 演算器の数も増やして一度に複数の命令を処理できるようにしたり ( スーパースカラー : susperscalor) して 処理速度を上げることさえ行われている 動作周波数 1Hz 1 クロック =1 秒 1MHz 1 クロック =100 万分の 1 秒 命令処理の基本 1 クロック フデ実書 フ デ 実 書 フ デ 実 命令 4

パイプライン処理 1 クロック 命令 4 フェッチ デコード 実行 フェッチ デコード スーパースカラー処理 (2 命令並列の場合 ) 1 クロック 命令 4 参考ウェブサイト (CPU の動作原理 ) ht tp://sociolab.tamacc.chuo-u.ac.jp/~saizehp/2000zemi/line-p/0515/page4.html

CPU メモリ ( 主記憶装置 ) 命令 i 1 命令 フ ロク ラム データ i やテ ータの 読み込み 計算 2 計算 結果 データ 1 テ ータ領域 3 計算結果 の書き込み データ 2 上図 (CPU における命令の解読 実行サイクル ) の流れについては http://www.em.edu.waseda.ac.jp/~moriya/education/cai/infomath3/cpu.ppt を実行し てみよ 参考書 : 浦昭二 市川照久 情報処理システム入門 ( 第 2 版 ) 第 2 章 サイエンス社 1998. 田辺皓正 8086マイクロコンピュータ 丸善 1983. 小黒正樹 マイコン入門講座 廣済堂 1980.