トップページ⇒tech
1001コメント272KB

アセンブラ… (°Д°)ハァ?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
アセンブラ全般に関するスレッドです。

【前スレ】
アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/
0153デフォルトの名無しさんNGNG
>150
si,di,bpをいじらなければよし。
0154デフォルトの名無しさんNGNG
>>147
gccではそうでもない。
とはいっても esp ebp をむやみにいじるべきではないし、
破壊レジスタをむやみに増やすと最適化阻害の要因になる。
0155デフォルトの名無しさんNGNG
>>146
> MFCって?

MFC を知らないやつはバージョン管理したことない, DQN.
0156デフォルトの名無しさんNGNG
>>152
ん?普通のスピンロックじゃないの?
0157デフォルトの名無しさんNGNG
>>155
そこまで言い切れるほどメジャーな言葉じゃない
0158デフォルトの名無しさんNGNG
知らない香具師がそう思ってるだけw
0159デフォルトの名無しさんNGNG
noop
0160デフォルトの名無しさんNGNG
Microsoft Foundation Class
0161デフォルトの名無しさんNGNG
WindowsでVC++で開発してる人にとっては、
MFCは>>160の意味だし、VisualSourceSafeはMFCという呼び方をしない。
0162デフォルトの名無しさんNGNG
Microsoft Foundation Classes
0163デフォルトの名無しさんNGNG
162です。e-wordsとitmediaがclassで載せてますね。信じられん。MSは当然esつきですけど。
0164デフォルトの名無しさんNGNG
そういう用語集みたいのは適当な嘘多いよ。
以前にいろいろ目を通したことがあって、
電子とかハード寄りの堅い分野ではわりとまともな割合が多いけど、
ITだとかインターネットだとかパソコンだとかは嘘が目立つ。
編者の肩書きをみるとどことはいわないが教育機関の教官数人がかりで、
ああこういうところで悪貨の再生産をしているんだなあと思ったりした。
0165デフォルトの名無しさんNGNG
MFCは元はFreeBSDで使われるようになった言葉だよね。
今は他のプロジェクトでも普通に使われるのかな。

>>161
何て呼んでるの?
0166デフォルトの名無しさんNGNG
まあ>>143の文脈なら言葉は知らずとも意味はわかる
0167デフォルトの名無しさんNGNG
標準講座MFC6.0にはClassと載ってる。
0168デフォルトの名無しさんNGNG
>>165
「STABLE(か具体的なブランチ名)にマージ」
0169デフォルトの名無しさんNGNG
VCだと_asm{}ブロックでEAX,EBX,ECX,EDX,EDI,ESIは自由に使える
0170デフォルトの名無しさんNGNG
アセンブラってHSPの何十倍速いの?
0171デフォルトの名無しさんNGNG
HSPってトロイ入ってそうでこわい
ソースからビルドできるなら試してみたいけど
0172デフォルトの名無しさんNGNG
80x86の引き算に付いて質問です。
よくC言語のコードをアセンブラに出力すると、
sub eax, ecx
neg eax
という感じでsubの後にnegというコードが現れるのを見かけるのですが、
このnegは、いったい何をやってるのでしょうか?
subだけでもよさそうな気がしますが、
C言語の引き算はsubだけでは完結しないんでしょうか?

negは補数の正負を逆点する、とかいう説明を読んだことがありますが、
いまいち意味がわかりませんでした。
どういう場合にnegがないと困るのか教えてください。
0173デフォルトの名無しさんNGNG
補数表現すら知らないでアセンブラか?
少なくとも大学生以上ではないな
今は学校の勉強でもしておきなさい
0174デフォルトの名無しさんNGNG
2の補数なら判りますが、
なぜ引き算を行う局面でそれが必要なのかがさっぱりわからないです。

0175デフォルトの名無しさんNGNG
>>172
多分左辺と右辺が逆になってるんじゃね?
b - a;
という式が、何かの要因で
mox ecx, b
mox eax, a
sub eax, ecx
neg eax
という具合に変換されたとか。
つまり
-(a - b)
という解釈だな。


