アセンブラ… (°Д°)ハァ?
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG【前スレ】
アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
0153デフォルトの名無しさん
NGNGsi,di,bpをいじらなければよし。
0154デフォルトの名無しさん
NGNGgccではそうでもない。
とはいっても esp ebp をむやみにいじるべきではないし、
破壊レジスタをむやみに増やすと最適化阻害の要因になる。
0155デフォルトの名無しさん
NGNG> MFCって?
MFC を知らないやつはバージョン管理したことない, DQN.
0156デフォルトの名無しさん
NGNGん?普通のスピンロックじゃないの?
0157デフォルトの名無しさん
NGNGそこまで言い切れるほどメジャーな言葉じゃない
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNGMFCは>>160の意味だし、VisualSourceSafeはMFCという呼び方をしない。
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG以前にいろいろ目を通したことがあって、
電子とかハード寄りの堅い分野ではわりとまともな割合が多いけど、
ITだとかインターネットだとかパソコンだとかは嘘が目立つ。
編者の肩書きをみるとどことはいわないが教育機関の教官数人がかりで、
ああこういうところで悪貨の再生産をしているんだなあと思ったりした。
0165デフォルトの名無しさん
NGNG今は他のプロジェクトでも普通に使われるのかな。
>>161
何て呼んでるの?
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG「STABLE(か具体的なブランチ名)にマージ」
0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGソースからビルドできるなら試してみたいけど
0172デフォルトの名無しさん
NGNGよくC言語のコードをアセンブラに出力すると、
sub eax, ecx
neg eax
という感じでsubの後にnegというコードが現れるのを見かけるのですが、
このnegは、いったい何をやってるのでしょうか?
subだけでもよさそうな気がしますが、
C言語の引き算はsubだけでは完結しないんでしょうか?
negは補数の正負を逆点する、とかいう説明を読んだことがありますが、
いまいち意味がわかりませんでした。
どういう場合にnegがないと困るのか教えてください。
0173デフォルトの名無しさん
NGNG少なくとも大学生以上ではないな
今は学校の勉強でもしておきなさい
0174デフォルトの名無しさん
NGNGなぜ引き算を行う局面でそれが必要なのかがさっぱりわからないです。
0175デフォルトの名無しさん
NGNG多分左辺と右辺が逆になってるんじゃね?
b - a;
という式が、何かの要因で
mox ecx, b
mox eax, a
sub eax, ecx
neg eax
という具合に変換されたとか。
つまり
-(a - b)
という解釈だな。
>>173
つーかお前さ、
こんな質問に学校とか関係ない話ではぐらかして
ちゃんと答えないってことはぁ、
なんも説明できねーってことだろ。
じゃ、お前も同類だよ(w
まじめに勉強してこいよ。
0176デフォルトの名無しさん
NGNG>>175
>多分左辺と右辺が逆になってるんじゃね?
やっと意味がわかりました!
今デバッガでやっと確認できましたが、それが正解みたいです。
でも例外なくsubの後にnegが入ってるのが謎ですけど、
これは手抜き工事か何かなのかな…。
とにかくありがとうございました。
>>173
( ゚д゚)、ペッ
0177デフォルトの名無しさん
NGNGそんな偉そうに解説する程の事でも無い。
そもそもアセンブラ弄ってる人間なら
「さっぱりわからない」なんて言う訳ねぇだろ。
っつーか、そもそもお前の例えもおかしい。
学校で習いましたか?(藁
実際に使った事ねぇだろ?
a = ( b - a ) * b; //eax = a, ebx = b
sub eax, ebx ; a - b
neg eax ; -( a - b ) = b - a
mul ebx ; ( b - a ) * b
0178デフォルトの名無しさん
NGNGちょと、今更みっともないですよ?
0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNG>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNGアセンブラ… ( ゚д゚)、ペッ
でおながいします
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNGアセンブラ… ( ゚д゚)、ペッ ヨンジュン
でおながいします
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGBIOSのサービスを使ってBX * 64の数値を表示させて
やりたいんですがどうすればよいでしょうか?
0191デフォルトの名無しさん
NGNGaレジスタのが速いってことか。そりゃないか
ペアリングとか。そりゃないか
0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNGBX*64はシフト命令使え。
表示は INT10H でぐぐれ。
0194デフォルトの名無しさん
NGNGnegはNP命令なんでペアリングはぶっちゃけありえないw
0195デフォルトの名無しさん
NGNG直後に eax に値が必要な命令を置くためってのもあるね。
0196デフォルトの名無しさん
NGNGたぶん1パスじゃねーの。
0197旅人達 ◆ahGjnhNBTw
NGNGアセンブリを習いながら早くしてみようと思っています。。
結果をファイル出力したいのですが、C言語のfprintf関数を使おうと思っています。
3つの引数をpushして、call fprintfして、add esp,0Chしようとしたのですが、
MASMでundefined symbolというエラーが出ます。。
外部変数の宣言をすればいのかな、と思いつつもサイトが引っかかってくれません。
どうかお教え願います。。
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG0200旅人達 ◆ahGjnhNBTw
NGNG0201デフォルトの名無しさん
NGNGVRAMの説明が投げやりで和露他
0203デフォルトの名無しさん
NGNGはっきり言って、その辺に転がってる素数求めるCソースを
コンパイルした方がはやい。
作業的にも、実行速度的にも。
0204デフォルトの名無しさん
NGNG分割アセンブルでぐぐると、適当なのが引っかかると思うが。
0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNGパス増やしてジャンプ短くする程度とか?
0207デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNGMOV [BX],AX
ADD AX,DX
を
ADD [BX},DX
にしてくれるようなアセンブラかのう?
0209デフォルトの名無しさん
NGNGnop
nop
nop
outsb
を
outsb
outsb
にしてくれるようなのじゃないの?
0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG俺も同感。>>208は糞。
0213デフォルトの名無しさん
NGNG程度の差はあるが
0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNGmov ax,si
mov si,ax
を
mov ax,si
に、
mov si,ax
mov si,ax
を
mov si,ax
に換えるくらいはやったけど。
0216デフォルトの名無しさん
NGNGそんなんアセンブラ使う意味ないから高級言語に乗り換えれ。
アセンブラは人が最適化するから意味がある。
機械任せでいいなら苦労する意味すら無い。
0217デフォルトの名無しさん
NGNGハァ?
0218デフォルトの名無しさん
NGNG重要なnopってなんだよw
0219デフォルトの名無しさん
NGNGハードを叩いた事はないのか?
0220デフォルトの名無しさん
NGNGまあ最適化を部分的にON/OFFできるなら何をやってくれてもいいけど
0221デフォルトの名無しさん
NGNGPlayStation初代機にR3000カスタムが積まれているけど、これは遅延分岐を
サポートしていたね。
結局スーパースカラになっていくと遅延分岐は速度向上の足かせになるので
取り払われてしまったが。
0222デフォルトの名無しさん
NGNGあちゃぱー
0223215
NGNGCコンパイラの最適化が甘い部分を改善するためにニモニックのカットをしたわけよ。
0224デフォルトの名無しさん
NGNG「最適化が優れたアセンブラ」
ってのは、アセンブリ言語・ニモニックじゃぁなくて、erだから、コンパイラのことだろう。
>214
fishingか?
>考えてみれば最近のCPUは最適化しながら実行しているようなもんだな。
なんだよこれ。
ハードが最適化するのかぁ?んなアホな。
パイプラインやキャッシュ引きを最適化と呼ぶならお門違いだと思うけど。
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNGレジスタリネーミングとかOOO実行とかも最適化といえるかもしれない。
0228デフォルトの名無しさん
NGNG後でJUMP命令入れてパッチが当てられるように
NOPで3バイト分確保しておくとかよくやってたな。
0229デフォルトの名無しさん
NGNGこれって大風呂敷でしょうか?
0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1089492835/
でアセンブラとコンパイラの関係についてもめてるから助けてやってよ。。。
0233デフォルトの名無しさん
NGNGああいうのは放置しておけばいいよ
0235デフォルトの名無しさん
NGNG「ああいうの」ってアセンブラ=コンパイラとか言ってる奴だよね?
0236デフォルトの名無しさん
NGNG向こうでやれ。な?
0237デフォルトの名無しさん
NGNG覚えたほうふあいいですか。
0238デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1091724463/336-387
アセンブラの話が出てくるとなぜ荒れますか。
0239デフォルトの名無しさん
NGNGageて荒れそうなネタ振るなヴォケ。
0240デフォルトの名無しさん
NGNGCの関数に入ったところに
push ebp
mov ebp, esp
sub esp, 8
and esp, -16
というコードがあるんですが、
and esp, -16
は一体何をしたいんでしょうか?
and esp, 0xfffffff0
と、スタック位置を256byteアラインメントしているようなんですが・・・。
少々ポインタ操作を誤っても隣の関数のスタック領域を破壊しないようにとの配慮なのでしょうか?
0241デフォルトの名無しさん
NGNGCソース:
int main(void) {
return 0;
}
gcc -S -masm=intel sample.cの出力:
.intel_syntax
.file "sample.c"
.def ___main; .scl 2; .type 32; .endef
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
push ebp
mov ebp, esp
sub esp, 8
and esp, -16
mov eax, 0
mov DWORD PTR [ebp-4], eax
mov eax, DWORD PTR [ebp-4]
call __alloca
call ___main
mov eax, 0
leave
ret
です。よろしくお願いします。
0242240
NGNG0243デフォルトの名無しさん
NGNGただ単にアライメントをとったほうが実行速度が
はやくなるからじゃないの。多分256byteでアライメント
してるのはPentium4のキャッシュラインのサイズを
意識してだと思うけど。
資料がないかIntelのサイトを軽く検索してみたけど
ちょうどいいのが見つからなかった。すまん。
0244デフォルトの名無しさん
NGNGDebugとReleaseでは変わる?
0245デフォルトの名無しさん
NGNGgccなんですが。
0246243
NGNGPentium4のキャッシュラインの話は間違ってるかも
しれん。適当に答えたので無視してくれ。恥ずかしい。
逝ってくる。
0247243
NGNG当たっていると思う。
0248243
NGNGそれ以前は32byteだった。間違って覚えないでくれ。
0249デフォルトの名無しさん
NGNGcygwinのプロローグコード生成のバグだった気がする
無駄な__allocaもあるし
0250240
NGNG書き忘れましたが使ったgccのバージョンは3.2.3(mingw special)で、最適化は無しです。
3.3.3にアップデートしてみましたが吐かれるコードは__allocaも含めて同じでした。
速度的な問題なんですね、ありがとうございました。
0251240
NGNG; Line 1
push ebp
mov ebp, esp
; Line 2
xor eax, eax
; Line 3
pop ebp
ret 0
とても読みやすいです。Cを道具にしてアセンブラを学ぶのには、コンパイラにVCTKを
使ったほうがいいのかもしれません。
0252デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています