タグ

x86に関するedo_m18のブックマーク (5)

  • JavaScriptでx86エミュレータを書く | POSTD

    背景 コンピュータ・サイエンスのバックグラウンドを持たない者として、私は常々もっと低いレベルでプログラムのしくみを理解したい、そこに多くのエネルギーを費やしたいと考えてきました。 そこで、まずは基を身につけるためにプログラミングの入門書である『 Programming from the Ground Up 』を入手したのですが、なかなか学習を始められずにいました。そんな時、ちょうどブラジルまでの11時間にも及ぶフライトが予定されており、それがこのを読み始めるにはもってこいの機会となったのです。 読んでみると、このがすっかり気に入ってしまいました。ただ、事例がLinux x86 GNUアセンブリ言語で書かれていたのです。私は64ビットのMac OS Xユーザでした…。アセンブラ、リンカフラグの例や、 i386 と x86_64 間のシンタックスを理解するのにはインターネットが欠かせない

    JavaScriptでx86エミュレータを書く | POSTD
  • x86入門(3) 関数の呼び出し規約 (mitsunari@cybozu labs)

    Cからasm,逆にasmからCを呼び出すために必要な手続きを呼び出し規約といいます.たとえば前回puts()を使う際に,文字列のポインタをpushしましたが,そういう手続きのことです. x86での規約は大きく分けて3種類あり,細かい部分についてはコンパイラ依存であることも多く,注意が必要です.しかし,ほぼすべてのコンパイラで共通である規約は簡単で覚えやすく,しかも移植性が高くなります.計算処理などOSに依存しにくい部分ではその規約のみに従って記述すれば,Windows/Linux/Macで同一のソースとすることができメンテナンスもしやすくなります. まずは基の規約(cdecl)をしっかりと使いこなし,必要になってから他のその他の規約を学べばよいでしょう.詳細は呼出規約(Wikipedia)などを参考にしてください.拙文でも多少触れています. 汎用性の高い規約 Cとasmとの間で呼び出しあ

  • インラインアセンブラで学ぶアセンブリ言語 第3回

    はじめに これまで、『インラインアセンブラで学ぶアセンブリ言語』の第1回と第2回を通じて、Microsoft Visual C++のインラインアセンブラを用い、アセンブリ言語の基について説明してきました。 第3回となる稿では、インラインアセンブラを用いた流れ制御を解説します。アセンブリ言語は高水準言語における文の概念がなく、すべての命令が単純なオペコードと引数(オペランド)だけで構成されています。この純粋な構造のために、流れ制御を行う場合も、if文やfor文のように記述することはできません。基的にプログラムの流れ制御はすべてC言語で言うところのgoto文だけで記述し、比較命令や条件ジャンプも個別の命令で行います。 来のマクロ機能を持たない生のアセンブリ言語ならば、ジャンプ先のプログラムの位置すらも、すべてメモリアドレスで指定しなければなりません。実際に、機械語にアセンブルされた後は

    インラインアセンブラで学ぶアセンブリ言語 第3回
  • x86とx86_64アセンブラの比較 - Handwriting

    そろそろx86_64アセンブラも勉強しないと時代に追いつけなるなということをひしひしと感じつつあるので、手始めにx86とx86_64の違いを比較してみた。 なんといっても大きいのは、x86_64ではスタックを利用した引数の受け渡しをする必要が減ったこと。 x86では、関数呼び出し時の引数を渡すときはお馴染みの「引数逆順push」で、サブルーチンで引数を受け取るのは 4*(n+1)(%ebp) ただし32bit引数の場合 だったわけだけど、x86_64では%rax〜%rbpという従来の32bitレジスタを64bitレジスタに拡張したものに加えて、%r8〜%r15という64bitレジスタが増えたため、整数型引数はレジスタに入れて渡すことができるようになっている。 【参考】x64 Assembly Language Programming ちなみに、「整数型引数以外はどうなんのよ?」という疑問に

    x86とx86_64アセンブラの比較 - Handwriting
  • 目指せプログラマー!

    目指せプログラマー!にようこそ。 当サイトはこちらに引っ越しました。 お手数をおかけしますが、上記サイトへご移動くださいませ。

  • 1