>>173
つーかお前さ、
こんな質問に学校とか関係ない話ではぐらかして
ちゃんと答えないってことはぁ、
なんも説明できねーってことだろ。
じゃ、お前も同類だよ(w
まじめに勉強してこいよ。
0176デフォルトの名無しさんNGNG
172です。

>>175
>多分左辺と右辺が逆になってるんじゃね?

やっと意味がわかりました!
今デバッガでやっと確認できましたが、それが正解みたいです。
でも例外なくsubの後にnegが入ってるのが謎ですけど、
これは手抜き工事か何かなのかな…。
とにかくありがとうございました。


>>173
( ゚д゚)、ペッ
0177デフォルトの名無しさんNGNG
>175
そんな偉そうに解説する程の事でも無い。
そもそもアセンブラ弄ってる人間なら
「さっぱりわからない」なんて言う訳ねぇだろ。

っつーか、そもそもお前の例えもおかしい。
学校で習いましたか?(藁
実際に使った事ねぇだろ?

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
>>177
ちょと、今更みっともないですよ?
0179デフォルトの名無しさんNGNG
176は周りに敵をつくるタイプやな。
0180デフォルトの名無しさんNGNG
やけにガっ子にこだわるね
0181デフォルトの名無しさんNGNG
ageまくってる時点で>>172は釣り
0182デフォルトの名無しさんNGNG
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
>( ゚д゚)、ペッ
0183デフォルトの名無しさんNGNG
なにその(ry
0184デフォルトの名無しさんNGNG
ヨンジュン
0185デフォルトの名無しさんNGNG
次スレのタイトルは

アセンブラ… ( ゚д゚)、ペッ

でおながいします
0186デフォルトの名無しさんNGNG
ソレダ!
0187デフォルトの名無しさんNGNG
次スレのタイトルは

アセンブラ… ( ゚д゚)、ペッ ヨンジュン

でおながいします
0188デフォルトの名無しさんNGNG
タイトルにハゲワラ、房が房に(ry
0189デフォルトの名無しさんNGNG
>>172の使っているコンパイラが気になる
0190デフォルトの名無しさんNGNG
PC/ATの質問です。
BIOSのサービスを使ってBX * 64の数値を表示させて
やりたいんですがどうすればよいでしょうか?

0191デフォルトの名無しさんNGNG
>>172
aレジスタのが速いってことか。そりゃないか
ペアリングとか。そりゃないか
0192デフォルトの名無しさんNGNG
直前に結果がEAXに固定された命令(乗除算とか)があったとか。
0193デフォルトの名無しさんNGNG
>>190
BX*64はシフト命令使え。
表示は INT10H でぐぐれ。
0194デフォルトの名無しさんNGNG
>>191
negはNP命令なんでペアリングはぶっちゃけありえないw
0195デフォルトの名無しさんNGNG
>>192
直後に eax に値が必要な命令を置くためってのもあるね。
0196デフォルトの名無しさんNGNG
手抜きコンパイラに一票。
たぶん1パスじゃねーの。
0197旅人達 ◆ahGjnhNBTw NGNG
お邪魔します。。C言語で素数一覧を作るプログラムを作ってたのですが、
アセンブリを習いながら早くしてみようと思っています。。
結果をファイル出力したいのですが、C言語のfprintf関数を使おうと思っています。
3つの引数をpushして、call fprintfして、add esp,0Chしようとしたのですが、
MASMでundefined symbolというエラーが出ます。。
外部変数の宣言をすればいのかな、と思いつつもサイトが引っかかってくれません。
どうかお教え願います。。
0198デフォルトの名無しさんNGNG
んな馬鹿やらないでインラインアセンブラ使いなよ・・・
0199デフォルトの名無しさんNGNG
ttp://www7.plala.or.jp/keny01/asm/win32/index.html
0200旅人達 ◆ahGjnhNBTw NGNG
それでやってたんですがせっかくだしasmファイルを作ってみたかったのです・・・すいません>_<;
0201デフォルトの名無しさんNGNG
>>199
VRAMの説明が投げやりで和露他
0202190NGNG
>>193
ありがとうございます。
激しく感謝です。
0203デフォルトの名無しさんNGNG
>197
はっきり言って、その辺に転がってる素数求めるCソースを
コンパイルした方がはやい。
作業的にも、実行速度的にも。
0204デフォルトの名無しさんNGNG
>>197
分割アセンブルでぐぐると、適当なのが引っかかると思うが。
0205デフォルトの名無しさんNGNG
最適化が優れたアセンブラを教えてくださいm(_ _)mペコリ
0206デフォルトの名無しさんNGNG
アセンブラって、最適化すんの?
パス増やしてジャンプ短くする程度とか?
0207デフォルトの名無しさんNGNG
ネムー.
0208デフォルトの名無しさんNGNG
最適化するアセンブラって

MOV [BX],AX
ADD AX,DX

を

ADD [BX},DX

にしてくれるようなアセンブラかのう?
0209デフォルトの名無しさんNGNG
outsb
nop
nop
nop
outsb
を
outsb
outsb
にしてくれるようなのじゃないの?
0210デフォルトの名無しさんNGNG
そこにnopをおいとくのが重要だったりした場合は?
0211デフォルトの名無しさんNGNG
>208がなんで最適化になるのか理解できないのは漏れがヴァカだからですか?(´・ω・`)
0212デフォルトの名無しさんNGNG
>>211
俺も同感。>>208は糞。
0213デフォルトの名無しさんNGNG
それいったら>>209も糞になるが…
程度の差はあるが
0214デフォルトの名無しさんNGNG
考えてみれば最近のCPUは最適化しながら実行しているようなもんだな。

0215デフォルトの名無しさんNGNG
昔私が作った例だと、
mov ax,si
mov si,ax
を
mov ax,si
に、
mov si,ax
mov si,ax
を
mov si,ax
に換えるくらいはやったけど。
0216デフォルトの名無しさんNGNG
>215
そんなんアセンブラ使う意味ないから高級言語に乗り換えれ。
アセンブラは人が最適化するから意味がある。
機械任せでいいなら苦労する意味すら無い。
0217デフォルトの名無しさんNGNG
>>215

ハァ?
0218デフォルトの名無しさんNGNG
>>210
重要なnopってなんだよw
0219デフォルトの名無しさんNGNG
>>218
ハードを叩いた事はないのか?
0220デフォルトの名無しさんNGNG
重要なnopというとwait以外にも遅延分岐とかアラインメントとか
まあ最適化を部分的にON/OFFできるなら何をやってくれてもいいけど
0221デフォルトの名無しさんNGNG
遅延分岐・・・・懐かしいな。
PlayStation初代機にR3000カスタムが積まれているけど、これは遅延分岐を
サポートしていたね。

結局スーパースカラになっていくと遅延分岐は速度向上の足かせになるので
取り払われてしまったが。
0222デフォルトの名無しさんNGNG
>>218
あちゃぱー
0223215NGNG
あー、そのアセンブラはCの出力をアセンブルするのが目的だったからね。
Cコンパイラの最適化が甘い部分を改善するためにニモニックのカットをしたわけよ。
0224デフォルトの名無しさんNGNG
>205の
「最適化が優れたアセンブラ」
ってのは、アセンブリ言語・ニモニックじゃぁなくて、erだから、コンパイラのことだろう。
>214
fishingか?
>考えてみれば最近のCPUは最適化しながら実行しているようなもんだな。
なんだよこれ。
ハードが最適化するのかぁ?んなアホな。
パイプラインやキャッシュ引きを最適化と呼ぶならお門違いだと思うけど。
0225デフォルトの名無しさんNGNG
μOP変換などは考え様によってはアセンブリ的最適化の逆を行っているかもしれん
0226デフォルトの名無しさんNGNG
デバッガの話もここでいいんですか?
0227デフォルトの名無しさんNGNG
>>224
レジスタリネーミングとかOOO実行とかも最適化といえるかもしれない。
0228デフォルトの名無しさんNGNG
>>218
後でJUMP命令入れてパッチが当てられるように
NOPで3バイト分確保しておくとかよくやってたな。
0229デフォルトの名無しさんNGNG
初めてアセンブラの勉強する為のテーマとしてブートローダに挑戦してるんですが
これって大風呂敷でしょうか?
0230デフォルトの名無しさんNGNG
墨染さくらにきいてくれ
0231デフォルトの名無しさんNGNG
大風呂敷っつーか、うまく動かないときに、どこがどう悪いのか、もっと分かりやすい題材のほうがよいと思われ。
0232デフォルトの名無しさんNGNG
推薦図書/必読書のためのスレッド PART 19
    http://pc5.2ch.net/test/read.cgi/tech/1089492835/
でアセンブラとコンパイラの関係についてもめてるから助けてやってよ。。。
0233デフォルトの名無しさんNGNG
>>232
ああいうのは放置しておけばいいよ
0234旅人達 ◆ahGjnhNBTw NGNG
>>197です。。どうもありがとうございました。
asmファイルを作れて少し感動です(*´∀`)
0235デフォルトの名無しさんNGNG
>>233
「ああいうの」ってアセンブラ=コンパイラとか言ってる奴だよね?
0236デフォルトの名無しさんNGNG
>>235
向こうでやれ。な?
0237デフォルトの名無しさんNGNG
アセンボラって
覚えたほうふあいいですか。
0238デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1084765853/224-240

http://pc5.2ch.net/test/read.cgi/tech/1091724463/336-387


アセンブラの話が出てくるとなぜ荒れますか。
0239デフォルトの名無しさんNGNG
>238
ageて荒れそうなネタ振るなヴォケ。
0240デフォルトの名無しさんNGNG
一日考えたのですがやっぱり分からないので教えてください。

Cの関数に入ったところに
  push  ebp
  mov  ebp, esp
  sub   esp, 8
  and   esp, -16
というコードがあるんですが、
  and   esp, -16
は一体何をしたいんでしょうか?
  and   esp, 0xfffffff0
と、スタック位置を256byteアラインメントしているようなんですが・・・。
少々ポインタ操作を誤っても隣の関数のスタック領域を破壊しないようにとの配慮なのでしょうか?
0241デフォルトの名無しさんNGNG
>>240の書き方では状況が分かりにくいかもしれませんのでソースも書いておきます。
Cソース:
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

です。よろしくお願いします。
0242240NGNG
あ、256byteではなく16byteですね、すいません。
0243デフォルトの名無しさんNGNG
>>241
ただ単にアライメントをとったほうが実行速度が
はやくなるからじゃないの。多分256byteでアライメント
してるのはPentium4のキャッシュラインのサイズを
意識してだと思うけど。

資料がないかIntelのサイトを軽く検索してみたけど
ちょうどいいのが見つからなかった。すまん。
0244デフォルトの名無しさんNGNG
>>240
DebugとReleaseでは変わる?
0245デフォルトの名無しさんNGNG
>>244
gccなんですが。
0246243NGNG
256byteじゃなくて16byteか。
Pentium4のキャッシュラインの話は間違ってるかも
しれん。適当に答えたので無視してくれ。恥ずかしい。
逝ってくる。
0247243NGNG
多分、実行速度の問題でそうなっているのは
当たっていると思う。
0248243NGNG
しつこいがPentium4のキャッシュラインは128byte。
それ以前は32byteだった。間違って覚えないでくれ。
0249デフォルトの名無しさんNGNG
128bitアラインがSSEなどで有利なのは確かだが
cygwinのプロローグコード生成のバグだった気がする
無駄な__allocaもあるし
0250240NGNG
レスありがとうございます。ご飯たべてました。

書き忘れましたが使ったgccのバージョンは3.2.3(mingw special)で、最適化は無しです。
3.3.3にアップデートしてみましたが吐かれるコードは__allocaも含めて同じでした。

速度的な問題なんですね、ありがとうございました。
0251240NGNG
ついでにVCTKで/Fa出力したところ、こうなりました。
; Line 1
  push  ebp
  mov  ebp, esp
; Line 2
  xor  eax, eax
; Line 3
  pop  ebp
  ret  0
とても読みやすいです。Cを道具にしてアセンブラを学ぶのには、コンパイラにVCTKを
使ったほうがいいのかもしれません。
0252デフォルトの名無しさんNGNG
/FAcs もオススメ
■ このスレッドは過去ログ倉庫に格納されています