x86
この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の18日目の記事です。 昨日はx86のCPUをFPGA上に実装した。 今日からは、そのCPU上で動く機械語を吐くためのコンパイラを製作していく。 昨日まではCPUだのx86だの馴染みのない…
この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の17日目の記事です。 ちょうど1週間前に 単純なCPUをFPGAで作った。 そして昨日は x86のエミュレータを完成させた。 この2つを組み合わせて、FPGA上で動くx86のCPUを作ろう。 …
この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の16日目の記事です。 昨日の86のエミュレータ製作の続きをやる。 昨日の最後 に解説した、機械語を順番に実行する部分を再掲すると for (int i = 0; i < 100000; i++) { const …
この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の15日目の記事です。 昨日まではx86の命令セットの解説をしていた。 重要な命令 は概ね紹介できたと思う1。 ざっくり振り返ると、CPUが実行できる命令は 機械語をメモリから読…
この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の14日目の記事です。 今日は関数をやる。 関数呼出と聞くと高度で抽象的な処理を彷彿させるが、決してそんなことはない。 x86パートに入る前にFPGAでCPUを自作したが、実はあの…
この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の13日目の記事です。 昨日は数値についてまとめた。 今日はModRMを説明する。 ModRMを一言で表すと、必須オプションだ。 たとえばadd命令の場合、何と何を足すかを指定するのが…
この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の12日目の記事です。 昨日はx86のアーキテクチャの概要を説明した。C言語をニーモニックに変換する手順も書いた。 今日は数値とバイナリエディタに関する注意点をまとめる。 バ…
この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の11日目の記事です。 昨日まではCPUの回路実装の話だった。つまりトランジスタをいかに配置するか、という話だった。 そういう回路視点でCPUを考えることをマイクロアーキテク…