アセンブラ… (・∀・)イイ!
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG機械語萌え。20 D4 FF FF 50 E8 8A DC FF FF 68 10 20 00 00 8D
45 B4 50 8D 85 B4 FB FF FF 50 6A 00 E8 7B DC FF
FF 8B E5 5D C3 00 00 00 FF FF FF FF 02 00 00 00
0D 0A 00 00 55 8B EC 83 C4 F4 84 D2 74 08 83 C4
F0 E8 82 C4 FF FF 89 4D F4 88 55 FB 89 45 FC 8B
45 FC 83 C0 04 8B 55 F4 E8 2B CD FF FF 8B 45 FC
80 7D FB 00 74 0F E8 B5 C4 FF FF 64 8F 05 00 00
00 00 83 C4 0C 8B 45 FC 8B E5 5D C3 55 8B EC 83
C4 F0 53 33 DB 89 5D F0 84 D2 74 08 83 C4 F0 E8
34 C4 FF FF 89 4D F4 88 55 FB 89 45 FC 33 C0 55
68 61 69 40 00 64 FF 30 64 89 20 8D 45 F0 50 8B
0446デフォルトの名無しさん
NGNGページングするから判断できる。
物理メモリに存在しないページを要求されたらプロセッサは
一般保護例外を出す。
それをOSが拾ってページを割り当てる。
割り当てるページが無かったらSegmentation Fault。
0447はじめて読む6809
NGNGその3冊手に入れました。頑張って勉強してみます。
遅レス失礼しました。
ところで、「はじめて読むMASM」、
兄弟本、「はじめて読むマシン語」、「はじめて読むアセンブラ」も絶版?
はじめて読むシリーズ危うし。
0448デフォルトの名無しさん
NGNG一般保護例外(0Dh)でなくページフォルト(0Eh)だよ。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNGページフォルトであるページを物理メモリに割り当てますよね?
そしたらその割り当てられたアドレスはセレクタ+オフセットで
表されてるのですか?
それともやっぱり32ビットの仮想アドレス?
うーん。
要は仮想アドレスを使っていてどうやって
タスク間アクセス保護が出来るのかって事が知りたいのです。
0452デフォルトの名無しさん
NGNG0453デフォルトの名無しさん
NGNG逆だよーん。ほんとはもっと複雑だけど、すごーく簡単に書くと
selector -> GDT or LDT -> base address
base address + offset -> page table -> physical address
で、タスクごとにpage tableをごにょごにょする。
詳しく知りたきゃ
http://developer.intel.com/design/pentium4/manuals/245472.htm
を読むべし。
0454デフォルトの名無しさん
NGNGう〜ん。
う〜ん。
がんばって読んでみます。ありがとうございました。
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNGのモービィディックというゲームが面白かったです。
あの本の最後の笑い話の意味がわかったとき
道を踏み外したなと確信しました。
0457デフォルトの名無しさん
NGNGhttp://www.vector.co.jp/vpack/filearea/win/prog/asm/index.html
ここから探した結果、
MASM 準拠で8086〜PentiumPro,MMX,3DNow! 命令に対応したマクロアセンブラ
http://www.vector.co.jp/soft/win95/prog/se183316.html
これが一番よさそうなのですが、どうですか。
0458デフォルトの名無しさん
NGNGダウンしましたが、
「通常はVC++といっしょに使ってください」
と書いてあったので、やっぱりだめみたいです。
0459デフォルトの名無しさん
NGNG0460___
NGNG0461デフォルトの名無しさん
NGNGは?マジで絶版?うそだろ
0462デフォルトの名無しさん
NGNGそれは、NWSA というアセンブラだけど、有償版には、
統合開発環境(デバッガ、逆アセンブラ付き)があって、
リンカも付いてくるので、Visual C++ がなくても単体
で開発できるよ。
アセンブラの統合開発環境で、ライセンス的に合法なのは、
これくらいかもしれないから、それなりに価値はあるんじゃ?
0463デフォルトの名無しさん
NGNGLD A,3
SUB B
RET
0464デフォルトの名無しさん
NGNGなんか検索しても変なページばっかり出てきます。
ようするに時代は終わったということでしょうか。
0465デフォルトの名無しさん
NGNGNWSAとPasm
ニモニック一覧くらいならついてるんじゃない?
0466デフォルトの名無しさん
NGNG問題になるのが速度だけならgccのインラインアセンブラを使えば
フリーでドキュメントがそこそこそろってると思うけど…
それともファイルサイズとかを限界まで攻めるために
純粋なアセンブラが必要なのだろうか。
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNGCを勉強する前にアセンブラをやるのが常識みたいだし、アセンブラができるとドライバーが書けるみたいだし、ドライバーが書けると女にもてるみたいだし。
0469だだ
NGNGそりゃないだろ。
0470デフォルトの名無しさん
NGNG女にモテたいがためにアレか?その、何だ、斡旋ブラやってるのか?
「こんなのどうでしょうお嬢さん」とかアレか?言うんか?
「お似合いですよ」がアレか?殺し文句か?
0471デフォルトの名無しさん
NGNGねただろ。ボケェ
0472デフォルトの名無しさん
NGNGここを見なさいよ。
0473デフォルトの名無しさん
NGNGインラインでアセンブラ書けるから勉強するには丁度いい
いきなりアセンブラだけでは試すのさえ厳しいよ
0474デフォルトの名無しさん
NGNG具体的にどのファイルが必要なのか解かりませんでした。
教えてください。よろしくお願いします。
0475デフォルトの名無しさん
NGNGつーか、あのWebページから探し出すこともできないんじゃ、中身を
読むこともできないような気がする・・・
Developer - Software - Pentium4 - Reference Manual で辿ってみな。
あとはどれか必要かわからないなら全部落としておけ。
0476デフォルトの名無しさん
NGNGどういう処理がボトルネックになってて、
どういう風に解消したんですか?
アセンブラやるには、CPUのパイプ処理とかも考慮するのですか?
ハザードに関しても,考慮するのですか?
そうだとすると人間の手でやるとバグが出る気が・・・
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNG(1)高速化
(2)ドライバ書く
以外の用途ってないんですよね?で、ドライバってCでも書けるんでしょ?
最適化はコンパイラがやってくれるよね?
0480デフォルトの名無しさん
NGNG組み込みだとコードサイズに制限があるからそのために使うことがある。
最近はどうだか知らんけど。
0481デフォルトの名無しさん
NGNGコンパイラより1.5倍程度速い。
ループしている部分には効果的
案外アセンブラで書くほうが綿密に計画するから
バグも少なかったりする。
0482デフォルトの名無しさん
NGNGVMの方が速いよね?
0483デフォルトの名無しさん
NGNGVMってドリキャスのVM?
0484デフォルトの名無しさん
NGNGVC++は漏れが書いた浮動小数点演算コードより2倍速かった
一生懸命考えて書いたんだが・・・欝だ
0485デフォルトの名無しさん
NGNGx86はダメそうだけど、ARMのCコンパイラは凄かった。
アセンブラで書いたのと比べて遜色無いコードを吐く。
0486デフォルトの名無しさん
NGNGどういう処理がボトルネックになってて、
どういう風に解消したんですか?
アセンブラやるには、CPUのパイプ処理とかも考慮するのですか?
ハザードに関しても,考慮するのですか?
そうだとすると人間の手でやるとバグが出る気が・・・
俺も知りたい
0487デフォルトの名無しさん
NGNGアセンブラによる高速化ってSIMD命令を使うのとかが多いのでは?
これってコンパイラでやるの難しいよね?
0488デフォルトの名無しさん
NGNG書いても速くなる気がしないよ・・・。割り切って、ブートとMMUにしか
使ってない。
0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNGSH仲間発見。おれはSH3と格闘中。ゲーム機とはかんけいないけど。
0492デフォルトの名無しさん
NGNGに対してまともな回答できるやつが一人もいない
という事は、ここにはアセンブラ使いがいない
0493デフォルトの名無しさん
NGNGアセンブラだとレジスタ同士の計算一発で終わる(1行)
のを、駄コンパイラはスタックに入れたり出したりで5行も10行も
吐く。
0494デフォルトの名無しさん
NGNG同時実行可能な命令のペアだと色が変わるとか
各命令の実行クロック数が命令の右肩に出るとかそういう機能が付いた奴。
0495デフォルトの名無しさん
NGNG>486
当方ゲーム(主にエロゲ)プログラマだけど
インラインアセンブラでMMX命令を使って画面ワイプとか高速化してるよ
クロスフェードとかやる分にはCコンパイラの吐くx86コードの数倍以上速い
パイプとストールは一応考慮してる、最適化は局所的だから
きちんとCPUに関する知識を身に付けてりゃそうそうバグらない
0496デフォルトの名無しさん
NGNG糞なメモリ性能でよく作った。
0497デフォルトの名無しさん
NGNG0498495
NGNGつーかMMXやSSEなんかは3Dや画像操作系のアプリなら使ってておかしくないし
ゲームも3Dものはほぼ常識、エロゲだってMMX程度なら常識になりつつある
で、こういったSIMD系命令を使う場合はやっぱアセンブラの知識がないと
intelCはSIMDを含んだ最適化もしてくれるけど
アルゴリズムが簡単な場合は最初からきっちり作ったアセンブラのコードには勝てないよ
あとアセンブラ使ったのっていったらLZ77の圧縮展開ルーチンとかかな…
Cのみのコードと比べたら倍ぐらいになったよ
>486は自分で作ったものをプロファイルとってボトルネックを調べるとかはしないの?
ボトルネックになってる部分が単純な関数ならアセンブラに起こしなおすだけで
かなり高速化できると思うんだけど?
0500デフォルトの名無しさん
NGNGCPU依存になるの?
パイプの段数が違えば、ストール起こす条件もCPUによって違うわけだから・・・
493が言ってる最適化の効果はどれくらいなの?
分岐予測が間違えると・・・っていう事で
あとに来る共通して使える命令が入ってるんじゃなかったっけ?
あと、一つ気になったのはCと比較してるけど
C++のコードをアセンブラで高速化する事って無いのでしょうか?
それともC=C++という意味?
0501デフォルトの名無しさん
NGNGアセンブラは機械語と一対一だからCPUに依存するよ。
0502501
NGNG0503デフォルトの名無しさん
NGNGインストールする時に、
CPUを調べてインストールしてるの?
0504仕様書無しさん
NGNGプロファイルとってみて異常に時間がかかってるところって、最適化以前の
問題を孕んでることのほうが多くない?
それに、処理内容が単純な関数だったら、CでもC++でもアセンブラで
も大差ないし。
>>503
そういうソフトもあるけど、CPUの判別は実行時に行うことが多い。
インストール後にCPU交換されたら困るじゃん。
0505デフォルトの名無しさん
NGNG私の知っているソフトの中では、YAMAHAの「S-YXG100」というソフトシンセサイザーがあるよ。
CPUがIntel PentiumII以上でないとVL音源のプラグインがインストールされないの(Celeronは基盤がPentiumIII(II?)だからインストールされる)。
もっとも、アセンブラーで高速化しているからという理由かどうかは分からないけど。
0506デフォルトの名無しさん
NGNG>アセンブラ専用のサポート機能が付いたテキストエディタってある?
Peggy Proぐらいしか知らない。
0507デフォルトの名無しさん
NGNGそれは単純にpentium2以上じゃないと、VLなんて動かないからだと思われ
まあ、動いたとしても使い物にならないだろうな
>インストール後にCPU交換されたら困るじゃん。
もっともだ(笑)
0508デフォルトの名無しさん
NGNG最新のAMDのプロセッサにはインストールされないけど・・・・・
0509508
NGNG0510デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNGhttp://www.yamaha.co.jp/product/syndtm/p/soft/syxg100/spec.html
見ろ。
もっともいつの間にかAMD Athlon/Duronでも動くように改良したみたいだけど。
0512デフォルトの名無しさん
NGNG構造体のメンバの参照は一般的には自前で計算するんでしょうか。
当然コンパイラや開発ツールに依存する問題ではあると思うのですが。
マニュアルはしょぼすぎて、その辺の記述がほとんどのってないんです。
その辺(インラインアセンブラ)の作法についての文献、HPなどがあれば
教えてちょ。
0513Kusakabe Youichi
NGNGIn article <[email protected]>, "512: デフォルトの名無し
さん" <[email protected]> wrote:
> 基本はCで、所々インラインアセンブラで最適化する必要が出てきたんですけど
、
> 構造体のメンバの参照は一般的には自前で計算するんでしょうか。
ほかにどうするというのでしょうか?
何か便利なマクロが使える環境もあるでしょうけど、
それはその環境依存ですから、一般的には何とも言えないでしょう。
> 当然コンパイラや開発ツールに依存する問題ではあると思うのですが。
> マニュアルはしょぼすぎて、その辺の記述がほとんどのってないんです。
具体的にはどういう環境のどういうCを使っているのですか?
> その辺(インラインアセンブラ)の作法についての文献、
> HPなどがあれば教えてちょ。
そういうところで一般的なコツみたいなのがもし見つかったとしても、
あまり役に立たないでしょうね。
0514デフォルトの名無しさん
NGNGメモリの構造を理解してないのなら、アセンブラを触らない方が良いと思われ。
0515デフォルトの名無しさん
NGNGメモリーの構造を理解していなかったらCも使えないと思うけど。
CPUの構造まで理解する必要はないけどね。
0516515
NGNG0517デフォルトの名無しさん
NGNGVC++なら構造体の変数名でオフセット指定できる。他のコンパイラもできるようになっていればできる
MSDNライブラリ【__asm ブロック内の C/C++ データへのアクセス】参照
0518
NGNG実行コード&データレベルでの圧縮をよくしたものだ。
ビットフィールドは当たり前
0519デフォルトの名無しさん
NGNG今でも組み込みの一部では残ってるよ、その文化。
メモリが4kしかないと苦労するって
0520デフォルトの名無しさん
NGNGインラインアセンブラを使う場合には、コンパイラがサポートしてる可能性があるから、
それを調べる。
ほんとにアセンブラだけで書く場合には、事前にオフセットを計算して(<stddef.h> の
offsetof マクロを使うのが汎用的な方法)一覧を表に書き出しておいて、それを使う。
たとえば GNU as を使う場合だと、簡単なプログラムを作って、
#define OFFSET_XXX 3
#define OFFSET_YYY 8
みたいな一覧表を出力させて、これをアセンブラのソース中で #include したうえで
movl OFFSET_XXX(%eax), %eax
とかね。
0521512
NGNGツールのサポートに問い合わせた所、自前で計算してくれとのことでした。
一応、構造体の先頭アドレスは _構造体宣言名 で取得できるので結構楽かも。
0522デフォルトの名無しさん
NGNGまたは、どんなページを読めばいいの?
0523デフォルトの名無しさん
NGNGでもしょうがないのか・・・。
http://www.csl.sony.co.jp/person/fnami/asm.htm
http://www.csl.sony.co.jp/person/fnami/pentopt.htm
0524デフォルトの名無しさん
NGNGアスキーから出てる「はじめて読む8086」「始めて読む486」あたりかな。
あと、Intelのページは情報の宝庫。
0525デフォルトの名無しさん
NGNGおしえてもらったページや本を読んでみます。
ありがとうとがいます。
0526あなん
NGNGそういえば、以前は68系ってもマシンがあったから、
選択肢として現実的だったけど・・・今はどうなんでしょね?
やっぱx86マンセーなのかしらん。
つかヲレもずいぶん前に会社でx86系やらされたクチだけんど。
0527へぼぐらま〜
NGNGとか、
・XOR AX, AX
とかとか、
やってるのを良く見かけますが・・・テメェ自身にナニしてるんですか?
0528デフォルトの名無しさん
NGNG下は0にする。
0529デフォルトの名無しさん
NGNG8086系は16bitの時代は、セグメントとかアドレッシングとか
めんどうだったけど、今は、そうでもないんじゃない?
(自分自身、もうアセンブラは使わなくなってるんで、あれだけど)
0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNG使えないんでしょうか。
SSE命令とか使ってみたいんですが、アセンブラにはじかれます...。
なんかどこかの雑誌では、サービスパックVer3以降をインストールすればいいと書いて
あったのでインストールしてみたのですが変わりません.....。
教えてください。
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNGMS のサイトから Processor Pack ってのを探してきてインストール。
これで SSE 対応のアセンブラが入ります。
0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNGinvoke ExitWindowsEx,1,0
invoke ExitProcess,eax
0537デフォルトの名無しさん
NGNG0538>536
NGNGinclude \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.386
.model flat, stdcall
option casemap :none
.code
start:
jmp @F
szDlgTitle db "ColdBooT MASM",0
szMsg db "どうかな?",0
@@:
push MB_OK
push offset szDlgTitle
push offset szMsg
push 0
call MessageBox
invoke ExitWindowsEx,1,0
invoke ExitProcess,eax
end start
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNGあほか。
0541デフォルトの名無しさん
NGNGマルチスレッドでロックをかけたい場合、VCでは
CriticalSection(&cs);
を使いますが、これは遅いので
xchg eax, [ecx]
を使ってるプログラムがあります。
この根拠とか解説が詳しく載っているお勧めの文献はありますか?
0542デフォルトの名無しさん
NGNGIntel の Web サイトから拾える Intel Architecture Software Developer's Manual.
0543デフォルトの名無しさん
NGNGこれだとロック中だ、ということが解るだけでwaitしないから
CriticalSection()使ったほうが楽じゃない?
0544デフォルトの名無しさん
NGNGThanks、とっても3冊あってでかい・・・。
ちと検索してみます。
>>543
実際はループしてます。
L1:
mov eax, [ecx]
test eax, eax
jz L0
jmp L1
0545デフォルトの名無しさん
NGNGmovじゃダメだろーというのは置いといて、
ループ中は他のスレッドの処理が遅くなるから結果的に遅くなるような気がする。
待機中はできるだけCPUタイムを割り当てないようにしたほうが吉。
■ このスレッドは過去ログ倉庫に格納されています