-
アセンブリ
- 目的
- マシンコードの抽象化
- ニーモニックコードへの符号化
- ニーモニックコードへの集約
- 複数の Instruction を jmp というニーモニックに集約できる
- ラベルの利用
- マシンコードの抽象化
- 具体例
- nop
- mov rax 42 // rax = 42
- mov rax rbx
- add rax 42 // rax += 42
- 目的
-
アセンブラ
-
リンカ
-
マシンコード
- 目的
- CPUが理解できるコード
- 目的
-
CPU
- 動作
- 1ステップごとに、メモリから「命令データ」を読み出す
- 01101001011101 的な
- メモリ上のどこから読み出すの?
- プログラムカウンタ
- 「命令データ」を命令デコーダが解析する
- 命令を実行する
- 1ステップごとに、メモリから「命令データ」を読み出す
- 命令バイト列
- 計算命令
- 1ステップごとにレジスタから値を取り出し、計算をし、レジスタに値を記録する
- どのレジスタの値を使うか
- どのような計算を行うか
- 掛け算の話すると終わらない
- 掛け算はソフトウェアでやってることにする
- 掛け算の話すると終わらない
- どのレジスタに結果を保存するか
- ↑のような情報をバイナリ列で表現する
- RISC-VのISA仕様書 2-4章
- レジスタ上の値のみ計算に使える
- ロード命令
- メモリ上からデータをレジスタに保存する
- メモリのどの番地から値をとってくるか
- どのレジスタに保存するか
- RISC-VのISA仕様書 2-6章
- ストア命令
- レジスタの値をメモリ上に保存する
- どのレジスタの値を保存するか
- メモリのどの番地に保存するか
- RISC-VのISA仕様書 2-6章
- ジャンプ命令
- プログラムカウンタの値を書き換える(乱暴)
- 加算
- ジャンプ先から帰ってこれるように、次の命令の場所(今の命令の場所 + 4byte)をレジスタに保存する
- RISC-VのISA仕様書 2-5章
- プログラムカウンタの値を書き換える(乱暴)
- 計算命令
- 演算装置
- ALU
- 算術論理演算回路
- AND, OR, NOTなどの論理演算
- 高速な加算
- 加算器
- 半加算器、全加算器
- バレルシフタ
- ビットシフト
- ALU
- レジスタ
- フリップフロップ
- NANDゲート
- トランジスタ
- 半導体
- トランジスタ
- NANDゲート
- フリップフロップ
- 動作
Created
January 18, 2019 13:47
-
-
Save AtsukiTak/a1f38cee78923326cc45018b29b601c2 to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment