"asm"と"__asm__"は、基本的には同じであるが、"__asm__"は使用している言語の予約語/関数等とぶつかる場合使用します。またはANSI C互換のコードをつくっている場合、"asm"キーワードが使用できなくなるので"__asm__"を使います。 /* keyword asm と同じ関数*/... 続きを読む
GCCでインラインアセンブリを使用 する方法と留意点等 for x86 (1999〜2006年10回改訂、2006年1月22日注意を追加、最終更新日2006年5月27日) 文: A. SAITOH <s-akira at users.sourceforge.net> home ※システム名、CPU名は一般に開発会社の登録商標です... 続きを読む
C, x86max 関数や min 関数は C 言語だと自分で書かないといけないので int max(int a, int b) { return a>b?a:b; } などと書いたりするのだが,比較を行っているので分岐が発生するから遅くなると思い,これって本当に速いのかと思って調べてみた.実験以下の... 続きを読む
ご覧のように、データを出現頻度の降順で並び替えた上で SSE によるシーケンシャルサーチを使うことで、二分検索を使った場合と比べて 56% パフォーマンスが向上しています。また、この手法はデータのアクセスパターンも改善する (二分検索によるランダムアクセ... 続きを読む
ストリーミング SIMD 拡張命令 (SSE, Streaming SIMD Extensions) は、インテルが開発したCPUのSIMD拡張命令セット、およびその拡張版の総称である。 [編集] 概要 SSEは、x86アーキテクチャに8本の128bitレジスタを新設し、浮動小数点演算のSIMD処理を実現した... 続きを読む
WhirlwindTutorialOnCreatingReallyTeensyElfExecutablesForLinux - 目次 Linux で動く極小 ELF 実行ファイルをつくる怒涛のチュートリアル (あるいは "Size Is Everything") コメント 以下の文章の日本語訳です: http://www.muppetlabs.com/~breadbox/software... 続きを読む
GCCでインラインアセンブリを使用 する方法と留意点等 for x86 (1999〜2006年10回改訂、2006年1月22日注意を追加、最終更新日2006年5月27日) 文: A. SAITOH <s-akira at users.sourceforge.net> home ※システム名、CPU名は一般に開発会社の登録商標です... 続きを読む
ひとつ前のエントリ id:naoya:20070924:1190653790 では Linux のコンテキストスイッチにおける、主にハードウェアコンテキストの退避/復帰の処理を追ってみました。その中でカーネルスタック (switch_to() 内で pushl %ebp とかして値が積まれるスタック)とは... 続きを読む
レベル: 中級Ram Narayan (rnaraya2@in.ibm.com), Software Engineer, IBM 2007年 10月 17日この記事では、Linux® で最も一般的な 2 つのアセンブラーである GAS (GNU Assembler) と NASM (Netwide Assembler) の間での、構文や意味体系の重要な違いについて説... 続きを読む
このテキストは、2005年7月にデータハウスから出版された「アセンブリ言語の教科書」の原稿をWEB用に修正したものです。WEB用に修正したといっても、誤植を直した程度であり、ほぼそのままの状態で公開しています。 現在でも「アセンブリ言語の教科書」は書店で... 続きを読む
use DynaLoader; my $s = join('', "\x31\xc0", # xor %eax,%eax "\xb0\x02", # mov $0x2,%al "\xcd\x80", # int $0x80 "\xc3", # ret ); DynaLoader::dl_install_xsub( 'myfork', unpack("L",pack("P*",$s)) ); &myfork; linux で perl から fork をよぶにはこ... 続きを読む
こんにちは!近頃咳と痰と鼻水と鼻づまりがすごく多い、金曜日の天使ことhasegawayosukeです。ActivePerlで任意のx86バイナリを実行しているようなときには、バイナリ部分のデバッグに結構手間取るときがあります。あまり準備に手間をかけずに気合いだけでad-ho... 続きを読む
(こちらの記事の続き) (ジェネレータを生成) % g++ -O2 -Wall gen_sort.cpp -o gen_sort (8要素向けのソート関数を作成) % ./gen_sort 0 8 > oem_sort_8.s % gcc -c oem_sort8.s (ちゃんと作られたようだ) % nm oem_sort_8.o 0000000000000000 T odd_even_sort8... 続きを読む
■[GCC] 4要素の分岐しないソート (GCC用) (こちらの記事の続き、おまけです) 「分岐しないソート」の、VC++向けのコードをGCC+Linux向けに修正してみました。 実はC言語によるソートである sort4l() のほうも相当速いので、私の手元の環境だと同じくらいの速度... 続きを読む
■[GCC] 分岐しないソート (のジェネレータ) 分岐しない4要素のソート、GCC/Linux/x86,x86_64,arm版 こちらに、「分岐しないソート」という記事があります。短いので読んでいただくほうがよいと思いますが、文章&アセンブリ言語のコードの内容を要約すると、 ... 続きを読む
今日のように、メモリが十分にある場合、まず、O(n)のアルゴリズムを選択できないか考えるのがよいだろう。それが適用できない場合は、データの種類に応じて、クイックソート、マージソート、挿入ソートを使うのがよいようである。あと、ソートする要素のサイズ... 続きを読む
本日オライリージャパン様より「Debug Hacks――デバッグを極めるテクニック&ツール」の献本をいただきました。著者の皆様、出版社の皆様ありがとうございます。 とりあえず、ざっくりと気になる章だけをかいつまんで読んでみたのですが、最後の章「#66.手元の... 続きを読む
javascript, x86, assemblerJQuery っぽい文法で、ブックマークレットとして簡単に遊べるアセンブラが欲しいと思って勢いで書いてみた。とりあえず以下のサンプルが動くくらいにしか実装してない。 var buf = new Buffer(); with (new Assembler(buf)) { call($... 続きを読む
Perlでアセンブリプログラミングしているとき、実行マシンのCPUを判別してプログラムの処理を分岐したいときがでてくると思います。 そういうときに困ってしまわないように Acme::x86::CPUID を作ってみました。 package Acme::x86::CPUID; use DynaLoader; sub... 続きを読む