x64 UEFI 対応 OS 自作入門 ~実機で動作する OS を作ってみよう~
  • まえがき
  • 第1章:準備
  • 第2章:32 ビット整数式の x64 JIT コンパイラを試作する
    • 2.1 コンパイラを自作する理由
    • 2.2 全体の処理の流れ
    • 2.3 コーディングの方針
    • 2.4 字句解析
    • 2.5 構文解析
    • 2.6 意味解析
    • 2.7 中間コード(WebAssembly)生成
    • 2.8 x64 コード生成
    • 2.9 デバッグとテストコード
    • 2.10 改善を検討すべき点
    • 2.11 参考文献・資料
  • 第3章:クロス開発環境を作る(1)
  • 第4章:UEFI アプリを自作開発環境でビルドする
    • 4.1 UEFI
      • 4.1.1 初めての UEFI アプリ
      • 4.1.2 GPT と MBR
      • 4.1.3 UEFI セットアップ画面
      • 4.1.4 FreeType の利用
      • 4.1.5 UEFI セキュアブート
    • 4.2 まとめ
    • 4.3 参考文献・資料
  • 第5章:クロス開発環境を作る(2)
  • 第6章:シングルタスク OS をデバッグ可能にする
  • 第7章:対応するデバイスを増やす
  • 第8章:マルチタスク/マルチコア対応
  • 第9章:インストーラを作る
  • 第10章:開発環境を移植する
  • 第11章:TCP/IP・印刷機能を作る
  • 第12章:GitHub サポート機能を作る
  • 第13章:日本語入力機能を作る
  • 第14章:ハイパーバイザを作る
  • あとがき
  • 索引
GitBook提供
このページ内
  • 2.3 コーディングの方針
  • 2.4 字句解析・2.5 構文解析・2.6 意味解析
  • 2.7 中間コード(WebAssembly)生成
  • 2.8 x64 コード生成
  • 2.9 デバッグとテストコード
  1. 第2章:32 ビット整数式の x64 JIT コンパイラを試作する

2.11 参考文献・資料

前へ2.10 改善を検討すべき点次へ第3章:クロス開発環境を作る(1)

最終更新 3 年前

最近のruby-core (2017年3月) | Money Forward Engineers' Blog [#13188] Reinitialize Ruby VM.

引退するメインフレームプログラマたち - その対策は?

・・

コンパイラ (情報系教科書シリーズ) 湯浅 太一 昭晃堂 2010/03 初版 第11刷

上記の書籍は、現在では出版社が変更になっています。

情報系教科書シリーズ コンパイラ 湯淺 太一 オーム社 2014/09

岩波講座 ソフトウェア科学〈〔環境〕5〉プログラミング言語処理系 佐々 政孝 岩波書店 1997/03 初版 第7刷

定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS) 近藤 嘉雪 ソフトバンククリエイティブ 1999/05 初版 第4刷

手書きLLパーサにおける左結合性を持つ演算子の左再帰をループで解決する - ふるつき

Kazuho's Weblog: C言語で可変長引数をとる関数を、型安全に書く方法

最近のruby-core (2016年3月) | Money Forward Engineers' Blog [#12142] Hash tables with open addressing

最近のruby-core (2016年11月) | Money Forward Engineers' Blog [#12142] Hash tables with open addressing

スタックマシンの記事を読むためには、Web ブラウザのエンコーディングを日本語(EUC-JP)に切り替える必要がある場合があります。 Google Chrome や Microsoft Edge では以下の拡張機能が使えます。

平成26年度 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室 (情報処理技術者試験) 栢木 厚 技術評論社 2013/12 第9版 第1刷

コンパイラ (情報系教科書シリーズ) 湯浅 太一 昭晃堂 2010/03 初版 第11刷

上記の書籍は、現在では出版社が変更になっています。

情報系教科書シリーズ コンパイラ 湯淺 太一 オーム社 2014/09

ADVANCED WINDOWS 第5版 下 Jeffrey Richter, Christophe Nasarre 著, (株)クイープ 翻訳 日経BP社 2011/04 初版 第2刷

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか Jr.,Henry S. Warren 著 翻訳:滝沢 徹, 鈴木 貢, 赤池 英夫, 葛 毅, 藤波 順久 エスアイビー・アクセス 2005/06 初版 第3刷

8086ファミリ・ハンドブック 相沢 一石 CQ出版 1991/12 初版 第4刷

80x86 80x87―ファミリー・テクニカルハンドブック RobertL. Hummel 著, 槌田 浩一 翻訳 技術評論社 1993/10 初版 第1刷

x86アセンブラ入門―PC/ATなどで使われている80x86のアセンブラを習得 (TECHI―Processor) 大貫 広幸 CQ出版 2006/01 初版 第1刷

Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture rev.067 May 2018

Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B, 2C & 2D): Instruction Set Reference, A-Z rev.067 May 2018

テキストエンコーディング - Chrome ウェブストア

スタックマシン - プログラミング言語処理

スタックマシンへのコンパイラ - プログラミング言語処理

WebAssembly Specifications

Binary Format — WebAssembly

WebAssembly/wabt: The WebAssembly Binary Toolkit

WABT: The WebAssembly Binary Toolkitを使ってみる - Qiita

【WebAssembly初心者必読】バイナリコードを使って「 WebAssembly 」の基礎を徹底解説してみた! | ヌーラボ

