しかくいさんかく

解答略のメモ

x86

18日目: [コンパイラ] ソースコードから機械語までの道筋

この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の18日目の記事です。 昨日はx86のCPUをFPGA上に実装した。 今日からは、そのCPU上で動く機械語を吐くためのコンパイラを製作していく。 昨日まではCPUだのx86だの馴染みのない…

17日目: [x86] CPU (IA-32) をFPGAで製作

この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の17日目の記事です。 ちょうど1週間前に 単純なCPUをFPGAで作った。 そして昨日は x86のエミュレータを完成させた。 この2つを組み合わせて、FPGA上で動くx86のCPUを作ろう。 …

16日目: [x86] エミュレータ製作 (完成)

この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の16日目の記事です。 昨日の86のエミュレータ製作の続きをやる。 昨日の最後 に解説した、機械語を順番に実行する部分を再掲すると for (int i = 0; i < 100000; i++) { const …

15日目: [x86] エミュレータ製作 (前半)

この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の15日目の記事です。 昨日まではx86の命令セットの解説をしていた。 重要な命令 は概ね紹介できたと思う1。 ざっくり振り返ると、CPUが実行できる命令は 機械語をメモリから読…

14日目: [x86] 関数呼出

この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の14日目の記事です。 今日は関数をやる。 関数呼出と聞くと高度で抽象的な処理を彷彿させるが、決してそんなことはない。 x86パートに入る前にFPGAでCPUを自作したが、実はあの…

13日目: [x86] ModRM

この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の13日目の記事です。 昨日は数値についてまとめた。 今日はModRMを説明する。 ModRMを一言で表すと、必須オプションだ。 たとえばadd命令の場合、何と何を足すかを指定するのが…

12日目: [x86] 数値とバイナリエディタ

この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の12日目の記事です。 昨日はx86のアーキテクチャの概要を説明した。C言語をニーモニックに変換する手順も書いた。 今日は数値とバイナリエディタに関する注意点をまとめる。 バ…

11日目: [x86] アーキテクチャとバイナリ解析最速マスター

この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の11日目の記事です。 昨日まではCPUの回路実装の話だった。つまりトランジスタをいかに配置するか、という話だった。 そういう回路視点でCPUを考えることをマイクロアーキテク…