okinawa

勉強メモ

コンピュータはなぜ動くのか読んだメモ

参考

回路図書くの大変だったけど、マイコンにちょっと興味が湧いた。

これまた良い本でした。 www.nikkeibp.co.jp

コンピュータの3大原則

1, コンピュータは、入力、演算、出力を行う装置である

2, プログラムは命令とデータの集合体である

3,コンピュータの都合は人間の感覚と異なる場合がある

基本はCPU・メモリ・I/Oの3つ

基本動作は

  1. CPUはクロックジェネレーターが生成するカチカチという信号に合わせて、メモリやI/Oからデータを読み込む。
  2. CPUが読み込んだデータを解釈し、演算する。
  3. 演算結果をCPUからメモリ・/Oに出力する。

■機器の説明

  • CPU:メモリー・I/OのデータをCPUに入力し、内部で演算を行い、結果をメモリー・I/Oに出力する。レジスタという記憶素子も持つ。

  • メモリ:命令+データの記憶装置

  • I/O:周辺機器からのデータ入力(IN)と周辺機器へのデータ出力(OUT)。レジスタを持つ。

レジスタについて 最も高速な記憶素子。

e-words.jp

回路図

ディップスイッチのON / OFFでLEDランプの点灯/消灯をする回路です。

5V=2進数の1。0V=2進数の0。になるようで。

回路図
回路図

うーん、画像が小さくてテキストが読めない・・・。

■機器の説明

  • クロックジェネレーター:クロック信号を生成するための回路。中に水晶が入っているらしい。

  • 3ステートバスバッファ:BUSリクエストがONのときにディップスイッチからメモリに書き込める。OFF時は遮断

  • ディップスイッチ

  • LEDランプ

※BUSリクエストについて

ONにするとCPUが電気的に切り離される。

CPUを介さずにメモリ読み書きをする時用。

BUS(バス)はCPUに繋がっている配線のこと。

■ピンの略号

  • A0~A15:アドレス入出力。
  • D0~D7:データ入出力。0~7の8ビット=1バイトが、一度に入出力できるデータ量。
  • MREQ:メモリ接続要求
  • IQRQ:I/O接続要求
  • B/A:I/OのB or Aレジスタの選択
  • C/D:I/OのControll or Dataレジスタの選択

※B/A・C/Dについて

I/Oのレジスタ指定用。I/Oのレジスタは4つ。

Acontrol / Adata / Bcontrol / Bdata

この4つの切り替えをB/A・C/Dの電圧切替で行う。

■I/Oレジスタのアドレスと役割

  • (0)番ポート=Aポートデータレジスタ。Adata。
  • (1)番ポート=Bポートデータレジスタ。Bdata。
  • (2)番ポート=Aポート制御レジスタ。Acontroll
  • (3)番ポート=Bポート制御レジスタ。Bcontroll

  • Aポートデータレジスタ=ディップスイッチからの入力データ

  • Bポートデータレジスタ=LEDランプへの出力データ

回路図と機械語アセンブリ言語

同じ命令を機械語アセンブリ言語、回路図で表現してみる

命令の内容は

  1. CPUのAレジスタに207という値を書き込む
  2. Aレジスタの値をI/Oの(2)番ポートレジスタに書き込む

機械語

アドレス        機械語
00000000        00111110 // 00111110=LD命令
00000001        11001111 // 11001111=10進数の207
00000010        11010011 // 11010011=OUT命令
00000011        00000010 // 00000010=10進数の2=I/Oの(2)番ポート指定

※命令かデータかの判断はどうやってするの?

命令は予め決められている。

上記の例だと、00111110はLD命令と決められていて、CPUが命令だなと解釈して実行する。

11001111は命令ではないので、207というデータだなと解釈する。

アセンブリ言語

ラベル    オペコード    オペランド
             LD         A, 207 // CPUのAレジスタに207を読み込む
             OUT       (2), A // I/Oの(2)番ポート=AポートControllレジスタにAレジスタの値を書き込む

機械語アセンブリ言語

アドレス        機械語              ラベル    オペコード    オペランド
00000000        00111110  11001111             LD          A, 207
00000010        11010011  00000010             OUT        (2), A