WebAssembly(wat)を手書きする | 株式会社カブク

Writing WebAssembly By Hand

WebAssembly逆アセンブルして調べるテスト

WebAssemblyをはじめよう | WEBASSEMBLY USUI BOOK

LEB128な数の表現 - Dr.Deamon64 Wiki - Dr.Deamon64 - OSDN

LEB128 ‐ 通信用語の基礎知識

x64 アセンブリーの概要 | iSUS

x64 の 64 ビットモードのエンコーディング概略

x64 でのソフトウェア規約 | Microsoft Docs

x64 での呼び出し規則 | Microsoft Docs

x64 でのスタックの使用 | Microsoft Docs

x64 でのプロローグとエピローグ | Microsoft Docs

Gamasutra - In-depth: Windows x64 ABI: Stack frames

Windows Anti-Debug Reference まとめ その1 - Twitterに書ききれないこと

Saving Space When Saving Space - emsea

データ構造アライメント - Wikipedia

linux - How do I disassemble raw 16-bit x86 machine code? - Stack Overflow

Writing WebAssembly By Hand

IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 上巻: 基本アーキテクチャ

IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 中巻 A: 命令セット・リファレンス A-M

IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 中巻 B: 命令セット・リファレンス N-Z

x64 アセンブリーの概要 | iSUS

インテル® エクステンデッド・メモリ 64 テクノロジ・ソフトウェア・ デベロッパーズ・ガイド 第 1 巻 リビジョン 1.1

インテル® エクステンデッド・メモリ 64 テクノロジ・ソフトウェア・ デベロッパーズ・ガイド 第 2 巻 リビジョン 1.1

Intel® 64 and IA-32 Architectures Software Developer Manuals | Intel® Software

引退するメインフレームプログラマたち - その対策は?

2.3 コーディングの方針
https://moneyforward.com/engineers_blog/2017/04/13/ruby-core-201703/
https://www.infoq.com/jp/articles/retiring-mainframe-programmers/
2.4 字句解析
2.5 構文解析
2.6 意味解析
https://furutsuki.hatenablog.com/entry/2018/02/09/184342
http://blog.kazuhooku.com/2014/12/c.html
https://moneyforward.com/engineers_blog/2016/04/04/ruby-core-201603/
https://moneyforward.com/engineers_blog/2016/12/01/ruby-core-201611/
2.7 中間コード(WebAssembly)生成
https://chrome.google.com/webstore/detail/set-character-encoding/bpojelgakakmcfmjfilgdlmhefphglae/related?hl=ja
http://www.hpcs.cs.tsukuba.ac.jp/~msato/lecture-note/comp-lecture/note8.html
http://www.hpcs.cs.tsukuba.ac.jp/~msato/lecture-note/comp-lecture/note9.html
https://webassembly.github.io/spec/
https://webassembly.github.io/spec/core/binary/index.html
https://github.com/WebAssembly/wabt
https://qiita.com/ukyo/items/909d5132ae049c672755
https://nulab-inc.com/ja/blog/nulab/basic-webassembly-begginer/
https://www.kabuku.co.jp/developers/webassembly
https://blog.scottlogic.com/2018/04/26/webassembly-by-hand.html
https://gist.github.com/mirichi/bafb7b4650c664374cce9dd9f73a33f8
https://ukyo.github.io/wasm-usui-book/webroot/get-started-webassembly.html
https://osdn.net/projects/drdeamon64/wiki/LEB128%E3%81%AA%E6%95%B0%E3%81%AE%E8%A1%A8%E7%8F%BE
https://www.wdic.org/w/TECH/LEB128
2.8 x64 コード生成
https://www.isus.jp/others/introduction-to-x64-assembly/
https://gist.github.com/tenpoku1000/24c249e32c512611c079ce87a59a6a52
https://docs.microsoft.com/ja-jp/cpp/build/x64-software-conventions?view=msvc-160&viewFallbackFrom=vs-2017
https://docs.microsoft.com/ja-jp/cpp/build/x64-calling-convention?view=msvc-160&viewFallbackFrom=vs-2017
https://docs.microsoft.com/ja-jp/cpp/build/stack-usage?view=msvc-160&viewFallbackFrom=vs-2017
https://docs.microsoft.com/ja-jp/cpp/build/prolog-and-epilog?view=msvc-160&viewFallbackFrom=vs-2017
https://www.gamasutra.com/view/news/178446/Indepth_Windows_x64_ABI_Stack_frames.php
https://web.archive.org/web/20180804094336/http://pinksawtooth.hatenablog.com/entry/2015/08/12/013616
https://emsea.github.io/2018/06/03/smaller-bss/
https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0%E3%82%A2%E3%83%A9%E3%82%A4%E3%83%A1%E3%83%B3%E3%83%88
https://stackoverflow.com/questions/1737095/how-do-i-disassemble-raw-16-bit-x86-machine-code/34424146#34424146
https://blog.scottlogic.com/2018/04/26/webassembly-by-hand.html
https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol1_Online_i.pdf
https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2A_i.pdf
https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2B_i.pdf
https://www.isus.jp/others/introduction-to-x64-assembly/
https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/EM64T_VOL1_30083402_i.pdf
https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/EM64T_VOL2_30083502_i.pdf
https://software.intel.com/en-us/articles/intel-sdm
2.9 デバッグとテストコード
https://www.infoq.com/jp/articles/retiring-mainframe-programmers/