計算機理論入門2

      2012 年度後期
        垂水共之
tarumi@ems.okayama-u.ac.jp
          20121003
計算機から情報処理装置へ
• 日本語ワープロやゲームマシン( PS3, Wii )のように計
  算(を主な仕事と)しない計算機が増えてきており、最
  近は「計算機」と呼ぶより、「情報処理装置」と呼ばれ
  ることが多くなってきた。
 – iPod は MP3 音楽ファイルの再生機。
 – Kobo など「電子書籍端末」はテキストファイルの再生機。
 – デジタルフォトフレームは jpeg 画像ファイルの再生機。
アルゴリズムとプログラム
• 人間は、「平均値を求めよ」と言われただけで「2つの
  値の和をとり、それを2で割る」という手順を理解し、
  それに従って実行する。
• 計算機は自分で手順を考える能力が無い。このため、人
  間が手順を考え、それを計算機に覚えこませて実行させ
  る。
• この手順のことを「アルゴリズム」という。
• それをある決められた規則(文法)に従って書いたもの
  が
  「プログラム」である。
フローチャート(流れ図)
• アルゴリズム(処理手順)を図式に書き表したもの
  – (1)問題を設定し、解析し、プログラムを書く手順を決める
    段階で、論理的手順をはっきりさせる。
  – (2)細かい部分を正確に把握すると同時に、全体を把握する
    。
  – (3)プログラムの処理手順をはっきりと表現する。


• 次の計算を考えてみよう。
  「 a, b, c, a’, b’, c’ を入力して、次の連立方程式の解を求
  める。
      ax + by =c
      a’x+ b’y =c’    」
流れ図の例(連立方程
                                       始まり
        式)
                                 a,b,c,a’,b’,c’
• 上から下へ                          入力



                                  D = a b’ - a’ b
•   始まり
•   入力                     ≠
                                        D= 0
                                                    =

•   処理
•   判断      x = ( c b’ - c’ b) / D
            y = ( a c’ - a’ c) / D                      a’ c = a c’
                                                                      No


•   出力                                                         Yes

•   終わり                                                  不 定               不 能




                                     結果の出力




                                       終わり
フローチャートに使われる主な記号
プログラミングとは
• 処理したいことを、
  計算機が実行(計算)できるように
  計算機の言葉で、論理的に述べること

• 次のフェーズからなる
 –   問題の提起
 –   解決方法の考案
 –   フローチャートの作成
 –   プログラムの作成
 –   デバッギング
 –   記 録
(電子)計算機 (Computer) と電卓 (Calculator)
• プログラム内蔵(記憶)方式  Stored Program System

• 電卓と計算機の違い
  – プログラム自身を計算機 ( メモリ ) に記憶すること
  – 処理の高速化


• von Neumann が提唱

• 高級な「プログラマブル電卓」は電子計算機の範疇に入
  る
プログラミング言語
• 機械語 (machine language マシン語 )

• アセンブラ言語 (Assembler language)

• 高級言語

• 4 GL  第 4 世代言語

• スクリプト言語
機械語
• 計算機は高速に演算を処理するが,一時点をとれば一つ
  の操作しかしていない。
• 計算機の理解できる基本的な操作を「命令」 (operation)
  とか、「機械語」とか言う。
• 「機械語」は計算機の機種(正確にはCPU)ごとに異
  なっており,どのような操作ができるかは個々の機種に
  ついて調査しなければならない。
• プログラムはこの基本的な命令の一連の並びで作られ,
• 計算機は記憶している命令を上から順に実行していく
  (逐次制御  automatic sequential control )だけである。
