2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「コンピュータはなぜ動くのか」メモ②

2
Posted at

メモ②

〜〜〜〜〜〜〜〜
第3章:一度は体験してほしいハンド・アセンブル

・ハンド・アセンブル = アセンブリ言語でプログラムを記述し、手作業でプロセサが直接実行できる「マシン語」に変換する作業

・プログラムを作成するのに必要となるハードウェアの情報
  →【CPU】CPUの種類(CPUの種類が異なれば同じマシン語でも解釈が異なる)
  →【CPU】クロック信号の周波数
  →【メモリ】アドレス空間
  →【メモリ】1つのアドレスに記録できる情報のビット数
  →【I/O】I/Oの種類
  →【I/O】アドレス空間
  →【I/O】接続されている周辺装置

*クロック信号の周波数 = クロック・ジェネレータからCPUに与えられる電気信号の周波数
マシン語は、命令の種類によって実行に要するクロック数が決まっている。
クロック信号は0と1の変化を繰り返す電気信号。

・メモリのアドレス空間 = メモリの中にあるデータの格納場所を指定するアドレスの範囲のこと
・接続されているI/Oの種類 = マイコンと周辺装置を接続するI/Oの種類のこと
・I/Oのアドレス空間 = I/Oのレジスタを指定するアドレスの範囲のこと

*メモリはどの番地でも命令やデータを記録するという同じ役割を持っているが、I/Oは番地が異なる(=レジスタが異なる)と役割が違ってくる

・マシン語のプログラムは0と1の羅列なので、人間には判断できない。
そこで、0と1のられるにその機能を表す英語に似たニックネーム(=ニーモニック)をつけてプログラムを作成する手法が考案された。 →ニーモニックを使ってプログラミングする言語を「アセンブリ言語」とよぶ。

・CPUの中のデータを記録する場所が「レジスタ」。演算もする。
  →Aレジスタ(アキュムレータ) = 演算の中心
  →Fレジスタ(フラグ・レジスタ) = 演算結果によって桁上がりが発生したことや大小比較の結果などが記録される。
  →PCレジスタ(プログラム・カウンタ) = CPUが次に実行する命令のメモリーアドレスが格納される。クロック信号によって自動的に更新されるようになっている。
  →SPレジスタ(スタック・ポインタ) = メモリ上に「スタック」というデータの一時記録領域を作成するために使われる。

・Little endian = データの下位から上位の順でメモリに格納する形式
・Big endian = データの上位から下位の順でメモリに格納する形式

第4章:川の流れのようにプログラムは流れる
・プログラムの流れ → 順次進行(下位アドレス/小さい番地から上位アドレス/大きい番地)、条件分岐、繰り返し
・プログラムの流れを図示したもの → フローチャート

・構造化プログラミング = 「プログラムの流れを順次進行・条件分岐・繰り返しだけで表し、ジャンプ命令を使わないようにする」(高水準言語にはジャンプ命令が不要?)

・Algorithm = 与えられた問題を解く手順のこと

・特殊なプログラムの流れ
 →割り込み処理 = プログラムの特定の部分に、突然プログラムの流れをジャンプさせること。ハードウェア的にはCPUに接続されたI/Oから割り込み要求信号を受け付けるもの。ただし、プログラムの中に割り込みを記述する必要はんく、ROMに記録BIOSやOSが持っている。

 →イベント・ドリブン = GUI環境用のプログラムでよく利用される。イベント(マウスクリック、キーボード押す)の種類に応じて処理を行う。

第5章:アルゴリズムと仲良くなる7つのポイント

■アルゴリズムを考えるポイント
 ①問題を解く手順が明確で有限回である
 ②勘に頼らず機械的に問題が解ける(頭を使うことなく手順通りにやれば必ずできる)
 ③定番アルゴリズムを知り応用する
 ④コンピュータの処理スピードを利用する
 ⑤スピードアップを目指して工夫する
 ⑥数値の法則性を見いだす
 ⑦紙の上で手順を考える(≒フローチャート)

第6章:データ構造と仲良くなる7つのポイント

①メモリと変数の関係を知る
②データ構造の基本が配列であることを知る
③定番アルゴリズムのデータ構造として配列を使うことを知る
④定番データ構造の種類を知り、イメージをつかむ
  →スタック(データを山のように積み上げる、LIFO)
  →キュー(データを行列のように並ばせる、FIFO)
  →リスト(データの並びを任意に変更できる)
  →2分木(データの並びを二またに分ける)
⑤スタックとキューの実現方法を知る
  →スタックの実現方法:スタックのサイズを要素数とした配列と、スタックの最上部に格納されたデータのインデックスを表す変数(スタック・ポインタ)を宣言する。必要な関数は、格納する関数(push)と取り出す関数(pop)。
  →キューの実現方法:任意のサイズの配列、キューの先頭のデータのインデックスを表す変数、キューの末尾のデータのインデックスを表す変数、およびキューにデータを格納する関数(Set)とキューからデータを取り出す関数(Get)のペアが必要。
⑥構造体の仕組みを知る
 ・構造体とは = 複数のデータを一つにまとめて名前をつけたもの
⑦リストと2分木の実現方法を知る
 →リスト:簡潔に言うとつながりのデータ。リストがない場合、メモリ上の物理的な順序そのものを並べ替える必要がある(=処理時間が長くなる)

〜〜〜〜〜〜〜〜

続きはメモ③にて。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?