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

アセンブラ… (・∀・)イイ!

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
めくるめく16進数。
機械語萌え。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
0002デフォルトの名無しさんNGNG
>1 機械語(マシン語)とアセンブラは違うと思われ….
0003デフォルトの名無しさんNGNG
アセンブラ教えてください
0004名無しさんNGNG
機械語は2進数と思われ・・・。
0005デフォルトの名無しさんNGNG
アセンブリ ∽ 言語
アセンブラ ∽ コンパイラ
アセンブル ∽ コンパイル
0006デフォルトの名無しさんNGNG
Borland ターボアセンブラ は
無料DLできますか。
0007デフォルトの名無しさんNGNG
>>1がアセンブラとマシン語を混同しているので
----------------- 終了 ------------------
0008デフォルトの名無しさんNGNG
>6 どうしても無料が欲しいの?

今なら1万5千円で買えるぞ
http://www.borland.co.jp/bcsuite/

DOSのC++コンパイラもついてるからワンダーウイッチにも使えるぞ
0009デフォルトの名無しさんNGNG
アセンブラは業務で仕方なくとか、
どうしても高速化したいときとかに使う物で、
趣味でやるもんじゃねーよ。
やったら最後、地獄にハマるんだなこれが・・・

高水準言語でお気楽に構えている方が正解だぜ。
0010デフォルトの名無しさんNGNG
nasmとかいろいろあるじゃん > フリーの
0011デフォルトの名無しさんNGNG
未経験だけど、アセンブリ怖い。変な命令書いたらCPUやメモリが壊れたりしない?
0012デフォルトの名無しさんNGNG
ハァ?
0013デフォルトの名無しさんNGNG
>>11
CPUは壊れない
しかしメモリメチャクチャ
ハードディスクぐちゃぐちゃってことはよくある
ウイルスより被害大(たった数字が1違っただけなのに〜)
なんてことはざらにある
001411NGNG
>>13
どひー・・・。それでは手が出せないなぁ。恐ろしや。
001513NGNG
普通はメモリの被害だけで助かることが多い。
ハードディスクへアクセスするにはそれなりに敷居があるからね。
0016デフォルトの名無しさんNGNG
Cで書こうがアセンブラで書こうが、危険性に大した差はない
HDDにアクセスって、デバイスドライバを書くのでもなければ
結局APIを呼ぶだけなので何が変わるわけでもない
0017デフォルトの名無しさんNGNG
Cで書けるようなことをわざわざアセンプラでやる必要はない。
>>16
の言っている程度のことでアセンブラを使うのは間違いである。
0018デフォルトの名無しさんNGNG
プロなら使ってもインラインのアセンブラくらいでしょ。
それも速度のためじゃなくてCじゃ書けない処理を行うため。
スーパースケーラーなCPUではパイプラインの動作を人間が
追いきれないので最適化でコンパイラに勝てるなどと思うのは
素人の浅知恵です。
もし、Cをアセンブラで書き直したら早くなったってのは元の
プログラムがダメだったってことだ。
001913NGNG
Cの最適化は最も適切な機械語コードを吐き出すわけではない。
部分的には最適化されていても、
全体を通してみると完全に最適化されいるわけではない。
アセンプラを使う理由はそこにある。
よってアセンブりコードはある程度複雑さを持っているということは自明であり、
複雑なことをするために相応の危険が伴う。
002013NGNG
>>18
あたりまえの事を言っているだけです。
0021デフォルトの名無しさんNGNG
はじめて読むマシン語、
はじめて読むアセンブラ

なら最近でも入手可能。

http://www.ascii.co.jp/searchA/namazu.cgi?idxname=www.ascii.co.jp&query=%82%CD%82%B6%82%DF%82%C4%93%C7%82%DE
0022デフォルトの名無しさんNGNG
>>19
別に危険は伴わないって
バグが発生しやすいだけ
何故アセンブラが危険を伴うと決めつけたがるんだ?
002319NGNG
>>22
アセンブラのバグ=危険なの!
あなたはアセンブラの経験が少ないのですか?
それともバグをあまりださない完璧な人だったのですね。
0024デフォルトの名無しさんNGNG
>>23
Cで書こうがバグがあったら危険だろ
アセンブラ云々は関係ない

