タグ

アセンブラに関するzariganitoshのブックマーク (2)

  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • lealについて - suu-g's diary

    lea命令は、Load Effective Address命令というもので、メモリ上の場所のアドレス値をレジスタに格納するもの。そのアドレスへのパイプを作っているような具合。なので、 leal 4(%esp), %eax とあったら、「ESPの値に4を足したメモリ位置」のアドレスを、EAXに格納するという意味になる。 端的に言うと、 EAX = ESP + 4 ってこと。 この命令を行うだけなら、二命令使って movl %esp, %eax addl $4, %eax としても同じ結果が得られそうなものだけど、では何のためにLEA命令があるのか。 実は、LEAは計算が目的じゃなくてアドレスを得るための命令なので、通常の計算命令と違ってフラグレジスタに影響を与えない。フラグに影響を与えないので、反復する命令に適している。*1 また足し算が一命令で出来てしまうので、その辺でも使われることがある

    lealについて - suu-g's diary
  • 1