狠狠撸

狠狠撸Share a Scribd company logo
计算机理论入门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
練習問題
?   ニモニックとは何か説明しなさい。
?   高級言語とアセンブラ言語の違いは何か。
?   高級言語を数個例示し、その特徴を述べよ。
?   レジスタを説明しなさい。
?   両手の指でいくつまで数えられるか?

More Related Content

计算机理论入门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 ? 終わり 不 定 不 能 結果の出力 終わり
  • 7. プログラミングとは ? 処理したいことを、 計算機が実行(計算)できるように 計算機の言葉で、論理的に述べること ? 次のフェーズからなる – 問題の提起 – 解決方法の考案 – フローチャートの作成 – プログラムの作成 – デバッギング – 記 録
  • 8. (電子)計算機 (Computer) と電卓 (Calculator) ? プログラム内蔵(記憶)方式  Stored Program System ? 電卓と計算機の違い – プログラム自身を計算機 ( メモリ ) に記憶すること – 処理の高速化 ? von Neumann が提唱 ? 高級な「プログラマブル電卓」は電子計算機の範疇に入 る
  • 9. プログラミング言語 ? 機械語 (machine language マシン語 ) ? アセンブラ言語 (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. 練習問題 ? ニモニックとは何か説明しなさい。 ? 高級言語とアセンブラ言語の違いは何か。 ? 高級言語を数個例示し、その特徴を述べよ。 ? レジスタを説明しなさい。 ? 両手の指でいくつまで数えられるか?