アセンブリ言語の主な命令

  • 演算命令:ADD(加算)・SUB(減算)

  • メモリとCPUの入出力命令:LD(メモリから読み込んでCPUレジスタに書き込む)この命令の時にMREQがONになる。

  • I/OとCPUの入出力命令:IN(I/Oレジスタから読み込んでCPUレジスタに書き込む)・OUT(CPUレジスタからI/Oレジスタに書き込む)これらの命令の時にIORQがONになる。

回路図で表現すると

  1. MREQがON
  2. A0~A7が00000000
  3. D0~D7が00111110
  4. A0~A7が00000001
  5. D0~D7が11001111
  6. IQRQがON
  7. A0~A7が00000010
  8. D0~D7が11010011
  9. A0~A7が00000011
  10. D0~D7が00000010

多分こういう流れになると思う。

XMLとはなんぞや

Extensible Markup Language。

XMLマークアップ言語。

マークアップ言語とはタグによる意味付け言語

<>タグによって意味づけすることをマークアップという。

この意味付けをする言語がマークアップ言語。

HTMLもマークアップ言語。

HTMLとXMLの違いはタグが固定か拡張可能か

HTMLは<body><head>など決められたタグしか使えない「固定的なマークアップ言語」。

XMLは「拡張可能なマークアップ言語」でタグは何を使っても良い!<abc>でも<xxx>でも好きにタグを作れる。

XMLメタ言語

どんなタグを使っても良いということは、どんな使い方をしても良いということ。

つまり新しいマークアップ言語を作れる。

言語を作るための言語を「メタ言語」という。

XMLは情報に意味付けをする

自由にタグを作れるって言っても、一体XMLは何をするものなの?

情報に意味付けをする。

情報に意味付けをするとはいったい・・・。

下記のHTMLとXMLを見比べてほしい。

HTML

<body>
  <p>リン</p>
  <p>10</p>
</body>

XML

<cat>
  <name>リン</name>
  <age>10</age>
</cat>

HTMLでは「リン」と「10」が何を意味するかわからない。

XMLでは猫の名前「リン」で歳が「10」だと意味がわかる。

これが意味づけ。

XML名前空間

タグの名前は自由に作れるので、他の誰かが作ったタグと名前がかぶってしまうかもしれない。

例えば<name>でも人の名前という意味付けをした人、猫の名前という意味付けをした人がいるかもしれない。

そんな時に同じタグを区別するために名前空間を使う。

Namespaces in XML。「xmlns="名前空間"」と書く。

<?xml version="1.0" encoding="UTF-8"?> //←XML宣言
<cat xmlns="https://blog.hatena.ne.jp/dodosu/dodosu.hatenablog.jp"> // ←名前空間
  <name>リン</name>
  <age>10</age>
</cat>

通常は上記のようにURLを名前空間として使用する。絶対にかぶらないから。

区別できるならURLじゃなくても何でも良い。

XMLはコンピュータが見るもの、HTMLは人が見るもの

HTMLはレンダリングしてブラウザに表示して人が見るもの。

XMLはコンピュータが見て意味を解釈するもの。

リンはcatのnameですよ。10はcatのageですよ。ということをコンピュータに伝えている↓

<?xml version="1.0" encoding="UTF-8"?> //←XML宣言
<cat>
  <name>リン</name>
  <age>10</age>
</cat>

XMLからDOM操作でデータを取得

XMLからデータ取得する方法は色々あるようだけど、馴染み深いDOM操作の例をば。

<?xml version="1.0" encoding="UTF-8"?> 
<cat>
  <name>リン</name>
  <age>10</age>
</cat>

上記のXMLから取得する例。

String catName = cat.name;
int catAge = cat.age;

こんな感じでDOM操作で読み込む。

大体どの言語でもXMLをDOMで読み込むコンポーネントがあるらしい。

まとめ

コンピュータの基本まとめ

コンピュータは、入力、演算、出力を行うもの。

プログラムは命令とデータの集まり。

コンピュータの基本構成はCPU、メモリ、I/Oの3つ。

CPUは頭脳、メモリは記憶装置、I/Oは周辺機器との接続。

メモリ or I/O からCPUにデータと命令が入力され、CPUが演算し、結果をメモリ or I/Oに出力する。

XMLまとめ

XMLマークアップ言語を作るメタ言語

<>内のタグは何でも良い!ので自由に新しいマークアップ言語を作れるということ。

目的としては、データに意味付けをすること。

<catName>リン</catName>と書いて「リン」はcatNameですよとコンピュータに伝える。