タグ

assemblerに関するkazuhookuのブックマーク (11)

  • x86カルトクイズ(解答編) (mitsunari@cybozu labs)

    問題編はこちらのx86カルトクイズです. Q1 [乗算の削減] lea eax, [eax + eax*8] lea eax, [eax + eax*4] 45 = 9 * 5 = (8 + 1) * (4 + 1)を利用する.乗算命令が速くなったとはいえ,まだadd/sub/shift/leaの組み合わせを使った方が速いことが多い. Q2 [条件分岐の削減] cdq xor eax, edx sub eax, edx 条件分岐は可能な限り使わない.次の二つの恒等式 -x = x ^ (-1) - (-1) x = x ^ 0 - 0 と unsigned int m = (x < 0) ? -1 : 0 を組み合わせることで絶対値を unsigned int m = x >> 31; return x ^ m - m; と実現する.ここでmを取得する部分は mov edx, eax sa

    kazuhooku
    kazuhooku 2007/10/09
    「瑣末な知識を覚えるよりも,常に代替ロジックが無いかを考える方がよりよいコードに繋がる」
  • x86カルトクイズ (mitsunari@cybozu labs)

    x86の解説をいざ始めてみると,どうもblogという媒体はやりにくいので別ページで進めることにしました.すいません.まとめ直すまでしばらくお待ちください.あと基的なことばかり続いたので,ちょっとマニアックネタに走ってみます. というわけで突然ですがクイズです.そこそこ高い難易度に設定したつもりですが,いかがでしょう.初心者の方は全然分からなくても大丈夫です.あえて曖昧な記述をしている部分もあります.後半の答えは凄いものがあるといいなあ.あと,難問奇問募集中. 以下は断りがない限り, 環境は32bit OS上のPentium4以降のx86 CPU 関数の呼び出し規約は__cdecl 配列は16byte alignmentされていて複数の配列はオーバーラップしていない ループは4の倍数と仮定してよい ものとします.CPUに依存する場合は明記してください. Q1(5点) 符号なしeaxの値を4

    kazuhooku
    kazuhooku 2007/10/05
    答えが降ってくることを期待age
  • Xbyakで始めるx86(IA-32)入門(2-1) (mitsunari@cybozu labs)

    前回言い忘れましたが,このシリーズの目標はLL魂2007デモコードのchaos.cpp程度のものを読めて理解できることを考えています. 具体的には レジスタやスタックを理解する 関数を作れる SIMD命令の基礎を知る JITのメリットを理解する あたりを目指します.なお,JITアセンブラは通常のアセンブラに比べてワンクッション概念が必要になります.もしかしたらアセンブリ言語の当の入門としては不適切かもしれませんが,まあご了承ください. それでは,最初に他の言語と同様,"Hello Xbyak!"を表示してみましょう. #include "xbyak/xbyak.h" #include <stdio.h> struct HelloGenerator : public Xbyak::CodeGenerator { // (A) HelloGenerator() // (B) { push((

  • Linux カーネルのコンテキストスイッチ処理を読み解く - naoyaのはてなダイアリー

    Linux カーネルのプロセススケジューラの核である kernel/sched.c の schedule() を読み進めていくと、タスク切り替え(実行コンテキスト切り替え)はその名も context_switch() という関数に集約されていることが分かります。2.6.20 の kernel/sched.c だと以下のコードです。 1839 static inline struct task_struct * 1840 context_switch(struct rq *rq, struct task_struct *prev, 1841 struct task_struct *next) 1842 { 1843 struct mm_struct *mm = next->mm; 1844 struct mm_struct *oldmm = prev->active_mm; 1845 184

    Linux カーネルのコンテキストスイッチ処理を読み解く - naoyaのはてなダイアリー
    kazuhooku
    kazuhooku 2007/09/26
    %eax に結果入れたりとか、gcc -O3 とかやるとマズかったりしないのかな
  • Xbyakで始めるx86(IA-32)入門 (mitsunari@cybozu labs)

    ここでは何回かに分けてx86(IA-32),いわゆる普通のPentiumパソコンで使われている機械語の説明をする予定です. アセンブラ,アセンブリ言語としては拙作のXbyakを使うことにしました. 理由は, 普通のgasやNASMによる解説はありふれていること WindowsLinux,Intel Macで同じソースが使え,C++だけで閉じているためアセンブラの設定に悩まなくてすむこと JITなどの特殊な最適化ができること などがあります(半分は自己満足ですね). 内容は基的なところから始めますが,場合によってはマニアックネタに走るかもしれません.最初のうちはx86アセンブリ言語入門と重複することも多いと思います. 以下は単なる私の価値観ですが,機械語を絶対に知っておくべきものであるとは思いません.けれども何事もかじってみるのは悪くないと思います. 必要だから勉強する,不要だから勉強し

    kazuhooku
    kazuhooku 2007/09/26
    キター
  • The JSR-133 Cookbook

    Where: Normal Loads are getfield, getstatic, array load of non-volatile fields Normal Stores are putfield, putstatic, array store of non-volatile fields Volatile Loads are getfield, getstatic of volatile fields that are accessible by multiple threads Volatile Stores are putfield, putstatic of volatile fields that are accessible by multiple threads MonitorEnters (including entry to synchronized met

  • TAKESAKO @ Yet another Cybozu Labs: FizzBuzz x86 for バイナリアン

    昨日の続き。今日は息抜きに FizzBuzz.com (MS-DOS 16bit版) を作ってみました。 0000000 b4 02 bb 31 30 30 ed e8 2c 00 e8 29 00 e8 39 00 0000020 e8 23 00 e8 3e 00 e8 30 00 e8 1a 00 e8 17 00 e8 0000040 27 00 e8 2f 00 e8 0e 00 e8 1e 00 e8 08 00 e8 05 0000060 00 e8 13 00 eb d1 80 ff 30 74 04 88 fa cd 21 88 0000100 da cd 21 e8 28 00 c3 fe c5 b2 46 cd 21 b2 69 cd 0000120 21 e9 08 00 b2 42 cd 21 b2 75 cd 21 b2 7a cd 21 0000140 cd

  • Xbyak - x86 JIT assembler -

    Xbyak - x86, x64 JIT assembler - .frame(English) .frame(x86の究極の最適化手法?) Xbyak(カイビャック)はx86(IA32), x64(AMD64, x86-64)のマシン語命令を生成するC++のクラスライブラリです. プログラム実行時に動的にアセンブルすることが可能なため, 柔軟な最適化(動的コード生成)が可能となります(利用シーン:量子化の高速化, 式の計算). 暗号ライブラリに使って高速な実装をしてみた(very fast etaT pairing for Core 2 Duo) ヘッダファイルオンリー xbyak.hをインクルードするだけですぐ利用することができます(32bit, 64bit両対応). Windows Xp(32bit, 64bit), Vista/Linux(32bit, 64bit)/Intel

  • http://linux.cis.monroeccc.edu/~paulrsm/doc/trick68k.htm

  • MC680x0 Reference 1.1, 呸pril,May 1995 by Flint/DARKNESS.

    kazuhooku
    kazuhooku 2006/07/20
    web.archive.org にもあるみたい
  • x86系CPUのネイティブコードを解析する:CodeZine

    はじめに 今回はPC市場で一般的に採用される、x86系のCPUの機械語に迫ります。最新技術が次々と現れる昨今ですが、実はx86の規格はあまり目新しいものではありません。クロック周波数は上がるものの、機械語の形態は昔から引き継がれています。x86 CPUの種類 x86ネイティブコードを解読できるCPUには、下記のようなものが挙げられます(※AMD64を除く)。もはや説明はいりませんね。Intel Pentium 4Intel Pentium 3Intel Pentium 2Intel MMX PentiumIntel PentiumIntel 486/386AMD AthronAMD DuronAMD K-6  ここからは、32ビット以降のx86系 CPUに関する話題を扱っていきます。8ビットCPU、16ビットCPUに関するテクニックは出てきませんので、ご了承ください。

  • 1