アセンブラ

カーネル制作体験

低レベル層に興味がある人にはインテルの、ここ(日本語資料)とか ここ(英語資料)とかにあるソフトウェア開マニュアルは非常に面白い読み物だと思う。でも実際に試してみないと分かった気がしないなーと言うことでカーネルを作ってみることにした。とりあえず…

MMX,SSE体験

アセンブラ。インストラクションリファレンスを眺めながら、「あ、これ試してみよー」みたいなのが出来て楽しいな。基本情報なんとか試験用に考案されたCOMET IIというシンプルな仮想コンピュータとそれ用のアセンブリ言語のCASL IIと言うのが有る。いきなり…

インラインアセンブラでCPUIDその4

i386用の実行ファイルでエラーが発生した原因はPICで利用するebxレジスタをcpuid命令が破壊してしまったことが原因だった。 ではなぜx86_64用の実行ファイルではエラーが発生しなかったのかを今回は調べてみる。 一時ファイルを残すようにコンパイル。 $ gcc…

インラインアセンブラでCPUIDその3

今回は前回チラっと出てきた「pic」について。 PICとはPosition Independent Codeのこと。 仮想メモリ上のどこにロードしても、何も手を加えずに動作させることのできるコードのこと。 プログラムは通常はディスクにファイルとして存在し、実行時にメモリに…

インラインアセンブラでCPUIDその2

前回のエントリ( d:id:teru_kusu:20100203 )で次のようなコードをx86_64用のコードにコンパイルすると実行しても問題ないが、i386用のコードにコンパイルすると実行時にBus Errorと言うメッセージと共にクラッシュすると言う現象が発生。 この原因を今回は調…

インラインアセンブラでCPUID

インテル系(x86)アーキテクチャのcpuid命令を使用して、 プロセッサがサポートするリニアアドレスと物理アドレスのビット幅を取得してみる。 プログラムがメモリにアクセスするためには CPUのメモリ管理機構を経由することになる。 その中でアドレス変換が行…