Cで発生せずアセンブラでのみ起こるような危険など発生させたことはないが
具体例を挙げてみてくれ
0025デフォルトの名無しさんNGNG
>>13
>ハードディスクぐちゃぐちゃってことはよくある
無ぇよ
>ウイルスより被害大(たった数字が1違っただけなのに〜)
ハァ?

先入観と妄想が激しいようですな
0026デフォルトの名無しさんNGNG
>>24
例えばメモリのA番地からB番地までをクリアするコードを書いたつもりが
ループの終了条件を間違えてB番地以降もクリアしてしまった場合。
Cのコードならばsegmentation faultやアクセスバイオレーションで終了してくれるが、
アセンブラならばそのままメモリの最後までクリアしてしまう。
0027デフォルトの名無しさんNGNG
>>26
OS持っているメモリ保護機能はCで書こうがアセンブラで書こうが同じように動作する
アセンブラをなんだと思ってるの?
0028デフォルトの名無しさんNGNG
なんか、最適化で人間はコンパイラにかなわないって言ってるやつが
またいるよ(*´Д`*)

だったら、なんでCPUのアナライザなんか売ってんだよ。
人間の最適化が必要だからだろ。
0029デフォルトの名無しさんNGNG
1-44
グレート!
003013NGNG
>>27
わかった俺が馬鹿だった。80386以降はメモリ保護機能がついていたな。
0031デフォルトの名無しさんNGNG
>>27
ニーモニック"変換機"だと思われ
0032デフォルトの名無しさんNGNG
>>26
warata
00332NGNG
期待したんだがレベルの低いスレなのでsage

一般教養として身に付けとけ.アセンブラ判らないと
「キャッシュに載るように」なんてのも判らんだろ?
0034デフォルトの名無しさんNGNG
>>29
俺も「グレート!」です。
0035デフォルトの名無しさんNGNG
VC++のインラインアセンブラでジャンプテーブルを記述するにはどうしたらいい?
0036デフォルトの名無しさんNGNG
コンパイラに最適化で勝てない人間はアセンブラ触らないで下さい、って言う発言はダメ?
ああ、もちろん手作業で最適化するのは時間が掛かるけどね。
x86アセンブラなら色々idiomあるし、触っても良いじゃない。
0037デフォルトの名無しさんNGNG
>36
最適化なんてしなくてもいいように技術が進化してるんだから、過去の遺産は棄てなさいね。俺は32歳のプログラマーだけど、年収3000万だよ。
0038デフォルトの名無しさんNGNG
君らが書く位のアセンブリのルーチンならCのソースコードレベルで最適化した
方が速いんだよ。
そりゃ中にはそれ以上のことをやる人はいるけど、アセンブラで動く物作った
位で得意になってるようなやつには吉野家のコピペ貼っちゃうぞ。
0039デフォルトの名無しさんNGNG
>>37
自慢がしたいだけ?逝ってよし
0040デフォルトの名無しさんNGNG
>>36 イディオムなぞに頼っていてはプロセッサ変わっただけで通用しなくなるよ。
Pen3->Pen4とかの違いでもうだめじゃん。
0041デフォルトの名無しさんNGNG
>>9
>アセンブラは業務で仕方なくとか、
>どうしても高速化したいときとかに使う物で、
>趣味でやるもんじゃねーよ。
???
どっちかというと趣味でやる(やりたくなる)もんじゃないの?
高級言語だと靴の上から足を掻いてるみたいで気持ち悪い−もっとダイレクトに書いてみたい、という動機で。
0042デフォルトの名無しさんNGNG
>>41
そういう方はどうぞやってください。
0043デフォルトの名無しさんNGNG
ホビイスト(と限定しなくてもいいか)の知的探究心を満足させるものとしては最高だと思うよ。ソフトウエアの一番底、これより下はない、という所までのぞき見る事ができる訳だから。
ホビイストがプログラミングする動機は「面白いからやる、やりたいからやる」なわけだから、変な理由をつけて止める理由はないよね。
プロになった場合でもアセンブリの経験がないより、あった方がいいんでしょ、使わないまでも。
やりたい人はおおいにやりましょう。
0044デフォルトの名無しさんNGNG
x86のアセンブラプログラマの方っているんでしょうか?
もしいたら、どんな仕事してるかおしえてちょ!!
0045デフォルトの名無しさんNGNG
43の意見に賛成。
だけど、もう一方で普通の人はコンパイラに勝てないというのも正しいと思う。
そんなわけで、アセンブラを勉強するのに良い方法。
Cで簡単な関数を書いて、アセンブリソースを出力してみる。
これで勉強するとCでもアセンブラでも速いコードが書けるようになるよ。
0046デフォルトの名無しさんNGNG
キャリー萌え
0047キャリーNGNG
CPUの構成要素としてはただの1ビットに過ぎないがとてもカワイイ。
0048デフォルトの名無しさんNGNG
>>37
最適化しなくていい世界に住んでるあんたは幸せだな。
世の中そういうところだけじゃないよ。
0049デフォルトの名無しさんNGNG
物理的な構成要素としてはただの電圧の変化に過ぎないのがとてもピカチュウ。
0050デフォルトの名無しさんNGNG
x86 アセンブラ勉強したいなら 今ならDelphiから入ったらいいかもね
インラインアセンブラ強力だし
 Delphiのコンパイラの最適化は 多少弱いから 使う価値あるしさ
0051デフォルトの名無しさんNGNG
>>48
最適化はコンパイラがやってくれるので心配無用です
0052デフォルトの名無しさんNGNG
>>51
あんたはタイトなループをCで書いて満足な速度出せますか?
0053デフォルトの名無しさんNGNG
>>52
具体的にどんな処理を書くときの話?
005451じゃないけどNGNG
タイトなループが実行時間に大きく影響するようなプログラムを
書いて無い。
0055デフォルトの名無しさんNGNG
そんなにコンパイラの最適化って優秀なのか?
2,3年前の話だけど、本を見ながらソースをアセンブラに書き直したら
何割も早くなった事がある。
素人のおれがやっても、そんなだからプロがやったらもっと
速くなるんじゃないか?
それとも、この2,3年の間に飛躍的にコンパイラの技術が発展したとか?
0056デフォルトの名無しさんNGNG
ループを最適化する必要がある場合もあればない場合もある。
だがプロファイルもとらずに最初から高速化する奴はヴァカ
0057デフォルトの名無しさんNGNG
56がいいこと言った。・
>>55 飛躍したのはCPUだよ。動作が複雑化して単純な最適化は通用しなくなったのさ。
今自分が使ってるCPUに実行ユニットがいくつ有って、パイプライン何段だか知ってる?
0058デフォルトの名無しさんNGNG
アセンブラで最適化できる場合って
全く同じ処理を何度もする場合でしょ
そんなケースってほとんどない気もするけど
でも、今はいろいろCPUあるし・・・
だから意味ないと思う
0059名無しさんNGNG
>37
100万くれ
0060デフォルトの名無しさんNGNG
>>58
ゴゴゴゴゴルァ!!
自社ライブラリを各CPU毎にアセンブラで最適化する身にもなってみやがれ
氏ぬよもう
0061デフォルトの名無しさんNGNG
MSやらBorlandのコンパイラなら、人間最適化のほうがまだまだ優秀。
インテルのコンパイラは見たことない。
0062デフォルトの名無しさんNGNG
駄スレかと思ったら、けっこう議論が白熱しているね。
0063デフォルトの名無しさんNGNG
>>61
また知ったか君が・・・
でも人間を最適化出来たらそれが一番だろうな
0064デフォルトの名無しさんNGNG
>>62
内容は駄スレに値する程度のものしかありません
ここは抽象的な事を書いて知ったかするためのスレです
0065デフォルトの名無しさんNGNG
>>61 >>63
どっちでもいいから、煽ってないでなにか根拠を示せよ。
006658NGNG
>>60
アセンブラで最適化する必要のあるライブラリーってなんですか?
DSP以外にあるんでしょうか?
0067デフォルトの名無しさんNGNG
>>63-64
おまえが知ったかなんだろ?
アセンブラのコーディングなんてやったことないんだろ?
自分の部下にやらせているんだろ?
0068デフォルトの名無しさんNGNG
具体例も根拠も示さず最適化がどうのと語っている時点で
このスレが知ったかの固まりの駄スレであることは明白だろう
0069デフォルトの名無しさんNGNG
アセンブラは簡単に逆汗が通らない様なコードが書けるから、
パスワードの処理なんかに最適だと思うけど。
コンパイラなんかで書いていたら、すぐに解読されてしまうよ。
0070キャリー萌えNGNG
PC(プログラムカウンタ)   王様
SP(スタックポインタ)    魔法使い
ステータスレジスタ/フラグ   貴族
アキュムレータ/汎用レジスタ  雑兵
裏レジスタ           伏兵
セグメントレジスタ       嫌われ者
0071デフォルトの名無しさんNGNG
>>68
なぜ?
実際にアセンブラなんて使ったことなくても
コンピューターの仕組みがわかってれば
ある程度のことは予想つくのでは?
物理とか化学の勉強したことないの?
自然現象もその類
0072デフォルトの名無しさんNGNG
>>69
実行中の状況をトレースされたら終わりだと思うが?
0073デフォルトの名無しさんNGNG
>66
3D関係。リアルタイムだから間に合わなければ速くしなければ使い物にならないので。

あとLightwave, PhotoShopのプラグインなんかもコンパイラの対応していない
最新の命令(3DNOW!SSE2など)を使うためにアセンブラ使わざるを得ないんじゃないの?
よく知らないけど。
0074デフォルトの名無しさんNGNG
>>71
予想で適当なことを書くことを知ったかと呼びます
0075デフォルトの名無しさんNGNG
>>71
また、そういう意味のないたとえ話を…。
まぁ、机上の知識でもいいから、なんか具体的な話をしてみれよ。
0076デフォルトの名無しさんNGNG
明日はこのスレは根拠となるアセンブラコードでごちゃごちゃしているかも・・・
0077デフォルトの名無しさんNGNG
単純な例でアルファブレンドにしても、
3Dで複雑なワンスキンメッシュのモーフィングも
アセンブラ使わんとマトモな速度でないぞ
0078デフォルトの名無しさんNGNG
>>73
>3D関係。リアルタイムだから間に合わなければ速くしなければ使い物にならないので。
リアルタイムならフレームレートを落とすだけ
ムービーを作るときなどのレンダリングならリアルタイムである必要はないので
間に合わないもへったくれもない
だから3D関係だからというのは当てはまらない

>コンパイラの対応していない最新の命令
これは確かにアセンブラを使わなければどうにもならないが
0079デフォルトの名無しさんNGNG
昔のVRAMの構成で画像を1ドット左スクロールする場合とかアセンブリ使いたくなりそう。
今は構成が違うから関係なさそうだけど。
0080デフォルトの名無しさんNGNG
>>78
リアルタイム描画が必要な状況では、
フレームレートが落ちてると見苦しい事が多いので、
無理をしてでも稼ごうとするもの。

レンダラのプレビューならそれでも良いんだろうけど、
デモやゲームだと見苦しいよ
0081デフォルトの名無しさんNGNG
>>77
αブレンドは良く話題に出るがアセンブラを使わなくても高速化する方法は
そこらのゲーム作成系の掲示板でいつも話題が出る
後者はビデオカードの助けがないと、どっちみちまともな速度で動かない
0082デフォルトの名無しさんNGNG
>>72
そのトレーサーが使え無い様にする事もできるのだが。
0083デフォルトの名無しさんNGNG
>>81
その手の方法だと、トリッキーな演算するんで、逆に読みづらくなるよ。
それに、エロゲ作るんじゃないんだから、αブレンドだけで60fpsが出たからといって満足はしないよ。
フェード中にちびキャラいくつも動かしたいとか、要求はいくらでも出てくる。
0084デフォルトの名無しさんNGNG
>>82
てゆうかロジックがばれたら破られるパスワードなんて実際には使い物にならない。
0085デフォルトの名無しさんNGNG
3D関係はアセンブラで最適化できるほど、短い処理じゃないですよ
0086デフォルトの名無しさんNGNG
誰も実際のコード出さんな。
0087デフォルトの名無しさんNGNG
>>82
ロジックを解析しなくても、分岐を書き換えればそれで終わりです
0088デフォルトの名無しさんNGNG
>>85
別に全部アセンブラ化するわけではないし(場合のよってはやったが)、
先にCでプロトタイプ作っとけば、特に困難なわけではない。
ともかく高速化の要求が現実にある以上やらざるを得ないんだよね。

なんか未経験妄想君っぽいんでもう相手にするのは控えるよ。じゃあね。
0089ANGNG
SIMD使う為にアセンブラって言っても
X87FPUは全く知る必要は無いし、
Cで元のコード書いて、ループの中だけ
インラインアセンブラで置き換えれば良いだけと、
あんまりアセンブラの知識は必要なさそう。
0090デフォルトの名無しさんNGNG
>なんか未経験妄想君っぽいんでもう相手にするのは控えるよ。じゃあね
逃走
>先にCでプロトタイプ作っとけば
そんなしょぼいプログラムですか・・・
現代の話じゃないそうです
0091デフォルトの名無しさんNGNG
>>90 そんなしょぼいプログラムですか・・・

は?
0092デフォルトの名無しさんNGNG
ひ?
0093デフォルトの名無しさんNGNG
1ビットスクロール(指定されたメモリブロックを連続したビット列とみなして全体を1ビットシフトする)

ターゲットアドレスを変化させながら ローテート命令を必要回繰り返すだけ。

Cだとどうなる?
0094デフォルトの名無しさんNGNG
今日はもう放置しておいた方がよろしいかと
0095デフォルトの名無しさんNGNG
全部あぼ〜んしました。
0096ageNGNG
次の日になりました。
0097デフォルトの名無しさんNGNG
cdqってどういう意味ですか。
0098デフォルトの名無しさんNGNG
Convert Doubleword to Quadword
0099デフォルトの名無しさんNGNG
>>93
とりあえずリトルエンディアンなら

int *p, ld = 0;
for (p = startp; p < endp; p++) {
int d = *p; *p = d << 1 | ld; ld = (unsigned int)d >> 31;
}
こんな感じ(ビット並びにもよるけど)。でも、最近のCPUならこの処理
のネックはローテイトには無いでしょう。考えなきゃいけないのは、
1.データのロードストア方法(Dキャッシュ周辺)
2.パイプラインストールの回避。これは特にCPUに依存。

って辺りで。といっても、私自身はアセンブラ不要なんて考えは
さらさら無くて、ハードに近い部分や、特定条件(引数の範囲が
特殊でそれによる最適化が出来たり)での有用性はあるし、業務でも
使っているので、このスレで頭ごなしに否定している人を見ると
「なんだかなぁ」とは思うんだけど。
0100デフォルトの名無しさんNGNG
>>99
このスレで頭ごなしに否定している人ってどれのこと?
見あたらないんだけど妄想ですか?
0101デフォルトの名無しさんNGNG
>>CDQ
EAX と EBX を合体させて、
EAX を上32ビット、EBX を下32ビットとして、計64ビットの
レジスタとして使うって事?
■ このスレッドは過去ログ倉庫に格納されています