参考
回路図書くの大変だったけど、マイコンにちょっと興味が湧いた。
これまた良い本でした。
コンピュータの3大原則
1, コンピュータは、入力、演算、出力を行う装置である
2, プログラムは命令とデータの集合体である
3,コンピュータの都合は人間の感覚と異なる場合がある
基本はCPU・メモリ・I/Oの3つ
基本動作は
- CPUはクロックジェネレーターが生成するカチカチという信号に合わせて、メモリやI/Oからデータを読み込む。
- CPUが読み込んだデータを解釈し、演算する。
- 演算結果をCPUからメモリ・/Oに出力する。
■機器の説明
CPU:メモリー・I/OのデータをCPUに入力し、内部で演算を行い、結果をメモリー・I/Oに出力する。レジスタという記憶素子も持つ。
メモリ:命令+データの記憶装置
I/O:周辺機器からのデータ入力(IN)と周辺機器へのデータ出力(OUT)。レジスタを持つ。
※レジスタについて 最も高速な記憶素子。
回路図
ディップスイッチの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について
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ランプへの出力データ
回路図と機械語とアセンブリ言語
命令の内容は
機械語
アドレス 機械語 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になる。
回路図で表現すると
- MREQがON
- A0~A7が00000000
- D0~D7が00111110
- A0~A7が00000001
- D0~D7が11001111
- IQRQがON
- A0~A7が00000010
- D0~D7が11010011
- A0~A7が00000011
- D0~D7が00000010
多分こういう流れになると思う。
XMLとはなんぞや
Extensible Markup Language。
マークアップ言語とはタグによる意味付け言語
<>タグによって意味づけすることをマークアップという。
この意味付けをする言語がマークアップ言語。
HTMLもマークアップ言語。
HTMLとXMLの違いはタグが固定か拡張可能か
HTMLは<body><head>
など決められたタグしか使えない「固定的なマークアップ言語」。
XMLは「拡張可能なマークアップ言語」でタグは何を使っても良い!<abc>
でも<xxx>
でも好きにタグを作れる。
XMLはメタ言語
どんなタグを使っても良いということは、どんな使い方をしても良いということ。
つまり新しいマークアップ言語を作れる。
言語を作るための言語を「メタ言語」という。
XMLは情報に意味付けをする
自由にタグを作れるって言っても、一体XMLは何をするものなの?
情報に意味付けをする。
情報に意味付けをするとはいったい・・・。
下記のHTMLとXMLを見比べてほしい。
HTML
<body> <p>リン</p> <p>10</p> </body>
<cat> <name>リン</name> <age>10</age> </cat>
HTMLでは「リン」と「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まとめ
<>内のタグは何でも良い!ので自由に新しいマークアップ言語を作れるということ。
目的としては、データに意味付けをすること。
<catName>リン</catName>
と書いて「リン」はcatNameですよとコンピュータに伝える。