機械語の例
• A+B を求め結果を C に格納する.
 –   [1]  1100 | 01 | 00 | 00000001
 –   [2]  1010 | 01 | 00 | 00000010
                  い
 –   [3]  1101 |く | 00 | 00000011
              に 01
            え  覚
                読み  にくい              直し!
                                  ら覚え
 –   頭の4ビット 命令を区別する
                               わった
                        U ) が変
     次の 2 ビット  4 本の算盤(レジスタ)のうち、どの算盤を使
                   械 (CP
 –
     うか           機

 – [1]  レジスタ register に後の方で指定された場所の値をもって
   くる。
 – [2]  現在そろばんに置かれている値に後の方で指定された場所
   の値をもってきて加える。(A+Bの値が求まる。)
 – [3]  そろばんに置かれている値(A+Bの値)を後の方で指定
   された場所に格納する。
アセンブラ言語 (Assembler language)
• 0,1の組合せの暗号の機械語を人間が憶えることは至
  難の業である。このため,人間が憶えやすい言葉で書く
  ための言語として「アセンブラ言語」がある。アセンブ
  ラ言語は命令のパタ-ンを憶えやすい記号(ニモニック
    mnemonic )で表現できる。

• アセンブラ言語の例
• A+B を求め結果を C に格納する.
 –          LD    1,A
 –          ADD   1,B
 –          ST    1,C
アセンブラーとアセンブリング
• アセンブラ言語で記述したプログラムは「アセンブラ」
  と呼ばれる特別のプログラムが例1の機械語に変換して
  くれる。
• この変換を「アセンブリング」という。
• アセンブラ言語のニモニックは機械語と1対1に対応し
  ており,機種(正確にはアセンブラ)によって異なる点
  は機械語と同じである。
• 同じ機種に複数のアセンブラ言語がある場合もある。
 – あるアセンブラでは load をLDと書くし、
 – 別のアセンブラではLOADと書くものもある。
                アセンブラ
  LD   1,A               1100010000000001
                                            Load,   Store を区別
                                            せずに
                                            MV Move
               アセンブリング                      で表すものもある。
高級言語
• アセンブラ言語の機種依存性から脱却し,より日常用い
  る言葉,数式に近い形でプログラムが記述できる言語と
  して下記のような高級言語が開発されている。

• FORTRAN  Formula Translation
• COBOL    Common Business Oriented Language
• ALGOL    Algorithmic Language
• PL/I     Programming Language One
• BASIC    Beginner's All Purpose Symbolic
  Instruction Code
• APL      A Programming Language
• PASCAL   (フランスの科学者パスカルの名前
  より命名)
• C             ? ( BCPL  →  B  →  C )
コンパイラーとコンパイリング
• 高級言語で書かれたプログラムは、「コンパイ
  ラー」 compiler と呼ばれる特別のプログラムが、機械語
  に変換(翻訳、コンパイル)される。
• この変換、翻訳することを「コンパイリング」という。


                        1100010000000001
                        1010010000000010
                コンパイラ
      C=A+B             1101010000000011




              コンパイリング
              (翻訳)




 「高級言語」 で書かれた 1 行の命令は、複数の機械語へ変換される。
レジスター
• スーパーやコンビニの「レジ係」とは「レジスタ=金銭
  登録機」を操作し、会計をする人のことであるのは衆知
  の通りである。
• 計算機も「計算」はレジスタを使って行う。計算機では
  「レジスタ=算盤」と思えばよい。
• 人間が操作できる算盤や、電卓は1本に限られるが、現
  在の計算機は電卓と異なり、レジスタ(算盤)を複数
  (8本ないし16本)持っているものが多い。
• このためA+Bの計算をどのレジスタを使って行うか陽
  に指示しなければならない。
• 計算機の世界では番号を0から付けることが多く、レジ
  スタ0からレジスタpまでの(p+1)本のレジスタが
  ある。このレジスタ番号を表しているのが機械後の第2
  フィールド、アセンブラ言語のオペランドの第1フィー
  ルドである。
Load  と  Store
• レジスタが16本あっても全
  体の計算ではたかがしれてお
  り、これだけで計算できるわ
  けではなく、中間結果や計算
  に用いる値をメモリに記憶す
  る必要がある。
• メモリは512MB~8GB
  程度を持っている。




• LOAD  メモリの値をレジ
  スタへ
• STORE レジスタの値をメ
  モリへ
両手の指でいくつまで数えられる?(閑話休
         題)
• 両手の10本の指を使っていくつまで数えられるだろう
  か? 1つずつ指を折っていき、10までというのが普
  通だが、「2」の時に親指、人差し指の両方を折る必要
  もなかろう。人差し指だけ折っていれば十分である。で
  は「3」の時は?
• 中指だけを折るか、それとも「1 親指」と「2 人差
  し指」の2本を折るか?これが2進数である。左の親指
  、人差し指、中指、薬指、小指を順に1(=20)、2
  (=21)、4(=22)、8(=23)、16(=24)
  とし、折っている指の数を加えた値を表している。 ( N
 HK パソコン実践セミナー 4月/5月 P29,図4-4より )
コンパイラとインタプリタ
• コンパイラ       compiler
  – 高級言語等で書かれたプログラムは、まとめて機械語に翻訳し
    、翻訳された機械語を一気に実行する。


• インタプリタ  interpreter
  – インタプリタ言語で書かれたプログラムを順次翻訳し、実行す
    る。
  – 例: BASIC


• スクリプト       script
  – 簡単な処理(テキスト処理が多い)を簡単に記述できるように
    したスクリプト言語で書かれたプログラムを順次解釈して処理
    する。
  – インタプリタ言語と基本的な動きは同じであるが、簡単なもの
    をいうことが多い。
  – 例: perl, ruby, python, awk, sed
練習問題
•   ニモニックとは何か説明しなさい。
•   高級言語とアセンブラ言語の違いは何か。
•   高級言語を数個例示し、その特徴を述べよ。
•   レジスタを説明しなさい。
•   両手の指でいくつまで数えられるか?

計算機理論入門02

  • 1.
    計算機理論入門2 2012 年度後期 垂水共之 tarumi@ems.okayama-u.ac.jp 20121003
  • 2.
    計算機から情報処理装置へ • 日本語ワープロやゲームマシン( PS3,Wii )のように計 算(を主な仕事と)しない計算機が増えてきており、最 近は「計算機」と呼ぶより、「情報処理装置」と呼ばれ ることが多くなってきた。 – iPod は MP3 音楽ファイルの再生機。 – Kobo など「電子書籍端末」はテキストファイルの再生機。 – デジタルフォトフレームは jpeg 画像ファイルの再生機。
  • 3.
    アルゴリズムとプログラム • 人間は、「平均値を求めよ」と言われただけで「2つの 値の和をとり、それを2で割る」という手順を理解し、 それに従って実行する。 • 計算機は自分で手順を考える能力が無い。このため、人 間が手順を考え、それを計算機に覚えこませて実行させ る。 • この手順のことを「アルゴリズム」という。 • それをある決められた規則(文法)に従って書いたもの が 「プログラム」である。
  • 4.
    フローチャート(流れ図) • アルゴリズム(処理手順)を図式に書き表したもの – (1)問題を設定し、解析し、プログラムを書く手順を決める 段階で、論理的手順をはっきりさせる。 – (2)細かい部分を正確に把握すると同時に、全体を把握する 。 – (3)プログラムの処理手順をはっきりと表現する。 • 次の計算を考えてみよう。 「 a, b, c, a’, b’, c’ を入力して、次の連立方程式の解を求 める。 ax + by =c a’x+ b’y =c’    」
  • 5.
    流れ図の例(連立方程 始まり 式) a,b,c,a’,b’,c’ • 上から下へ 入力 D = a b’ - a’ b • 始まり • 入力 ≠ D= 0 = • 処理 • 判断 x = ( c b’ - c’ b) / D y = ( a c’ - a’ c) / D a’ c = a c’ No • 出力 Yes • 終わり 不 定 不 能 結果の出力 終わり
  • 6.
  • 7.
    プログラミングとは • 処理したいことを、 計算機が実行(計算)できるように 計算機の言葉で、論理的に述べること • 次のフェーズからなる – 問題の提起 – 解決方法の考案 – フローチャートの作成 – プログラムの作成 – デバッギング – 記 録
  • 8.
    (電子)計算機 (Computer) と電卓(Calculator) • プログラム内蔵(記憶)方式  Stored Program System • 電卓と計算機の違い – プログラム自身を計算機 ( メモリ ) に記憶すること – 処理の高速化 • von Neumann が提唱 • 高級な「プログラマブル電卓」は電子計算機の範疇に入 る
  • 9.
    プログラミング言語 • 機械語 (machinelanguage マシン語 ) • アセンブラ言語 (Assembler language) • 高級言語 • 4 GL  第 4 世代言語 • スクリプト言語
  • 10.
    機械語 • 計算機は高速に演算を処理するが,一時点をとれば一つ の操作しかしていない。 • 計算機の理解できる基本的な操作を「命令」 (operation) とか、「機械語」とか言う。 • 「機械語」は計算機の機種(正確にはCPU)ごとに異 なっており,どのような操作ができるかは個々の機種に ついて調査しなければならない。 • プログラムはこの基本的な命令の一連の並びで作られ, • 計算機は記憶している命令を上から順に実行していく (逐次制御  automatic sequential control )だけである。
  • 11.
    機械語の例 • A+B を求め結果を C に格納する. –  [1]  1100 | 01 | 00 | 00000001 –   [2]  1010 | 01 | 00 | 00000010 い –   [3]  1101 |く | 00 | 00000011 に 01 え 覚 読み にくい 直し! ら覚え – 頭の4ビット 命令を区別する わった U ) が変 次の 2 ビット  4 本の算盤(レジスタ)のうち、どの算盤を使 械 (CP – うか 機 – [1]  レジスタ register に後の方で指定された場所の値をもって くる。 – [2]  現在そろばんに置かれている値に後の方で指定された場所 の値をもってきて加える。(A+Bの値が求まる。) – [3]  そろばんに置かれている値(A+Bの値)を後の方で指定 された場所に格納する。
  • 12.
    アセンブラ言語 (Assembler language) •0,1の組合せの暗号の機械語を人間が憶えることは至 難の業である。このため,人間が憶えやすい言葉で書く ための言語として「アセンブラ言語」がある。アセンブ ラ言語は命令のパタ-ンを憶えやすい記号(ニモニック   mnemonic )で表現できる。 • アセンブラ言語の例 • A+B を求め結果を C に格納する. –          LD 1,A –          ADD 1,B –          ST 1,C
  • 13.
    アセンブラーとアセンブリング • アセンブラ言語で記述したプログラムは「アセンブラ」 と呼ばれる特別のプログラムが例1の機械語に変換して くれる。 • この変換を「アセンブリング」という。 • アセンブラ言語のニモニックは機械語と1対1に対応し ており,機種(正確にはアセンブラ)によって異なる点 は機械語と同じである。 • 同じ機種に複数のアセンブラ言語がある場合もある。 – あるアセンブラでは load をLDと書くし、 – 別のアセンブラではLOADと書くものもある。 アセンブラ LD   1,A 1100010000000001 Load,   Store を区別 せずに MV Move アセンブリング で表すものもある。
  • 14.
    高級言語 • アセンブラ言語の機種依存性から脱却し,より日常用い る言葉,数式に近い形でプログラムが記述できる言語と して下記のような高級言語が開発されている。 • FORTRAN  Formula Translation • COBOL    Common Business Oriented Language • ALGOL    Algorithmic Language • PL/I     Programming Language One • BASIC    Beginner's All Purpose Symbolic Instruction Code • APL      A Programming Language • PASCAL   (フランスの科学者パスカルの名前 より命名) • C ? ( BCPL  →  B  →  C )
  • 15.
    コンパイラーとコンパイリング • 高級言語で書かれたプログラムは、「コンパイ ラー」 compiler と呼ばれる特別のプログラムが、機械語 に変換(翻訳、コンパイル)される。 • この変換、翻訳することを「コンパイリング」という。 1100010000000001 1010010000000010 コンパイラ C=A+B 1101010000000011 コンパイリング (翻訳) 「高級言語」 で書かれた 1 行の命令は、複数の機械語へ変換される。
  • 16.
    レジスター • スーパーやコンビニの「レジ係」とは「レジスタ=金銭 登録機」を操作し、会計をする人のことであるのは衆知 の通りである。 • 計算機も「計算」はレジスタを使って行う。計算機では 「レジスタ=算盤」と思えばよい。 • 人間が操作できる算盤や、電卓は1本に限られるが、現 在の計算機は電卓と異なり、レジスタ(算盤)を複数 (8本ないし16本)持っているものが多い。 • このためA+Bの計算をどのレジスタを使って行うか陽 に指示しなければならない。 • 計算機の世界では番号を0から付けることが多く、レジ スタ0からレジスタpまでの(p+1)本のレジスタが ある。このレジスタ番号を表しているのが機械後の第2 フィールド、アセンブラ言語のオペランドの第1フィー ルドである。
  • 17.
    Load  と  Store •レジスタが16本あっても全 体の計算ではたかがしれてお り、これだけで計算できるわ けではなく、中間結果や計算 に用いる値をメモリに記憶す る必要がある。 • メモリは512MB~8GB 程度を持っている。 • LOAD  メモリの値をレジ スタへ • STORE レジスタの値をメ モリへ
  • 18.
    両手の指でいくつまで数えられる?(閑話休 題) • 両手の10本の指を使っていくつまで数えられるだろう か? 1つずつ指を折っていき、10までというのが普 通だが、「2」の時に親指、人差し指の両方を折る必要 もなかろう。人差し指だけ折っていれば十分である。で は「3」の時は? • 中指だけを折るか、それとも「1 親指」と「2 人差 し指」の2本を折るか?これが2進数である。左の親指 、人差し指、中指、薬指、小指を順に1(=20)、2 (=21)、4(=22)、8(=23)、16(=24) とし、折っている指の数を加えた値を表している。 ( N HK パソコン実践セミナー 4月/5月 P29,図4-4より )
  • 19.
    コンパイラとインタプリタ • コンパイラ compiler – 高級言語等で書かれたプログラムは、まとめて機械語に翻訳し 、翻訳された機械語を一気に実行する。 • インタプリタ  interpreter – インタプリタ言語で書かれたプログラムを順次翻訳し、実行す る。 – 例: BASIC • スクリプト script – 簡単な処理(テキスト処理が多い)を簡単に記述できるように したスクリプト言語で書かれたプログラムを順次解釈して処理 する。 – インタプリタ言語と基本的な動きは同じであるが、簡単なもの をいうことが多い。 – 例: perl, ruby, python, awk, sed
  • 20.
    練習問題 • ニモニックとは何か説明しなさい。 • 高級言語とアセンブラ言語の違いは何か。 • 高級言語を数個例示し、その特徴を述べよ。 • レジスタを説明しなさい。 • 両手の指でいくつまで数えられるか?