アセンブラ… (;´Д`) ハァハァ

このエントリーをはてなブックマークに追加
アセンブラ全般に関するスレッドです。

【前スレ】
アセンブラ… (*´д`*)アハァ…
http://pc5.2ch.net/test/read.cgi/tech/1076157613/l50
【過去ログ】
アセンブラ… (゚д゚)ウマー
http://pc2.2ch.net/test/read.cgi/tech/1060928704/l50
アセンブラヽ(`Д´)ノモルァ
http://pc2.2ch.net/tech/kako/1040/10402/1040297337.html
アセンブラヽ(`Д´)ノモルァ
http://pc3.2ch.net/tech/kako/1016/10169/1016991911.html
アセンブラ… (・∀・)イイ!
http://pc.2ch.net/tech/kako/1002/10022/1002267809.html
3デフォルトの名無しさん:04/06/22 19:02
This is kusosure!!
5デフォルトの名無しさん:04/06/22 20:17
ティンポ(;´Д`) ハァハァ
マムコ(;´Д`) ハァハァ
再利用されずにあぶれたスレ('A`)
[あせん] ぶりゃー!]
http://pc5.2ch.net/test/read.cgi/tech/1087618810/
アセンブラとは
妙齢の女性の、たっぷりと汗を含んだ純白のブラジャーのことを言う
するとアセンブルとは
アセンブラを十分に振り切って汗をおとすことでなければならない
したがって、マクロアセンブラとは
黒いアセンブラのことである

では、ニモニックとは何か
これが諸君への課題である。

回答を提示した結果、不都合が生じても
当局は一切関知しないからそのつもりで


ニモ(魚)の肉。
ニーモニック、mnemonicは実はムネモニクと読む。
胸も肉、つまり
「なんでおっぱいにハァハァするのですか? 肉です。」
という意味だ。
だれかOpteronで64ビットモード試してみた強者はいないのか。
なんでこんなもんに対応しなきゃならんのだと愚痴タレながらドライバ改造してる
人なら一人くらいいそうだがw
アセンブラで Windows アプリケーションを作成しようとしている私。
>>12
おお、頑張ってください。

アセンブラで開発されたWindowsアプリケーションといえば…
http://www.vector.co.jp/soft/win95/hardware/se254476.html
フルアセンブラでWinアプリ作っても意味無いyo。
面倒なだけで、やることはCで作るのと大してかわらんからな。
極小アプリ作るにはCだけじゃ限界がー
>>15
crt0を自前で用意して、標準ライブラリを一切使わない。
>>15
これでexeサイズ2.5k。
コメントはずせば警告がでるが、2.0kになる。

#include <windows.h>
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"kernel32.lib")
#pragma comment(linker,"/nodefaultlib:libc.lib /entry:CodeStart /opt:nowin98")
//#pragma comment(linker,"/merge:.rdata=.text")
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
void CodeStart()
{
ExitProcess(WinMain(GetModuleHandle(NULL),NULL,GetCommandLine(),SW_SHOWDEFAULT));
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MessageBox(NULL,"TEST","",MB_OK);
return 0;
}
>>17
WinMainのlpCmdLineはGetCommandLine()から自分自身のプログラムのパスの部分を抜いたものってことになっているんで
直接GetCommandLine()を渡すわけには行かないんだな
コマンドラインの解釈ってめんどいよな
なんでCRTが処理すんだよOSの仕事だろ
>>19
CommandLineToArgvW() では不満かえ?
うわこんなAPIあったのかー
ありがd
>コマンドラインの解釈ってめんどいよな

およそアセンブラを扱うスレで聞くようなコメントではないなw
評価ボードかってきて動くものを作ってみればいかにWin環境が恵まれているが
恐竜のように肥大化しているかがわかると思うよ
>>17
>コメントはずせば警告がでるが、2.0kになる。

まだ甘いな。
/merge:.data=.text /merge:.rdata=.text /section:.text,erw
にすれば1.0KBか1.5KBになるはず。
/section:.text,erwをつけておかないとNT4.0では動かない。
>>22
確かに。
今そのコマンドラインを渡す側をアセンブラで作ってるとゆーことで今日のところは簡便してくだちい
25デフォルトの名無しさん:04/06/23 18:02
>>23
それやったら、WInXP SP2で動かない予感がするのだが・・・
26デフォルトの名無しさん:04/06/23 18:22
>>1
またハァハァシリーズかよ!!
キモい
     _ _/  _ _/      /
    _ _/ _ _/ _  /
     /      /      /
   __/   __/   _/
>>25
そうか? XP SP2 では実行可能属性が付いていないメモリからのコード実行が
できなくなるわけだろ。/section:.text,eで実行可能属性を付けているのだが。
今XP SP1aで試してみたが、/section:.text,rwとして実行可能属性を外して
コンパイルしても問題なく実行できたが、SP2だとこれは動かんのだろうな。
29さっきゅん:04/06/23 20:50
SP2でも動かなくなるのは一部の機種の罠ー
>>28
そうだったのか…

実行可能属性が付いてるメモリは書き込み付加、
書込可能属性が付いてるメモリは実行不可能
と勘違いしていたようだ、すまんかった。
このスレタイは今までで一番いいね。
汗かいてるし。 アセンブラだけに。
・・・
>>31
30代のセンスネタキタ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─ !!
アセンブラでActiveXやDirectXは使えないの?
使える。沢村って奴がスゴい。
沢村とやらは、何故にアセンブラでそんなことをやろうとするのか。
何のメリットもない単なるオナニーにしか思えないんだが。
メリットってなんですか?その書き込みにはメリットがあるんですか?
好きでやってるんだし、別にオナニーでもいいと思うけどな
DirectXと言えばゲーム
これに関してはメリット大有り
CやC++でできる以上、面倒なだけでアセンブラでもできる。
でもメリットなんて無いよ。
高速化したければその部分だけインラインアセンブラ使えばいい。
41デフォルトの名無しさん:04/06/24 21:29
次のタイトルは

「 アセンブラ… 。・゚・(ノД`)・゚・。 ウエーン 」

でお願いします
これだからハード任せのプログラマは…

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < >>950盗り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                        ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )
44デフォルトの名無しさん:04/06/24 21:41
>>36
アセンブラを学習することのメリットはあるんだが、説明するのはメンドウだな。
45デフォルトの名無しさん:04/06/25 10:42
CPUの速度が今以上に上がれば、高速なアプリなんか苦労して作る必要なんか極端に減るよ。
8Bit、16Bit全盛のころはアセンブリ言語で書くのが普通だったのが、32Bitの高速CPUが出てきたころには
Cなどの高級言語で書くのが一般的になった。
今時、アセンブリ言語でプログラムを組む機会はほとんどない。
このまま、CPUの速度が向上すれば、VM上で動作する言語でほとんどのアプリが作成されるようになるんじゃないの?
要するに、ハードウェアの進歩によって、実行速度よりも、簡単に開発できることが優先されるようになるってこと。
46デフォルトの名無しさん:04/06/25 10:57
NASMのトレンドとか追いかけてませんが、SSE3のコード吐けるパッチとか
ないですかね?
>>45
って10年前もいってたな。
というか、レイトレやリアルタイム3Dなど、計算量が膨大なアプリでは、ベクトルの内積・外積、行列の乗算、変換くらいは、SSEや3DNow!をサポートするためにアセンブリで書くよ。あとx87のパイプラインも目いっぱい使いたいしね。

え、またこの話題ぶり返してるの?
1スレ目の最初の方で結論出てると思ったが。
アセンブリ書いて得するのは書いている本人。
コンピュータの動作等に対する理解が深まる。
まあ、やってる人は殆ど趣味でやってるんだろうから
ほっとけってこった。
いい加減、くだらんネタは放置しろ。
こんなんだから、この板じゃまともなネタ師が
育たない、なんて言われるんだ。
>>45
>8Bit、16Bit全盛のころはアセンブリ言語で書くのが普通だったのが
(16bit ってのは見なかったことにするとして)
それはリーズナブルな価格のコンパイラが無かったからであって
速度云々ではない。
なんでアセ否定する人っていつも実用前提で書くのん?
趣味なんだよオタクなんだよ俺は
口出しするなあああああああああああああきええええええええええええええ
高級言語なんてのは、ただ高いだけの鉄筋コンクリート製のビルみたいなもんだ。
そこへいくと低級言語は、古式ゆかしい木造建築に通じるものがある。
無論、99%は風化し忘れ去られるだろうが、1000年経っても生き残るのは我々なのさ。
そのうち伝統工芸に指定されるかもしれんぞ。
人間国宝デーブ・カトラー
要するに古墳とかピラミッドみたいなものでしょ? > アセンブラ
後世の人間は「あぁ、昔の人は力押しの人海戦術で大変だったんだなぁ」と思いながら、土産物のZ80饅頭を売りさばき、
C+++++++くらいの超高級言語でプログラムを組むのさ。
>C+++++++
error: invalid lvalue in increment
斡旋ブラーどもにはCすら書けないようだ
Z80饅頭にワロタ
近くのFORTRAN遺跡ではパンチカード(まんまか)、
メインフレーム遺跡ではオープンリール磁気テープ型バームクーヘンが人気だそうだ。
60デフォルトの名無しさん:04/06/25 16:41
マシン語出来る人間は何だって書けるが
CやJAVAしか書けない低能はそれだけ
何で偏る人がいるんだろうかね
共生できなきゃプログラマじゃねーよ
基板設計みたいなもんだな。いまはLSIの組み合わせが主流だが・・・。
アセンブラが必要になることはたまにはあるよ。
63デフォルトの名無しさん:04/06/25 16:55
ドライバもかけないのね
C出来るやつはアセンブラだってやればできるだろ。
別に共生の必要性なんてゼロだしな
アセンブラさえあれば全てが可能なわけだろ
他の言語はただのアホ用ラッパーに過ぎない
そんな高尚な天才さんに付き合えるほど長い納期なんて無いけどな
exit();する前にfree();する必要が{ある|無い}双方の理由をアセンブラ的に教えてください
くだらん
>>67
アセンブラでの問題ではないな
OSとかそういうレベルのような
アセンブラやりたいけど、鯖や制御関係じゃなければ意味無いよな
例えはうまいようでも全くアセンブラでプログラムが書けない香具師ばかりだな。
鯖でアセンブラ要する場面ってめっちゃ少なくないか?


ところで最近のx86 CPUでは、Decoderがネックとなる場面がもっとも
多い感じがするな、つぎにLoad/Store Unitあたりか?

と寝た振りしてみる
今更x86でアセンブラ使う意味なんて無いよ。
コンパイラ作者でも無い限り。
このスレはコピペばかりだな

しかしアセンブラが必要な場面が減っているのは確かだな
qemuはダイナミックリコンパイラすらCで書いているし
スタートアップルーチンとかIPLとか、そういうところはアセンブラの出番じゃない?
画像処理で高速化したい場合よく使うけど。
まあそれでもインラインアセンブラまでだけどな。
VXDドライバを書く人もいないし。
大量の算術演算やゲームとか普通に使うだろ
>大量の算術演算やゲームとか
は、普通じゃないよ(w

UD Agentとかには使うかもなw
コンパイラの最適化じゃ拡張命令とか対応遅いしねー

SSE2とかもしばらくはicc買うかインラインで手書きしかなかったし
AMDになると尚更
結局、インラインアセンブラで十分ってことじゃん
インラインで十分でもアセンブラ不要説にはならない
アセンブラ不要説にはならないが沢村不要説の補強は出来る
アセンブラ知らないとOS作れない。
OSkitを使えばアセンブラ不要
BIOS作れないよ
そんなもの個人で作る物じゃない
あとエミュレータもつくれないな。
アセンブラは既にボトルネック改善にしか使われないからな
でも斡旋ブラ書けるとちょっとだけカコイイ。変態度が高そうだから近づきたくないけど。
Javaなんてもうサーバサイドにも使われなくなるからな。
93デフォルトの名無しさん:04/06/26 00:38
Cとか言ってるのはサニーやカローラでも動けばいいジャンってタイプだな
アセンブラー使いは知能が高く判断する目があるからからセルシオやシーマ乗ってると
寧ろ86最強とか言って豆腐屋信仰してるキモオタにしか思えないのだが
ハコGT-R最速
アセンブラ最強だよ。使 い こ な せ れ ば な
アセンブラだけを最後に使ったのは何年前のことか…
違いが分かる男とか言いながらインスタントコーヒー飲んでやがんの
Subversionは何故Cで書かれたか。Cは勿論のことC++、Java、Perl、Rubyその他多くの言語で容易にラッピング出来、エクステンションを書くのが簡単なためである。


アセンブラはせいぜいCでラッピングしてもらわなきゃろくに使えないね。
>>98
アセンブラをCでラッピングってどうやるんですか?
Cの仕様そのものじゃん
>99
インラインに放り込むってことでしょ
>>100
Cの規格書のどこにそんな事が書いてありました?
該当箇所をおしえてください。
>>101
特権命令はどうすんの?
>103
無理?
っていうかおまいら、前スレ埋めろよ。
前スレ埋まる前に100レスワロタ
前スレすでにブックマーク外した
もしかしてアセンブラが出来ればコピーできないはずのクラスの値を丸読みできるとか?
>>108
いいたいコトの意味がわからない。
privateな値をすっぱぬきってこと
>>109
>いいたいコトの意味がわからない。
>>108もそう思っています。
>>110
んなもん、Cでもできるだろが。
>>110
privateという概念自体はその言語の文法上の
問題でしょ。
女子大生private
>>114
むしろ意味わからん。
public 女子高生 (*´Д`*)ハァハァ
普通はprotectedだがたまにpublicも居るな。しかしinterfaceにしておかないと多重継承が・・・
アセンブラじゃねーな
まあ細胞なんて愛せないから分かる気はする
俺もアセンブラ大好き。
直接ハードを制御するってのが面白いし、何より具体的でイメージがわきやすい。
学生の時、CやらJavaやったけど、イメージがわきにくかった。
PICマイコンでC言語使ってみろよ・・・
気持ち悪くなって、アセンブラで書きたくなってくるから。
122デフォルトの名無しさん:04/06/26 09:46
アセンブラでコーディングしているという人がいると聞いて驚いています。
今時どのような用途で使われているのでしょうか?
それともアセンブラしか使えない初期のプログラマの救済措置として
やむを得ず使っているのでしょうか?
よろしくお願いします。
>>122
1から10までフルアセンブルしているやつはそんないないだろ。
高速化する部分をアセンブリして最適化することが多いんじゃないの
>>122
やむを得ずつかってます。
Athlon/Pentiumで数値演算にMMXつかったり
とか(10倍になったけどまだ不足・・・)
マイコンとかではIO制御とか割り込み応答部とか
表示回りのごく一部とか・・・
どこもあと100倍位速度向上してくれたらもうちょっ
とアセンブラ使う局面はへるかも
逆に、アセンブリしかできないプログラマなんているんかのう。
アセンブリは低級言語なのに
アセンブリもできないでプログラマ名乗ってる香具師なんているの?
アセンブラしか出来ない奴より格段に稼ぎ良かったりな:D
C言語ってCASLUに書き換えたりできる?
>>127
しかしアセンブラ出来る香具師より食いっぱぐれ安い罠。
アセンブラしか出来ない奴って今仕事あるのか?
>>126

C言語も低級言語。
ライブラリとかが充実しているだけ。
メーカー開発だけど、アセンブラ使いまくり
>>122
あ、今そやよ
>>128

できる
CのプリプロセッサはCのソースをアセンブラに置き換えるだけの機能。
後はアセンブラがマシン語を作り出す仕組。
そのアセンブラに置き換える部分をCASL-IIに直していけば移植も簡単。
しかもプリプロセッサのソースコードはCと来たもんだ。
(だから、C言語は普及した)
>>134
Cのプログラムをここに書けば、書き換えてもらえますか?
CASLさっぱりわからなくて
首くくることを薦める
>>135
もらえません
>CのプリプロセッサはCのソースをアセンブラに置き換えるだけの機能。
(゚Д゚)ハァ?
プリプロセッサではないな
#include <stdio.h>
なんてのを数百〜数千行のソースで置換してくれるのがプリプロセッサ。
#!/bin/sh
FILE=hoge
rm -f ${FILE}*

echo "#include<stdio.h>" >> ${FILE}.c
for i in "$@"; do
echo "$i" >> ${FILE}.c
done

gcc $CFLAGS ${FILE}.c -o ${FILE}
./${FILE}
rm -f ${FILE}*

Cインタプリタ
printf専用ですか?
>>134
そのアセンブラに置き換える部分をCASL-IIに直していけば移植も簡単。
アセンブラに置き換える作業がわかんないんですよ。
誰かヘルプを。
gccのソース読めよ
どーせレポートかなんかだろ?
変なこと考えずにCASLで書いた方が早い。
EXEをアセンブリ言語に置き換えてくれるツールを紹介してください
dispe
>アセンブラでコーディングしているという人がいると聞いて驚いています。
>今時どのような用途で使われているのでしょうか?

こういうこと言う奴ってさ、電子回路の世界で言えば

「いまどきトランジスタ単体で回路を組む人がいると聞いて驚いています」
とか言っているのと同じような感じだな。
秋葉には今でもトランジスタ単体を売っている店が山ほどあるが。
そういうのがなぜ存在するのか、頭悪すぎて想像できないんだろうな。

あるいは、
「いまどき徒歩や自転車で通勤する人がいると聞いて驚いています。
文明人なら自動車で通勤すべきではないでしょか?」
とか言っているようなもんかも。
>>148
ひがむなよ時代遅れw
腹減ったので誰か俺のために晩飯をアセンブルしてください
最先端に行くほどアセンブラの出番があるんだよ。
まだCコンパイラがないとか・・・ね。
つか未だにCしかない現状。
いつになったら進歩するんだろね。
本物のプログラマはFORTRANを使う。
もしFORTRANで出来なければ、アセンブリ言語でやる。
アセンブリ言語で出来なきゃ、それはやる価値がないのだ。
本物のプログラマは現存しない、何故ならばそのあまりの能力の指向性により皆食いあぶれて絶滅してしまったからだ。
なんでプログラムで飯くっていかなあかんの?
本物のプログラマはプログラミング以外の仕事なんてしない。
もしプログラミング以外に職が無いならば、そこは彼らの生きるべき世界ではないのだ。
157デフォルトの名無しさん:04/06/26 22:22
アセンブラオブジェクト指向がこれからの流れ
オブジェクト指向アセンブリング


キチガイ専用だな
>>150

胃袋でアセンブルした物がありますが、あげましょうか?
ゲロゲロゲロゲロ
>>151
最近だと、対象環境用のアセンブラをCで書いてクロスコンパイル?

>>159
そりゃアセンブルじゃなくてコアダンプだろ。
>>160
アセンブラを作らなきゃ、Cツクレネーってことだよ。
プログラムが作れるようになるのはどう考えても先に完成するのはアセンブラだ。

ソース書くだけならどっちでも好きな方ですぐ始められるが。
ごめん、旧世代の汚物にクロスコンパイルという言葉は高度すぎたか。
アセが嫌ならCコンパイラも使うな
>>162
対象環境用のアセンブラ必要ないの? 旧世代の汚物なんで良く判らんがw
メーカーのコンパイラは直接オブジェクトコードを生成することが多いよ。
もちろんアセンブリコード生成もオプションでサポートするが。
車のEUCの類も使うな
ECU?

あれは国産マイコンが使われてるので、C言語なかったりするかな。
168デフォルトの名無しさん:04/06/27 09:45
ROMチューンで馬力 あげ
関数型アセンブラ言語マダー
>>170
ぉぉ、なんか感動した。
172デフォルトの名無しさん:04/06/27 13:26
>>146 SYMDEB
173デフォルトの名無しさん:04/06/27 13:39
そもそもパソコン使うな
>>164
>>160は「対象環境用のアセンブラを」Cで書く、と書いてるんだから、アセンブラ書くんだよ。
別にアセンブラそのものが対象環境で動く必要はないでしょ。
組み込みだと、実機で開発環境動くほどリッチとも限らんし。

・・・もしかして、「アセンブラ」と「アセンブリ言語」の区別がついてない?
俺今このスレ開いたばかりで この板の住人なわけでもないが
「アセンブラ」と「アセンブリ言語」の区別 って何だかよくわからんから教えてくれ
アセンブラ = C言語でいうところの、Cコンパイラ
アセンブリ言語 = C言語でいうところの、C言語
Cでもアセンブラでも、クロスコンパイルはクロスコンパイルじゃない?
クロスアセンブ{ル|ラ}って言葉はまず使わないよね。
>>177
よく使ってますたが。
マクロ化の進んだアセンブラならコンパイラと言った方が正しいかもね:D
askaとか
>>179
なんすかそれ?

漏れ定義は、括弧付きの式を直接書けなければアセンブラ。
コンパイラを「プログラミング言語をマシン語列に変換するプログラム」とするならば、そりゃアセンブラもコンパイラのうちだね
アセンブラとコンパイラを総合してトランスレータというのでわ?
>>179
昔何かのソースコードのドキュメントで見た名前だな。
ブツは書籍に付いてるとかなんとか。
KSASOの川合君が作ったアセンブラだよ
ASKAはプリプロセッサであってアセンブラではない
しかしアセンブリソースは変に抽象化されると逆に読み辛い
>>185
そうそう。結局Cと綺麗に棲み分けが出来てるわけで、
それをぶち壊して、新たなタイプのツールを作っても
違和感だけが強調されちゃう。
187デフォルトの名無しさん:04/06/28 10:27
現在の長波JJYは搬送波にPLLでロックすればかなり正確な基準発振器になります。
便利ですよ。
サンク(thunk)ってなんですか?
>>186
今時フルアセンブラでIA32用のOSを組み上げようという変態だから仕方無い…
度忘れしたけど、フルアセンブラで各種サーバ(Web、FTP、IRC等々)まで動くOSがあったな…
>>188
どのthunkの事かしらんが、Win16→win32のAPI呼び出しに変換する
レイヤーの事か?
>>189思い出した、MenuetOSだ。
>>190
>どのthunkの事かしらんが、Win16→win32のAPI呼び出しに変換する
>レイヤーの事か?
すいません。thunk自体よくわかっていません。
変換するレイヤー?うーむ。
thunkで使用するx86命令ってあるんですか?
サンクは種類がいろいろあるので種類によってさまざまな命令が使われる
しかしサンクするための専用命令はない
194188:04/06/28 13:54
thunkっていう行為は、16bit←→32bitの切替えをするってことですか?
モードを超えて呼び出す方法全般の事じゃないかな
Win環境ではWin16とWin32の間で相互に呼び出すための機構をthunkという。
少なくとも>>188には必要のない知識だと思うが。
199188:04/06/28 15:31
thunkってwindows環境で使用される用語みたいですね。
ありがとうございました。
戦車
8086のメモリ上の2バイトのデータへアクセスする時に
データアドレスが偶数番地から始まっている場合の方が奇数番地から始まっているよりも
早くアクセスできるということなのですが、なぜでしょうか?
          0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
偶数番地から始まる |-----------------------------------|
奇数番地から始まる  |------------------------------------|

8086は常に偶数番地、次に奇数番地という順にアクセスしているから
でしょうか?上の図だと奇数番地は0から15番地を読んでから再び0から1から
16番地を読むことになり2回アクセスしていることになるのですが。
データバスが8本じゃないから。
データバスが8本の場合のメモリ構成(四角の上の数字はビット番号を示す)
 7      0 addres
 ■■■■■■■■ $0000
 ■■■■■■■■ $0001
 ■■■■■■■■ $0002

データバスが16本の場合のメモリ構成
 15         0 addres
 ■■■■...■■■■ $0000
 ■■■■...■■■■ $0002
 ■■■■...■■■■ $0004

データバスが32本の場合のメモリ構成
 31         0 addres
 ■■■■...■■■■ $0000
 ■■■■...■■■■ $0004
 ■■■■...■■■■ $0008

メモリはアドレスバスから出力されたアドレスに対応する列のデータをデータバスに流す。
例えば16bit構成のメモリでアドレスバスに$0002が出力されていたら
対応するセルのデータをデータバスD15〜D0に流す。
 15         0 addres
 ■■■■...■■■■ $0000
 ■■■■...■■■■ $0002 ←ここの列のデータをデータバスに流す
 ■■■■...■■■■ $0004

この例で、境界をまたいでデータアクセスする場合、例えば$0001から2バイト取得する場合は
1回目のバスサイクルで$0000を指定し半分の1byteを取得して、
2回目に$0002を指定し残り半分を取得する、という風にバスサイクルが2回必要になる。
一方$0000から2byte取得したい場合は(境界をまたがない場合)は1回のバスサイクルでデータを取得できる。
さっぱり意味が分からないのでもう少しわかりやすくお願いします
8086はアドレスをバイト単位で扱うがデータバスは2バイト(16ビット)ある。
偶数アドレスにある2バイトは同じワードアドレスなので一度に転送できる。
奇数アドレスにある2バイトは1バイト目と2バイト目が別のワードアドレスになるので
それぞれのワードアドレス毎に転送しないといけない。そのため転送は二倍のサイクルがかかる。

なんで偶数奇数になるかっていうとバイトアドレスをワード数の2で割ると
偶数はあまりが0になる=ワードアドレスとしてみると綺麗
奇数はあまりが1になる=ワードアドレスとしてみると中途半端
203、205の説明は、要するに$0000の後半半分(0001から1バイト)を1回目のアクセスで
取り出して、2回目のアクセスで$0002の前半(0002から1バイト)を取り出すという
ことなんでしょうか?
自分が読んでいる本には、早くアクセスできる要因は、8086が常に偶数番地と次の
奇数番地の2バイトをデータとしてアクセスすることから生じる。
これのいってることがよく分からないです。
>>206
8086以外の奇数アドレスからByte以外のデータをアクセスしようとすると
バスエラーを起こすCPUの例を考えてみた方がいいかも。
>早くアクセスできる
いやむしろ逆に、“ワード境界をまたいだアクセスの場合にペナルティーが生じる”と、普通は考える訳だが。
それプラス「一度に16bitのデータをまとめて取得できる」とすればいいのかな。
>203、205の説明は、要するに$0000の後半半分(0001から1バイト)を1回目の..
まあ、そうゆう事。
“速い”と言ってるのは多分8bit CPUと比較して言ってるんじゃないかな。

メモリとCPU間に16本のデータの流れるラインがあるから
8本しかない8bit CPUに比較して2倍の転送力が稼げる。
8bit CPUでは2回アクセスしなければならない所、8086では1回のアクセスで
16bitデータが取得できる。

ただし奇数番地から始まる2byteはメモリ上で別々のラインに入っているから
2回アクセスして、それを組み合わせて16bitにしなければならず(ペナルティー)
その分、遅くなると。(8bit CPUと同じ転送力になってしまうと)
おぉ!なるほど。そういうことですか。
これで、疑問が解決しました。追求してみてやっと分かるのは、
すごく気持ちがいいものですね。もっと8086アセンブラ勉強したいと思います。
202-209氏、どうもありがとうございます。
オレは人に教えるのに向いてないなぁ。
たぶん2回目の何ででどうしてもって答えそうだw

ハード依存の原理はハード側から勉強した方が納得いくよね。
6502はここで取り扱ってますか?
>>212
知ってる奴は多いと思うぞ。
214デフォルトの名無しさん:04/06/29 19:35
ノシ
アセンブラだけアセンブルとか言うのは許せないな。
統一的にコンパイルと言うべきだ。
Cのプログラムをアセンブリ言語に変換することは何ていえばいい?
コンパイル
マシン語への変換がコンパイルぢゃあないのか
make でいいやん(マテ
言語を別の言語に変換するのがコンパイル。
返還後は別にマシン語やアセンブラで無くても良い。
221デフォルトの名無しさん:04/06/29 20:02
>>212
ほぼ現役(汗
流石にマシン語は言語と言わない だろう
うわ、ageてしもた…
京都府警ハイテク課職員はアセンブラは得意なんだろうな。
クリックなんて超高度技を使えるぐらいだから当然だな。
226デフォルトの名無しさん:04/07/01 15:15
>>203
pen4は64bit幅と聞いたけどアドレスが8の倍数でないと遅くなるの?
227デフォルトの名無しさん:04/07/01 15:28
台形公式を求めるプログラムがわかりません・・・。いろいろなサイトを
見てコンパイルするのですができないのです。教えてください!!
 1 
∫ e^-x^2dxをといてください!お願いします
 0
>>226
最近のCPUはメモリとCPUの間にキャッシュがあるからもっと複雑
486にもあるよ
>>226
結論から言うと、Pentium4の内部データバスは64bitではなく32bitなので、
「アクセスするアドレスが4の倍数でないとペナルティが付く」が正解、のはず。多分。

外部データバスってのは、メインメモリ(DRAM)とCPU内のキャッシュを繋ぐバス。
内部データバスってのは、CPU内のキャッシュとレジスタを繋ぐバス。

>>201からの話題で単純にデータバスと言ってるのは、厳密に言えば内部データバスの話。
8086〜80486までは内部も外部も差はなかったんだけど、
Pentiumからは内部32bit・外部64bitと違うサイズになってしまった。
というか、80386までは内部キャッシュはなかったから、
内部外部の区別そのものがなかった、というべきか。

ちなみに、アライメント境界を跨ぐペナルティは2〜3クロック程度なので、
アプリケーションレベルの話になればたいしたものではない、とは言えなくもない。
Pentium時代にまでくれば、アライメント境界なんかよりも、
キャッシュミスとかページフォルトとか、もっとダメージのでかい要素があるしね。
分岐予測ミス
>>201からの説明書いてた者ですが
キャッシュが絡むとどうなるのか分からないんで
「この説明でいいのかなぁ」等と思いながら書いてました。
キャッシュを持たない16bit外部バスのイメージで書いてました。

キャッシュなしで32bit外部バスで、2byte目と3byte目を
組み合わせた16bitを取ってくる場合などを考えてみると
奇数バイトから始まってはいても
境界をまたいでないから
ペナルティーはつかないだろうと思います。
>>231
> 内部外部の区別そのものがなかった
これ間違ってたので訂正。
8086の廉価版である8088は内部16bitで外部8bitだから、内部外部の概念は昔からあったんだった。
16bit(1word)読むのに8bit x 2でやってたらしいけど、それでも速度低下は2割くらいだったらしいから、
いかに昔のCPUのロジックが遅い(クロックペナルティがでかい)かが分かる。
台形公式を求めるプログラムが書けたら神だよな…
23768K + 68881/2:04/07/01 23:17
step equ 512    ;分割数(可変)
 entry
 fmove.b #0,fp1  ;result := 0

 fmove.b #0,fp0  ;result := result + f(0.0) / 2.0
 bsr myfunc    ; 両端は半分にして最初に足す
 fdiv.b #2,fp0
 fadd.x fp0,fp1

 fmove.b #1,fp0  ;result := result + f(1.0) / 2.0
 bsr myfunc
 fdiv.x #2,fp0
 fadd.x fp0,fp1

 move.l #step-1,d0 ;for x := step-1 downto 1
loop:
 fmove.l d0,fp0   ;result := result + f(x/step)
 fdiv.l #step,fp0  ; 中間は関数値をそのまま加えあげる。
 bsr myfunc
 fadd.x fp0,fp1
 subq #1,d0
 bne loop
 fdiv.l #step,fp0  ;result := result / step. 最後に幅で割る。結果はfp0に残る。
 rts

myfunc:      ;積分する関数本体 exp(-(x^2))
 fmul.x fp0,fp0 ;x^2  
 fneg.x fp0   ;-x
 fetox.x fp0   ;exp(x)
 rts
238台形公式:04/07/02 02:26
× fdiv.l #step,fp0  ;result := result / step. 最後に幅で割る。結果はfp0に残る。
 ↓
○ fdiv.l #step,fp1

か。レジスタ間違えた。
“幅で割る”じゃなくて、幅をかける、若しくは分割数で割る、だね。
最終結果はfp0じゃなくてfp1に入ってる、です。
GJだマイスター。
これで>>227の宿題もバッチリだね( ´ー`)b
240デフォルトの名無しさん:04/07/02 09:11
      -‐-   
  , ´,     ヽ
  ! ! !リノ从ハ.〉
  l r! krェ rァ|.|  <又吉イエス!!又吉イエス!!
  | | l、 ー .ィ!l
  | /'\V/、ヽl.|
  ! i  く小>  リ
それは「台形公式のプログラム」であって、「台形公式を求めるプログラム」
ではないと思う。
最適化の手法がいくつかある場合
実際にベンチマークとって最適なコードを選択・出力するコンパイラとかできないのかね。
>>242
Java の JIT コンパイラではわりとふつーではないかと。

244デフォルトの名無しさん:04/07/06 09:11
      _ 〃´─≠⌒Yミ/∧_/(⌒∧//∧ミ
    //´≠`ヾ彡三=三≠=・/=三=・∀\
   //彡ヽヾ)))三=.ノ─ヽ、─=≠三 ミ ミ i
   |/(/UUし彡’               ミミ\ヽヾ !
  /i||iシ/      ∧_∧          \!l |l|| i
  ソli・∀/       ( ;´Д`)        !i li i|l・∀|l
 ||i l |||lつ     (U_U )つ      li  li ((l|lil
 ヽヽ_/|ノ        モナクロサンボ     / //|Y l|/
 \ミミ\ヽ                 / //|/彡
  ミヽ・\ヾ゙、三 ─ = _ __   _≠/// ゴロゴロゴロゴロゴロ…
   ヽとと\≠=( ̄))∧_∧//´(((((三彡∨彡ノ/
    (__ト(((ト三 =》∩ _)≠─=つつ三彡彡
        ─二三__,三二  ,.≫三=三彡
x86でページエントリがTLBに読み込まれるとき、(バーストモードで)複数の
エントリが読み込まれるのか、それとも1つだけ読み込まれるのか?
どうなんでしょう。
バーストモードで複数のエントリがデータキャッシュに読み込まれ、
そのうちの1エントリがTLBに読み込まれる、じゃないかな??
247246:04/07/06 18:02
データキャッシュじゃなくて2次キャッシュかな?
>>245
メモリアクセスのストライドを4、8、12KB・・・と、それぞれ時間を計測して
みれば分かるんじゃない?
俺の勘としては、TLBに連続ページエントリを一気に入れても、
メリットほとんどないから、そんなことしないと思う。
4Kおきに連続してアクセスするような稀なアプリの性能上げても無意味。
他のページにアクセスに行ったりしたら、
エントリを余計につぶしておいても損する可能性大。
それより、x86じゃ広すぎ。
>>246に同意。
メモリから直接TLBに値が入るということはないとおもう。
AMDはL2にTLB用のキャッシュがあったような。
TLBはアドレス解決時に参照するのでキャッシュアクセスとはそもそもタイミングが違うんじゃないか?
>>251
といっても外から見りゃ普通のメモリアクセスと区別出来ないのでは?
このへんはデータシートに書いてあると思うが。
TLBだけキャッシュスルーしてたら性能にえらい影響が出ると思うが
ttp://www.intel.com/technology/itj/q12001/pdf/art_2.pdf

これの4,5ページを見ると、命令用のTLBはL2からデータをもらっている
ようですね。

P4のデータ用TLBってこの図から見られないんだけど、L1と共用なのかな?
>>254
ftp://download.intel.co.jp/jp/developer/jpdoc/vol6iss1_art01_j.pdf

DTLB はアドレスを物理アドレスに変換します。
DTLB には完全にアソシアティブな64のエントリが
用意されており、各エントリは4K または4MB の
ページのいずれかをマッピングできます。
256デフォルトの名無しさん:04/07/09 00:14
http://www5c.biglobe.ne.jp/~ecb/assembler/assembler00.html
のHPを見ながらアセンブラの勉強させてもらってるんですが
http://www5c.biglobe.ne.jp/~ecb/assembler/2_5a.html
の練習問題のところで

moval,[si+1]
mov[di+1],al
moval,[si+2]
mov[di+2],al
moval,[si+3]
mov[di+3],al

と書いてあるのですがこれはどういう意味なのでしょうか?
レジスタにoffsetでdata1や2の格納アドレスを代入し
そのアドレス行をずらしたモノをまた代入してると思うのですが
一体なんの意味があるんでしょか?

私的には
movsi,offset DATA1
movdi,offset DATA2
moval,[si]
mov[di],al
これだけでコピーはできているハズだからそれでいいのではないかと思うのです。

後の行のラベルやシステムコールなどについてはいろいろなHPをみたり
して理解できたのですがここの部分だけがどうしてもわかりません。
どうかお力添えをお願いします。

;アセンブラ本って凄く少ないのですね・・本屋を歩き回って見つけたのが4冊・・
最初からやりなおせ

al = si[1];
di[1] = al;
al = si[2];
di[2] = al;
al = si[3];
di[3] = al;


al = si[0];
di[0] = al;
て事でいいですか?

movsb×3でいいんじゃないかと思うが。
4byte
>>256オメ

mov  eax,[si]
mov [di],eax

の間違いじゃなくて。
関係ないけど、そのページ、内容が古すぎてあまり役に立たないと思う・・・
この前ここに張って有った入門nより多少ましな感じはするが、どっこいどっこい。
>>257
練習問題までのページを5回、他HPも読み返しているのですがマジでアホでごめんなさい。

>>258
はい。字詰め表示になってしまいました。その通りです。

>>259
4バイトだから4バイト分づらす?う〜んどういうことだろ・・
>>260

そうなのですか。
確かにdosのシステムコールなんてもう使わないような気もします
32bitではなく16bitCPU用に書いてあるとも思うのですが
アセンブルに関する資料がネット、書籍ともに少なくて。
DATA1の内容(ABCD)をDATA2にコピーして、DATA2を表示するプログラムを作りたい。

DATA1db'ABCD',24h
DATA2db'0000',24h
              ↓
DATA1db'ABCD',24h
DATA2db'A000',24h
              ↓
DATA1db'ABCD',24h
DATA2db'AB00',24h
              ↓
DATA1db'ABCD',24h
DATA2db'ABC0',24h
              ↓
DATA1db'ABCD',24h
DATA2db'ABCD',24h

DATA1の内容(ABCD)をDATA2にコピーして、DATA2を表示するプログラムを作りたい。

DATA1   db    'ABCD',24h
DATA2   db    '0000',24h
              ↓
DATA1   db    'ABCD',24h
DATA2   db    'A000',24h
              ↓
DATA1   db    'ABCD',24h
DATA2   db    'AB00',24h
              ↓
DATA1   db    'ABCD',24h
DATA2   db    'ABC0',24h
              ↓
DATA1   db    'ABCD',24h
DATA2   db    'ABCD',24h
265262:04/07/09 01:35
>>264
ご説明ありがとうございます。
dbというニモニックは1バイトの文字を
メモリアドレスのどこかに一行目A 二行目B 三行目C 4行目Dのような形で
順次連番アドレスで一つ一つ格納していくものである。

ラベルはそのdbで定義されたデータの先頭アドレスを示すものである。

よってABCDを求めたいのであればラベルの示す行から3行目、全部で4行を
指定してやる必要がある。

こう言う解釈でよろしいでしょうか?
lodswとstoswがいいな
まあ32ビットでロードストアすれば2命令で済むのは確かだが。
268デフォルトの名無しさん:04/07/09 10:51
はじめて読むPentium マシン語入門編
ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-4466-7.html
486じゃなくて8086の方のリメークだったか
270デフォルトの名無しさん:04/07/12 19:54
そもそも真面目に勉強してるのか? この質問者は
 <ω>
  |・ ・|
ノ( 。3。)ヽ エルァー ボクちょっとしか真面目じゃないYO
272ほんたま:04/07/12 23:24
おみゃ〜らよ、おれは名無し@沢村よ。
おみゃ〜らよ、おれはほんたまよ。
おみゃ〜らよ、おれがほんたまになった件わかるか?
おみゃ〜らよ、「Visual E++」が「Slim de Can」になった件わかるか?
「Slim de Can」は限りなくマシン語に近いアセンブラよ。
疎いな…おみゃ〜らは…詳しくはここだ↓

http://hp.vector.co.jp/authors/VA015412/

自分じ見ちみれ♪
273デフォルトの名無しさん:04/07/12 23:38
u
ストリング命令が分からないです。
NASMの16bit exe形式なんですが、これで上手くいきません。
どうすれば上手くいくのでしょうか?

;worldの最初の'a'を'H'にしたい
;省略
mov si,hello
mov di,world
movsb

mov dx,hello
mov ah,09h
int 21h

mov dx,world
int 21h

;省略
segment data
hello: db 'Hello World',13,10,'$'
world: db 'aaaaaaaaaaaaaaa','$'
;省略
の直後に

mov ax,data
mov ds,ax
mov es,ax

とか?
っぽいね。movs[bwd]はds:si→es:diだから。
こないだから質問してる人かな? CPUのマニュアルもっとよく読んだほうがいいよ。
高級言語と違って「よしなに」はやってくれないからね。
>>275
mov ax, SEG data
では?
278274:04/07/13 17:40
>>275さんのやり方で上手くいきました、ありがとうございます。

あと、名誉のために言っておきますが、>>256さんと私は別人です。
279デフォルトの名無しさん:04/07/13 17:57
OS使わずにディスクから起動してほかの
>>279
考えまとまってから書けよ
>>279
お前には無理だ。
>>278
物理的には別かも知らんけど、な。
わかるやろ?
>>282
スルーしなって。
この手の人にはいくら言っても無駄だから。
インラインアセンブラオンリーユーザなんだど、
コンパイラってなに使うのx86系で。
Cとかとリンカで混合して使うのそれともフルアセンブラ?
>>284
聞きたいことがわからん。もう一度整理してくれ
>>.284
用語と日本語文法の勉強して出直せ。
古本屋でプログラムはなぜ動くのか、って本があったから
買ったけど意味不明
>>284の訳(多分)
私はx86系でインラインアセンブラを使っているのですが、
皆さんはソフトウェアを作るときアセンブラをどのように使っているのですか。
(例えば一部Cなどで書いて、それとアセンブラのコードとはリンカで1つにリンクしているなど)
それとも全てアセンブラだけで書き上げたりするものなのでしょうか?
>>284の訳(英文)
it is an INRAIN assembler-only user -- ど
and KOMPAIRA って -- what -- the x86 system of 使う
C -- と -- using by RINKA, mixing, or a full assembler
いや単にNASMとか聞いてるんじゃなかろうか・・・
291デフォルトの名無しさん:04/07/13 22:39
>>284 の文意を想像するスレ
ここは日本語も読めない低学歴プログラマーのすくつですか?
>>284=>>292必死だな、と。
日本語理解するの難しいよ。書くのはもっと難しい。
アセンブラの方がよっぽど簡単。いざとなったら動かして試せるし。
>>294
この業界で仕事してると、ほんとそう思うよ名
「プログラムって簡単!」
日本語が読めなかったら低学歴なんだ・・
よくあるけれど、既出をがいしゅつと読んだり、
巣窟をすくつと読んだりするの、やめよう・・ね?
ネタをネタと(ry
りゅうせき
日本語に精通した並のプログラマ>>>>>>>>>日本語アレでも天才プログラマ
読み方間違えたら即ネタとして誤魔化す。これいかに
そんなもんだろ
こまったもんだ
お前しか困らん
304ほんたま:04/07/14 21:25
おみゃ〜らよ、おれのスリムドカンはある意味アセンブラよ。
スリムドカンはおれのページにあるから見ちみれ?

http://hp.vector.co.jp/authors/VA015412/
おみゃ〜らよ、おれはいまリソースエディタをつくってるのよ。
スリムドカンに装備させるためよ。
おみゃ〜らよ、アセンブラをつくるのはいいが、リソースエディタのないアセンブラはアセンブラとはいわんぞ!
自分じわかるかな?
305デフォルトの名無しさん:04/07/15 02:52
教えてください!! Bit scan を Intel 系で(数%でもいいから)高速に
行いたいのです.しかも,僕は C以外の言語を知りません... Cコンパイ
ラに bsr を使わせる事は出来るのでしょうか? もしくはインラインア
センブラを使うならばどう書けばよいのでしょうか? とりあえず,素
人なりに VC inline asmembly 書いてみました.これってどうなのでしょ
う...

int scan_three_integers( int i1, int i2, int i3 )
{
__asm { bsr edx, dword ptr i1
mov eax, 31
jnz l1
bsr edx, dword ptr i2
mov eax, 63
jnz l1
bsr edx, dword ptr i3
mov eax, 95
l1: sub eax, edx }
}
edxはどこから出てきたの?
307306:04/07/15 03:51
すまん寝ぼけてたようだ…忘れてくれ
>>305
>これってどうなのでしょう...

何をする関数なのか仕様を書いておかないと
ソースから仕様を分析せなならんので俺はスルーしたくなる。
309305:04/07/15 07:56
> 何をする関数なのか仕様を書いておかないと

上記の関数 scan_three_integers() は,3つの int 引数からなる 96 bit 列
を左から走査し,ビットの立っている位置 {i|0,1,...,95} を返すようになっ
ている筈です.但し,引数 96 bit のうち,少なくとも 1 つのビットは立って
いることを仮定しています.

パイプライン・条件分岐等のことは一切考えず(いや,むしろ考えられず),
ただただ動くように命令を並べただけです(汗).
確率が高いほうから調べるくらいしかやりようがないような
まずバイト単位で0じゃないバイトを探してからビットを探すってのはどう?

(1)下記、1次元8点DCTのCPU命令によるプログラムの実行サイクル数を求めよ。
ただし、MUL Ri,Rjについては演算はEステージ、結果格納はSステージで行うとする。
(2)このプログラムの最内ループのパイプラインステージを描け。
(3)MULのEステージが2サイクルかかるとした場合、実行サイクルはどうなるか?
MOV #8,R13 MOV.W aStart,R5 MOV.W Sstart,R6 L2:MOV.W sStart,R4
SUB R10,R10 #r10:accumulater MOV #8,R12 L1:MOV.W@R4+,R8 MOV.W@R5+,R9
MUL R8,R9 ADD R9,R10
DT R12 #r12 –1,if r12=0 then T=1
BF L1 MOV.W R10,@R6+
DT R13 #r13–1,if r13=0 then T=1
BF L2
End:
メモリ(URAM)
R4 S(0) S(1) S(2)::
R5 a(0,0) a(1,0) a(2,0) ::
R6 S(0) S(1) :
7
ΣS(x) a(x,y) 1次元8点DCT
x=0
宿題はスレ違いです
SHだかなんだか知らないが情報不足でいずれにしろ解けないな
alpha21364のアセンブラをやらないといけない事になったのですが
役に立つ書籍等があれば教えてください
教えるクンがいるとすぐ意味不明の質問スレになるな
お約束だが
>>315

21364は、SMPとメモリコントローラ周りの統合がメインで、
コアは、21264からほとんど変更無いから
英語本で良ければ21264の文献はいくつか見つかる。
318ほんたま:04/07/16 00:08
おみゃ〜らよ、おみゃ〜らさーん♪
おりはよ、「Slim de Can」を使ってやっとメインウィンドウにコントロールをつけるサンプルの作成に成功したぜ。わはは♪
「Slim de Can」ってすげ〜な〜、イベントドリブンプログラムが作成できるとこまでついに進化したよ。
おりはもう神だね♪どうよ?

http://hp.vector.co.jp/authors/VA015412/
319305:04/07/16 07:09
お返事ありがとうございます.

> 確率が高いほうから調べる

なるほど.どの bit が立っている確立が高いか考えて順番を入れ替えて
見ます.


> まずバイト単位で0じゃないバイトを探してからビットを探すっての
> はどう?

C でプログラムを書く場合,上記のような方法も考えました.8 bit 単
位で bit の立っている位置,もしくはどこも立っていないという情報を
格納した 256 要素からなるテーブルを参照する方法です.しかし,
inline assembly で bsr 命令を使うと,32 ビット単位の bit scan
をしつつ,どの bit もたっていなければフラグを立ててくれるのです.
>>319
bit scan命令が遅いのは知ってる?
321305:04/07/16 09:32
> bit scan命令が遅いのは知ってる?

知りませんでした.情報ありがとうございます.ただ,bit scan 命令より
も速い手法を知らないのです.

Inline assembly での bsr 命令使用以外で試したのが,bit が見つかるまで
ループさせる方法と,テーブルを数回参照する方法です.

テーブル参照の方法で試したのは,要素数 256 のテーブル 12回参照と,要素数
65536 のテーブル 6回参照の2通りです.

PentiumIII では bsr 命令のほうが効率が良かったです.
>>320
bit scan命令が遅いって
いつの時代のCPUですか?
安土桃山ごろ?
324おばかさん:04/07/16 11:18
>>305
もしまず0チェックすることによって bsrをただ3回やるより速くなるのならばこんなのどうかな?1000万回くらいループしてベンチとんないと最近のはキャッシュがあるから性能はわかんないね。
int scan_three_integers( int i1, int i2, int i3 )
{
__asm {
 mov ecx, dword ptr i1
 jecxz NEXT1
 bsr edx, ecx
 mov eax, 31
 jmp DONE
NEXT1: mov ecx, dword ptr i2
 jecxz NEXT2
 bsr edx, ebx
 mov eax, 63
 jmp DONE
NEXT2: bsr edx, dword ptr i3
 mov eax, 95
DONE: sub eax, edx }
}
325おばかさん:04/07/16 11:20
すまん、バグ発見。
int scan_three_integers( int i1, int i2, int i3 )
{
__asm {
 mov ecx, dword ptr i1
 jecxz NEXT1
 bsr edx, ecx
 mov eax, 31
 jmp DONE
NEXT1: mov ecx, dword ptr i2
 jecxz NEXT2
 bsr edx, ecx
 mov eax, 63
 jmp DONE
NEXT2: bsr edx, dword ptr i3
 mov eax, 95
DONE: sub eax, edx }
}
前スレで、WinXP上でAMDの64bitモードに切り替えたという話があったと思います。
モード切り替えには物理アドレスと仮想アドレスが同じとなるメモリ領域を確保する
必要があると思うのですが、どのようにしたのでしょうか? 
お願いします。
bsr/bsfはathlonでvectorpath+latency10前後..
微妙に重いね
32ビットbsrはi486で6〜103クロック。
P5で7〜71クロック。
P6のbsrのレイテンシはわずか2クロック
_scan_three_integers PROC
MOV EAX,[ESP + 4] ' EAX = p1
ADD EAX,-1
SBB EAX,EAX 'EAX = (p1 != 0) ? -1 : 0
ADD EAX,EAX 'EAX = (p1 != 0) ? -2 : 0
MOV ECX,[ESP + 8] 'ECX = p2
ADD ECX,-1
SBB ECX,ECX 'ECX = (p2 != 0) ? -1 : 0
AND ECX,EAX 'ECX = (p1 != 0) ? -2 : ((p2 != 0) ? -1 : 0)
MOV EAX,ECX
SHL EAX,5
ADD EAX,95 'EAX = (p1 != 0) ? 31 : ((p2 != 0) ? 63 : 95)
BSR EDX, [ESP + 12 + ECX * 4]
SUB EAX,EDX
RET
_scan_three_integers ENDP
速いかどうかはわからんがこういう方向もあり
AMD64はレジスターレジスタオペランドで11clock。
VectorPathだから一番いい状態のときのものだと思う。
332ほんたま:04/07/16 13:55
おみゃ〜らよ、おみゃ〜らさーん♪
おりはよ、「Slim de Can」を使ってあるボタンをクリックしたらある処理を行わせ、別のボタンをクリッしたら別の処理をおこなわせるプログラムの作成についに成功したよ。
つまり「Slim de Can」はすでにイブントドリブンプログラムがつくれる環境になっているということを自ら証明したという次第よ。
おい、「Slim de Can」はすでに簡単なゲームくらいはころっとつくれるぞ。誰かつくらんか?
「Slim de Can」ってすげ〜な〜。
おりはもう神だね♪どうよ?

http://hp.vector.co.jp/authors/VA015412/
なんだお前名前変えたのか
C3やMMXPentium以前を気にしなくていいならCMOV使うといいかも

__declspec(naked) __cdecl int scan_three_integers( int i1, int i2, int i3 )
__asm{
XOR EDX,EDX
MOV EAX,[ESP + 8]
AND EAX,EAX
CMOVNZ EDX,-1
MOV EAX,[ESP + 4]
AND EAX,EAX
CMOVNZ EDX,-2
MOV EAX,EDX
ADD EAX,2
SHL EAX,5
BSR EDX, [ESP + 12 + EDX * 4]
SUB EAX,EDX
RET
}
}
>ADD EAX,2
>SHL EAX,5
のところは
SHL EAX,5
ADD EAX,95
の間違い
>>334-335
cmov の第二オペランドって imm を食ったっけ?
rm16/32 だけっぽいんだが。
337305:04/07/17 12:05
Bit の立っている確率が高い順番に 3っつの bsr を並べ替える方法
は上手くいきませんでした.入力 bit 列は比較的乱雑なようです.

jecxz を用いて bsr と mov 命令をバイパスする手法は数%速くなりま
した.早速採用です.おばかさんありがと〜〜〜

>>330, 334
なにをしたいのか理解するだけで小一時間かかりました...
なんと,条件分岐を一度も使っていないのですね.しかも
__declspec(naked)といい,参考になりました.かなりそそられるの
ですが,gcc の inline assembly 形式で上手くいかなさそうなので
後ずさり気味です.この形式では関数の引数が 4(%eps) とかとは限
らないみたいなのです...

>> 336
Intel のホームページで配布している Manual をよむと,確かに r/m16
と r/m32 だけみたいです.
cmov使うならこんな感じかな?

int scan_three_integers( int i1, int i2, int i3 )
{
__asm {
bsr edx,dword ptr i3
bsr eax,dword ptr i2
lea eax,[eax+32]
cmovnz edx,eax
bsr eax,dword ptr i1
lea eax,[eax+64]
cmovnz edx,eax
mov eax,95
sub eax,edx
}
}
_asm
{
mov edx, i1
mov ebx, i2
mov ecx, i3
mov eax, 95
mov esi, 63
mov edi, 31
test ebx, ebx
cmovne edx, ebx
cmovne eax, esi
test ecx, ecx
cmovne edx, ecx
cmovne eax, edi
bsr edx, edx
sub eax, edx
}

カコワルイ
340339:04/07/17 15:36
mov edx, i3
mov ebx, i2
mov ecx, i1
mov eax, 31
mov esi, 63
mov edi, 95

上の6行修正
341305:04/07/17 21:28
>>338
条件分岐なし,さらにレジスタも edx と eax しか使ってなくて
良さげです.早速試してみました.しかし,どうもダメです...

条件分岐して,実行命令の数を減らすおばかさんさんの方法がよい
みたいです.インプットデータ列は乱雑なので,分岐予測はなかなか
難しそうだと思ったのは素人考えだったのかなぁ... それとも多少
分岐の予測が外れてもかまわないのだろうかぁ...

>>339
上の6行は
mov edx, i3
mov ebx, i2
mov ecx, i1
mov eax, 95
mov esi, 63
mov edi, 31
だと思います.そして,実行結果は遅かったです.Bsr はそもそも
速度のボトルネックではない,若しくはレジスタの待避で遅くなった,
のどちらかかのような気がします.たぶん.
342デフォルトの名無しさん:04/07/17 21:30
アセンブラ全くわからん。何から手をつければいい?
>>342
何のためにアセンブラが必要と思ったか、その動機かな。
Windows用ソフトを逆アセンブルしてCのソースに起こしたいんです
345デフォルトの名無しさん:04/07/17 21:57
一通りできたほうがメモリやCPU回りの理解が深まるかなと。
>>344
がんばれ〜
>>344
>Windows用ソフトを逆アセンブルしてCのソースに起こしたいんです

それ限定ならインテルのマニュアル(PDF)があれば、全部終わる。
といいつつ、種別によってはインラインアセンブラとかで書かれてる場合が
あるから、逆汗も何もCに直すとひどいぞ。
>>344
手作業でやると軽く死ねるよ
プログラムにやらせても、死ねるソースが出てくるよ
ひとまずは鍛錬ですか。

ところで>>348さんはIDA Proとか使ってるんでしょうか?
自分はまずdispeあたりで解析を始めようと思うんですが。
>>342
まず、Cで何か簡単な関数を書いて、コンパイラでアセンブリコードを
出力して見比べてみたら?
352344:04/07/17 22:23
ちなみに、紛らわしく書いてますが342と344は別人です。

>>351
今はMinGWで適当にコンパイルしたものをgdbで追ってるような段階です。
眺めてるだけではまだスタックの積み下ろし、レジスタ保存やジャンプ等も
よく分かりません。これから慣れていけば少しはすっと頭にはいってくるかと
思いますが・・・。
353344:04/07/17 22:23
って351は342へのレスジャン
∧||∧あびゃびゃーん
354素人:04/07/17 22:27
アセンブラ始めたいと思っていろいろ検索してみたけど始め方がわからない
アセンブラを始めるにはどうすればよろしいか?
やっぱり本か?
Cを覚える
Cコンパイラにアセンブラ吐かせて、対応を見る

まずはそこからやれ。
とりあえず、私の環境でアセンブリコードを吐かせてみました。>>344 >>342
% cat test1.c
int test1( int x ) {
return x;
}
% cc -O2 -mcpu=i486 -S test1.c
% cat test1.s
.file "test1.c"
.version "01.01"
gcc2_compiled.:
.text
.align 16
.globl test1
.type test1,@function
test1:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
movl %ebp,%esp
popl %ebp
ret
.Lfe1:
.size test1,.Lfe1-test1
.ident "GCC: (GNU) 2.95.3 20010315 (release)"
>>350
dispeを使うよりもPeRdrを使ったほうがいいよ。
出力した逆汗コードが分かりやすい。

http://hp.vector.co.jp/authors/VA028184/
358素人:04/07/17 22:42
>>355
Cはすでにやってるけどわけの分からないアセンブラコードをみてもどうにもならない
アセンブラの基礎から始めたいんだがその始め方が見つからなかった
いまどきのアセンブラはお勧めしたくない
362素人:04/07/17 23:06
やはり本を読んだほうが早そうだな
図書館でもあさってみる
どうもありがとう
図書館にあるんか?
364素人:04/07/17 23:20
>>363
多分あると思う
それっぽい本を見かけた気がする
はじめて読むPentiumとか
図書館を馬鹿にすんでね。

つか、アセンブラ入門なんて今時の本じゃないから、むしろ図書館の方が見つけやすいぞ。
大学図書館あたりがお勧め。
最近の大学図書館は学生証がないと入れない罠
借りるのは学生か教員でないと駄目だろうけど、最近は閲覧もできんの?
最近は(マンコの)締め付けが厳しくてね・・・。
おまいらOllydbgがありゃすぐ済む罠。
生き遅れのスレか
むしろ最先端
P5世代ではleaは1クロックだったけど、
P6やP7(Pentium4)世代でもleaは1クロックで実行できるの?
>>373
P6は1クロック。
Pentium4はleaの種類による。
Northwoodの場合、簡単なleaは0.5クロック。
lea eax,[eax+eax*4+3]みたいな複雑な物は5クロックぐらい(
Northwoodはシフトが遅いせいだとおもう)。
シフトも乗算も遅いからシフト数が少ない時は加算使えって・・・いつの時代のCPUだ?
>0.5クロック。

ワンクロック以下で出来る処理なんてあるわけ無いじゃん
CPUの仕組みからやり直せ
いかなる処理も

最低、ロード、デコード、演算、ストアの4クロックは必要なのが常識
スループットとレイテンシ
>>376
Pentium4は倍速で動く部分があって、そこは当然0.5クロック。

>>377
パイプラインのない時代の人ですか
>>377は68000マンセの人か
パイプラインなかった筈
古い常識にとらわれている (そのくせ不遜な態度の) 人は
ちゃんと時代についていきましょう。
いまどき、1クロックで4命令同時実行なんてのもあるのに。
>>379
演算ユニット(ALU)の演算結果をALUに渡す場合にのみ倍速になるとかなんとか。DDR動作なのかね。
>>376は基本的には間違いではないけど、少なくともPentium4に関してはあてはまらない場合もある。

>>378をかみ砕くと、パイプラインで走ってるCPUの場合、
1命令が実際には何クロックで処理できるか(レイテンシ)だけでなく、
何クロックで処理できているように見えるか(スループット)も判断材料になるってこと。
というか、普通はレイテンシではなく、スループットを話題にするね、最近は。

まーPen4の場合はパイプライン20段+α、単純演算でも合計レイテンシ20を越える化け物だから、
パイプラインストールのケースを考えると(ひきつり)笑いたくなる設計思想なのは確か。
高クロックでカバーしてるとはいえ、あれも恐竜的進化の一形態なんだろうねえ。
>>382
クロックの数字がでかいほうが一見速く見えるわけで。
結果営業が客を騙しやすくなると。

>>382
20クロックおきに条件分岐で飛びまくるようなプログラムを走らせると、分岐無しのリニアな実装をしたものを
走らせた場合の1/2ぐらいで動くことになるのかな?実測してみると面白そうだけどあいにくP4持ってない。
強力な分岐予測があるからほとんど遅くならないよ。
嘘のヒント教えれば遅くなるよ
一回実際の予測的中率を見て見たいものだが、
パフォーマンスカウンタにあったっけ?

あ、P4じゃないから無理だ。

>>383
>クロックの数字がでかいほうが一見速く見えるわけで。
>結果営業が客を騙しやすくなると。
こうなってくると、もう終わりだな。
その後実クロックより大きな数字を名前に付ける更に終わった状況に陥ったと。
その後クロックと無関係な相対性能数を使う、まだマシな状況に戻ったと。
常識
>こうなってくると、もう終わりだな。

その理論だとの一握りのマニア以外の消費者全てが終わった事になるが?
笑止千万(w
「ゼロサイクル・ブランチ」という言葉を聞いた時は恐怖すら覚えた。
最近のCPUはまったく理解不可能な世界にまで進歩しているのかと。
理屈が分かれば「なーるほど」なんだけど。
394デフォルトの名無しさん:04/07/20 21:26
>>393
なんすかそれ?
1マシンサイクル以下で実行できる命令なんてあるわけねーべ
あったとしてもパイプラインとかちょっとしたトリックでそう見えるだけで
>>395
そんな事、どうだっていい話。
>>395
非同期回路で1マシンサイクルの前半50%で1命令処理する
とかすれば一応できるのでは?
今のところはこんなことするなら内部pllで倍クロックつくるほう
が設計的にも効率がいいからそうなってるだけで
パイプラインは1クロックまで縮めるもの。
0.5クロック相当にするのは、スーパースカラ(スーパースケーラ)です。

なつかしいなぁ、PentiumのUとVのパイプライン。
夏のソナタ?◆トリップ・チェイサー◆常駐スレpart81
http://school4.2ch.net/test/read.cgi/qa/1089468329/622
400393:04/07/21 02:24
>394
えとね、絶対分岐する命令あるでしょ、条件分岐じゃないやつ。
ジャンプどこそこっていう。
あれが命令キューの中にあったらジャンプ先の命令を取って来て
分岐命令と入れ替えちゃうの。
それで分岐命令の実行分はゼロサイクルというしかけ。
PowerPCね。
ちょっとした小手先の技術みたいなのにちょっと大袈裟な名前だーね。
>>398
P4の倍速ユニットは、マシンクロックの倍の周波数で動いている。
 mov eax,ebx
 add edx,eax
のように依存関係のある命令の並びでも1クロックで処理できる。
スーパースカラだったら2クロックかかるでしょ?
しかしNetBurstコアは、デコーダもトレースキャッシュもヘタレなので
倍速? ナニソレ? 状態なのであった。

倍クロックが中で走り回ってるとは(ブロックダイアグラム見ても)
考えられないので、きっと、「依存関係のあるmicrocodeのみ」
ネガティヴエッヂで続けざまに実行できる、とかそんな実装なんだろう。
>>402
P4コアの良否はわからんが、倍速ユニットがCPUクロックの倍の
クロックで動作しているのは事実だよ。
実は、この倍速ユニットもP4のクロック上昇の妨げになっているんだよね。
ブロックダイアログを見て、何がわかるんだろう・・・
すれちがい

>>403
チミはDDR SDRAMが倍速クロックで動いてると思ってるでしょう?

倍速ALUにクリティカルパスが存在するかもしれないというのには同意。
ていうか、元々実行ユニットスカスカなんだから、もっと単純な
ALUに実装し直してもいいのにね。

>>404
ブロックダイアログって、何の対話を求めるんだよ?

マジレスすると、実装のヒミツを妄想する手がかりの一つにはなる。
倍速ALUがないと64bit化したとき更に遅くなるからだよ
なるほどそれは盲点
淫必死だな
P4の倍速ALUとスーパースカラは何が違うの?
アム厨キター
特定のCPUについて悪口を言う場所ではないと思うんだけど。
そういうのは違うところでやったほうがいいんじゃないの?
>>405
http://support.intel.com/support/processors/pentium4/sb/CS-007989.htm

Rapid Execution Engine
Integer Arithmetic Logic Unit (ALU) clocked at twice the core frequency provides
four ALUs of computing bandwidth and allows lower latency execution increasing
performance for certain integer operations.
倍速ALUは、倍のクロックで動いてる。
スーパースカラは複数命令を同時実行する。

全然別物。どちらも、1クロック以下にしてしまう技術。
ttp://www.intel.com/technology/itj/q12001/pdf/art_2.pdf

P4の倍速ALUは倍の周波数で動いているね。↑の8ページから仕組みが書いてある。
415デフォルトの名無しさん:04/07/21 21:05
こちらを紹介されたので質問します。
PentiumMは686ファミリーでいいのでしょうか?
基本的な質問で申し訳ありません。
>>415
概ね合ってる
417ほんたま:04/07/21 23:04
おみゃ〜らよ、おれはNTT料金の未納で明日からまた止められるよ。
おみゃ〜らよ、しばらくお別れだ…
心残りはリソースエディタが間に合わなかったことだ。ダイアログの部分だけでも完成してUPしておきたかったんだが…
今度のお別れは長いかもしれないよ。
というのは、ハードディスクから異音が聞こえ出したからよ。マイPCも風前のともしびのようだ…
PC買い換えて、電話つながるまでお別れだな…自分じわかるかな?
しるか!
>>415
1 8086/186
2 286
3 386
4 486
5 Pentium
6 PentiumPro/II/III
7 Pentium4
だっけ?
PentiumMはIIIをベースにいじくりまわしたら別物になった代物だった気がするから、
6系でいいのかなあ。

っていうか、最近アセンブラじゃなくてCPUのスレになってるね、ここ。面白いからいいけど。
CPUID で取れる family の値のことじゃないの?
それのことなら、Pentium M は 6 です。
凡庸レジスタよりも
>>最近はFPUの方が計算速い事多いよな
これ本当ですか?
>>374
P4の資料は少ないし、うるおぼえで、今更だけど、
その場合のP4で0.5とか5とかって言うのは、μopじゃない?
>>421
今まで見たことないから釣りでもネタでもないと思って一言。
「汎用」は「はんよう」と読むのであって、「ぼんよう」と読むんじゃないぞ。

それはいいとして、ここ最近の話題はアセンブラから離れすぎてないかい?
#ま、いいけどね。
CPUを知らずして、アセンブラを語ること無かれ。
じゃ汎用レジスタよりも
>>最近はFPUの方が計算速い事多いよな
これ本当ですか?

>>425
自分でCPUのマニュアルでも読んでみれば?
レジスタは計算しないと思うが。
>>425
ソースは?
だれが言ってたの?
429デフォルトの名無しさん:04/07/22 10:01
凡庸レジスタワラタ
8086の頃のBPはスタックフレームにアクセスするという重要な役割があったのだが
EBPになって、すっかり凡庸レジスタになってしまったな。
いまだに扱いが特殊だよ
>>425
最近のCPUでは、汎用レジスター側の命令セットは只のコントローラで
計算の主力は別ユニットが担ってます、
解説付きのチップの写真をみれば判りますが、キャッシュを除けばチップ面積の殆どがFPUやマルチメディア命令用ユニットで埋まっています。
整数ユニットで主力の計算をするというのは、ロケットで言えばメイン推進エンジンを使わずに、姿勢制御用の補助エンジンで動かすようなものです。
>>432
CPU最適化を積極的に行う場合、という但し書きが必要では?
でも、汎用レジスタが、現在では姿勢制御エンジンに近い、
というのは確かにうまい比喩だと思う。

SIMD演算機の一般化で、実質、CPUの内部演算幅はどんどん長くなって、
アーキテクチャを表す指針には使いにくくなってるから、
アドレスバスとか制御データ幅が、CPUのビット幅だという考え方の方が一般的になってきたしね。

ついでに、アドレス参照までSIMDで動けば、もっと面白いんだけど、
(4つのテーブル参照一発とか)バス機構が複雑怪奇になるから無理かな。
>>425
少なくとも比較命令に関してはFPUをわざわざ使うと相当遅いね32bitでは
3DNow!とかSSEとかを使うとまた話は別になるけど

最近スレ違いはなはだしいぞ。
CPUを知らなければ〜なんていってるけど、
アセンブラならではのトリッキー技をあげてからそれに則してCPUの
解説をするべきだ、藻前ら勝手もいいかげんに汁。
アセンブラってCPU依存なわけだし仕方ないかと
>>435
んじゃCASLで。
面白いCPUの話しよう。

MicrochipのPICマイコン。
こいつには条件分岐命令がないんだ。
条件でパイプライン中の次の命令を破棄することしかできない。
その破棄される次の命令を無条件ジャンプにして分岐するんだ。
条件で分ける処理が1命令で済むなら、ジャンプすら必要ないんだ。
ARMもにたような感じだったような
>>438
ARMはopコードの頭4bitが実行条件指定になってて、フラグの状態によって
実行されたりされなかったりする。パイプラインストールを起こさない工夫だあね。
(標準命令セットのみ。Thumb命令セットでは無効)

>>437のはパイプラインうんぬんというよりは、CPU自体の規模を抑える工夫なんだろうね。
マイコンつってるくらいだし。
昔設計したCPUは条件ジャンプ命令を持たず、条件スキップ命令とジャンプ命令を組み合わせた。
なーに、命令長が長くなるのを嫌っただけだが。
つーか、ジャンプ命令自体1バイトのオフセットしか持たないというとんでもない仕様だった。
±128バイトぐらいの範囲しか分岐できないCPUは結構あるような気がするよー
最近のPowerPCにあるのは fsel。
(floating point select)

 fsel FRT,FRA,FRC,FRB

動作はFRAが0以上ならFRTにFRCの値を代入。
そうでなければFRTにFRBの値を代入。
if FRA >= 0.0 then FRT := FRC
else FRT := FRB

AltiVec(SIMD)にもこれと似た動作をする命令がある。
>442
Cなら、
FRT = FRA >= 0 ? FRC : FRB;
ってな感じか。
ところで、FRC, FRB の並びなのはなんで?
サンプルなら FRB, FRC の方が自然な感じがするんだけど。
444442:04/07/23 02:41
ちょっとごちゃごちゃしてわかりにくいですね。
マニュアルをそのまま書き写したもんで。


要はアセンブリで書く場合は
 ターゲットレジスタ,条件判断用,0以上の時のソース,それ以外のソース
の順で書いて下さい、と。
(FRAがNANだった場合は「それ以外のソース」の値が代入される)

〜〜ごちゃごちゃした事情〜〜
IBMのマニュアルでは オペランドにFPUレジスタを4つ取る命令について、
マシン語に落とした時のレジスタの順に
 (6-10bitに入る)  FRT (常にターゲットレジスタを示す)
 (11-15bit)  FRA (ソースレジスタその1)
 (16-20bit)  FRB (ソースレジスタその2)
 (21-25bit)  FRC (ソースレジスタその3)
こういう名前を統一的に使っています。

で、「0以上の時のソース」がたまたまFRC、
「それ以外のソース」がFRBに割り当てられていただけかな、と。

マシン語設計者
「どっちがどっちでもいいよなぁ」と適当にFRBとFRCの役割を決める。
 ↓
アセンブリ表記を決めた人
 ターゲット,条件判断用,0以上の時のソース,それ以外のソース
という順番で書いた方が分かりやすいよなぁ

ってことでひっくり返ってるのではないかと勝手に推測しますが…
凄く昔(27年位前)のCQ出版のムックで、
CPUを作る記事が一杯載ってるのがあったんですが、
そこに、一命令CPUってのの案が有りましたね。
パターソン&ヘネシーにもそんな話載ってような
>>445
トラ技Special「作れば解るCPU」?
448デフォルトの名無しさん:04/07/24 15:42
nasmでwin32や32bitドスアプリ作る前に
これ読んどけってチュートリアエウある?
449445:04/07/24 15:51
CQ出版社、トランジスタ技術編集部編
つくるシリーズ2 「つくるコンピュータ」
1976/5/10 初版
ISBN不明・・・。

だった。
2〜3年前、Cマガジンに淫乱アセンブラの記事が載ってたな。
「この命令でこの変数の値が変われば
このCPUはこの命令に対応してますっ」っていう感じの記事だった。
もう一回くらい連載してくれないかな。
「はじめて読むPentium」続刊希望。
いまどき本はよ駆逐しないと。
452デフォルトの名無しさん:04/07/24 21:26
どうしたらアセンブリプログラムーにまれますか?
1)マシン語を書くの面倒になった頃、マクロの存在を知る。
2)マクロですら大変だと感じてきたので、独自のパーサとか
プリプロセッサを作成する。
3)開発規模が大きくなって、生産性が悪いと感じてきたので、
抽象性の高い言語仕様とアセンブリ言語への変換ソフトを作成する。
4)変換ソフトが書き出すコードの出来が悪いことに気が付き、
asm{}命令で直接コードを書くようになる

最初に戻る
>>452
日々自分がラベルとインストラクションとデータの塊と意識しつづければいつの日か自然と・・・
自分の中のデータはほぼ全ておぼろげな外部へのポインタだと悟ってしまった日には・・・
>>451
「いまどきのアセンブラプログラミング」って本、
アセンブラ関連の掲示板でも、ゲーム改造関連の掲示板でも、
クズ扱いですね。

立ち読みして、内容のあまりのひどさに呆れましたよ。
8086マクロアセンブラ入門はどうですか?
458450:04/07/25 00:59
こんなヤツでした。
#include <stdio.h>
void main()
{
int FFlags,SID;
_asm{
mov eax,1
cpuid
mov SID,eax
mov FFlags,edx
}
printf("Family:%d\n",(SID&0x0f00)>>8);
printf("Model:%d\n",(SID&0x0f0)>>4);
printf("SID:%d\n",SID&0x0f);
if(FFlags & 0x00800000)
printf("MMX OK!\n");
else
printf("MMX NG!\n");
}
アセンブラ勉強するのにオススメの環境は?
DEBUG?nasm?
>458
なんだ、CPUIDの話か。
てっきり、80186/286/386/486/コプロ有無/Pen〜を見分ける方法かと思った。
ここがアセンブラでオブジェクト指向するスレですか?
masm
>>461
むかし、Oh!Xにそういう記事あったね。

tasmにオブジェクト指向拡張があったな
クラスとかどうやって表現するの?
x86のSAHF/LAHFの使い道、おせーて
>>466
8080のエミュレーション
>>466
俺が思いついたもの。

・多倍長演算で、ADC命令とADC命令の間で、
 キャリーフラグが変化してしまう命令を使用したい時。

・算術フラグをサブルーチンの戻り値として使いたい時。
>>466
>>467さんと同じくエミュレータの作成用
470445:04/07/26 14:17
>>465
クラスと云うのはパラダイムに属するものだから、
旧来のアセンブラ処理系では、実装にその概念は無い。
まあ、概念は実現出来るだろうけどね。
(オブジェクトメンバーのローカルラベルを作って、
メソッドはローカル関数で・・・という感じ、
継承は言語の機構上の機能だから、手動でやるしかないかな。)

まあ、必要とあれば、充分に学習した上で、
クラスの概念を実装したアセンブラを自分で作ればいいと思う。
言語作るスキルが無い、とか、もっと簡単に実現したい。
とかなら、逆手を取って、C++とかDelphiのインラインアセンブラを使えばいい。

ちなみに上記は、「それに実用上の意味があるか」は考慮していないので、あしからず。
>>466
8080→8086コンバート時に必要
CでもPASCALでもアセンブラでもプログラミングを勉強するなら
Linuxが安上がりで、かつはじめから環境が揃っていていいかも。
>472
Linuxでプログラミングを始められる環境を構築する労力が計算されて無い希ガス。
CUIでいいならgccでいいんだろうけど、それならWinでもそう変わらないし。
Vine辺りいれりゃいいだけやん。労力も糞もねーべ。
MSのコンパイラもただで配ってる時代だし
PC一台新規に購入してRedHatなりVineなり入れるなら手間じゃないだろうけど、
これからプログラム始めようっていうユーザがPC持ってないわけねぇし、
持っててもたいていWinが入ってる。
そんな状況下、パティション切るなり、HDD買い足すなりして〜
なんてやってんならdjgppでも入れた方がよっぽど早いと思うけど。
今時djgppは無いだろ
LinuxというかGCCでアセンブラはおすすめできないな。
AT&Tとx86は相性が悪い。
お勧めできないのはいいんだが、電話屋に何の関係があるんだ?
ベル研
>>479
AT&T vs Intel
このスレにいるのに、分からないならやばいぞ。
もう一度勉強しなおしだ。>>479
俺はずっと MIT Syntax って呼んでたが
>>478
代入が左から右か 右から左かの違いだけじゃないの?
うぉ、モトローラ的だ、と思ったけど、すぐに慣れるね。

アセンブラやるためだけにLinuxやるなら、
Windows上でVMwareやVirtualPCを使ってLinux動かしたほうがいいと思う。
こいつらにICE機能までついてれば、言う事なしなんだろうけど・・・
gccのインラインアセンブラにIntel記法が使えるようになると便利なんだけどな
昔からzilog表記でソースを書いてIntel表記でデバッグしたり、68000でz80のエミュレートしたりしてた。
その所為か、gccの吐いたアセンブリ出力とVCの吐いたアセンブリ出力を普通に見比べていたのだが、
ふと気付いたら代入方向が違ってたんだな。
Intel C++ Compiler for Linux のインラインアセンブラは
やっぱり Intel 式なの?
>>486
Z80で書いてi8080Aでデバッグ・・・はPC-8801ですか?

>>487
GCCコンパチをうたってるので、Intel式ではないと思う。
VM買う金でPC一台買えそうだなw
昔はVMwareは$99で売られてたんだけどねぇ。

VMwareは、別にPCを1台用意するよりも、開発者にはメリットありますよ。
パーティション切れないくらい沢山の環境を用意しておけたり、
OSを再インストールしなきゃならないヘマをしてもUndoですぐに戻せたり。
bccもインラインアセンブラできますか?
BuilderXならTasmもついてきます
Personal版なら無償
たしかに最初はgasの文法なんて基地外だとおもってたけど
きずいたらgasもnasmも普通に混ぜて読み書きできるようになってたな・・・
他の人がVC用に書いたインラインアセンブラをコピペ+αでgcc対応出来ないのがめんどい
NASMからGASならあるが。
>>495
変換ツールですか?よければそれのリンクを示してもらえれば助かります
497デフォルトの名無しさん:04/07/28 16:34
会社の先輩に
「アセンブラという言語はない。8086用とかPowerPC用とかCPUと対の言語だから
 一緒くたにすることは間違っている。」
と言われましたが本当ですか?
>>497
まあ、CPUによって仕様は違うよ。
CPUと対の言語をまとめてアセンブラっていうんじゃないのか
定まった仕様があるわけじゃないし呼び名がなかったら不便だろ?
500497:04/07/28 16:39
>498-499
どうも

その先輩がいうには「アセンブラといわずに86アセンブラとかPowerPCアセンブラという風に
頭にCPU名を付けろ。アセンブラに対して失礼だと!」
このクソ暑い中熱弁をふるっていたので軽く殺意が沸いたところです。
>>497
先輩さん、変。
それは、VC++とか、GNUC++とか、CodeWarriorC++とか、
Borland C++という風に、プラットホームやOS、実装が異なる系があるから、
C++という言語が無い。といっているようなもの。

アセンブラは存在する。ただ、アセンブラが単一の基準を持たないだけ。
でも、共通の概念はあるし、パラダイムも全般的に共通なものが多い。

例えばISO規格の有る無しを元に、ある言語が存在しないとか言うのは、
その人の技量の狭さが伺える発言だね。
>500
アセンブラ>http://yougo.ascii24.com/gh/07/000714.html

「空港と言わずに成田空港、羽田空港という風に(ry」
っつってるもんだ。

暑いしムカムカするから、とりあえずヌッ頃してヨシ!
「アセンブリ言語」という呼び名が定着しないのはなぜですか?
504497:04/07/28 16:56
>501
UNIXというOSはあるけど中身はSystemVとかBSDに分かれてるってことなんですかね

>502
ヌッ頃したいんですが身長185、体重110キロ(推定)の巨漢デブなので無理です。
>>503
「ブリ」のあたりがくさいから
>503
アセンブリ言語よりもアセンブラの方が短いからかな?
それともassemblyには一般的な意味が多いから嫌ったのか。
http://dictionary.goo.ne.jp/search.php?MT=assembly
http://dictionary.goo.ne.jp/search.php?MT=assembler

>505
臭いかよ!
デブはやはり無能なのか・・・orz
無能というよりは偏執的なんだろ。よくある話だ。
そういうのに限って腕はたいしたことないヤシが多い
>>500
    /ノ 0ヽ
   _|___|_ わたしが訓練教官のハートマン先任軍曹である
   ヽ( # ゚Д゚)ノ 話しかけられたとき以外は口を開くな
     | 个 |   口でクソたれる前と後にCPU名を言え
    ノ| ̄ ̄ヽ   分かったか、ウジ虫ども!  
     ∪⌒∪  

               「86アセンブラ86」

という風なシーンを想像してしまった・・・
正直memcpyを改悪した自作関数(インラインアセンブラ)を
それなりに売れてる企業でもろに使ってるのを目にしたときはワロタ。
しかもAMDとかIntelで出してる
サンプル?ソース(CPU毎に最適化されてるコード)を
わざわざコメントアウトしてあったときにはマジで噴出しそうになった。
にもかかわらずCPUID取得してたり、もう馬鹿かとアボカド。
VisualC++とかってmemcpyのようなものを(インラインアセンブラじゃなくて)
C++ソースで実装したときにMMX最適化とか自動でしてくれますか?
いまんところ、ない
「自動車と言わずに日産スカイラインGT-R自動車、メルセデスベンツSL600自動車という風に(ry」
っつってるもんだ。

暑いしムカムカするから、とりあえずヌッ頃してヨシ!
515494じゃないけど:04/07/29 00:06
>512
メモリ転送系はキャッシュ周りがネックになるから、実はそう変わらない。
・キャッシュに収まる範囲のサイズ
・キャッシュヒット率が高い(よく使う)
場合に限りAthlonのSSE命令で実験したら1.5倍くらい早い結果が得られたけど、
限定的過ぎて使えない。
256kByte超えるサイズの転送実験だとmemcpyとたいして変わらないスコアになった。
やっぱ二次キャッシュ2Mぐらい欲しいよな
Vector C {PC} があればアセンブラいらないって本当?
(⊃д`)何処が限定的なんだよ。
藻前も知ったかの房か・・・・orz
まともなソース嫁・・・orz
>>516
ゼンゼン違いますよ
ん?どういうこと?スループット?
詳細キボン
>519-520
解説キボンヌ
>>516
SSE最適化って、どんなコード書いたか知らないけど
キャッシュラインやCPUポート、演算ユニットの構造や
動作を考慮して組むと、Pentium系なら、
通常ライブラリの3-4倍は軽く出る。

ふつーに命令並べて書いても最適化とは言わんのだが、
そこら辺は考慮して書いてるのかな?
>>523
是非とも『動作を考慮して組んだ』と『ふつーに命令並べて書いた』例を挙げていただきたい
勿論ターゲットも明確にして
>>523
>>516の主題は「転送速度はメモリ周りに依存する」ってことだろ。
倍率の数字なんて環境に依存するんだし、突っ込んだところで無意味とまでは言わないが、
環境明示しない数値なら無益。

>>519-520の書き方だと「516には原理的なレベルの間違いがある」
くらいのポカがあると期待するんだが、そのへんどうよ。
うん、>>512はCPUごとの最適化(MMXとしか書いてないけど)についてなのに、
>>516はメモリアクセス速度の話になってる。
memcpy()の実装はCPU毎に最適化されていて
メモリアクセス速度だけでなく、アルゴリズムにも依存する話だ。

C++でmemcpy()風な記述をしても、バイト単位のコピーしかしないでしょ。
Z80なら、DJNZループしつつLDするとか。でも、LDIR使うよね。
527516:04/07/29 23:44
#include <windows.h>
#include <stdio.h>
#define LOOP_COUNT 100
//#define MEM_SIZE (8*1024)
#define MEM_SIZE (256*1024)
typedef void * (*MEMCOPY) ( void *, const void *, size_t );
char *__dest, *__src;
char *_dest, *_src;

int prof( MEMCOPY func ){
__int64 s, e, f;
HANDLE h;
DWORD old;
h = GetCurrentProcess();
old = GetPriorityClass( h );
Sleep( 10 );
SetPriorityClass( h, REALTIME_PRIORITY_CLASS );
QueryPerformanceFrequency( (LARGE_INTEGER*)&f );
QueryPerformanceCounter( (LARGE_INTEGER*)&s );
int i;
for( i = 0; i < LOOP_COUNT; i++ )
func( _dest, _src, MEM_SIZE );
QueryPerformanceCounter( (LARGE_INTEGER*)&e );
SetPriorityClass( h, old );
return (int)( e - s );
}
528516:04/07/29 23:45
void * memcpy_sse_a( void *dest, const void *src, size_t sz ){
__asm{
mov edi, dest
mov esi, src
mov ecx, sz
shr ecx, 4
lab_1:movaps xmm0, [esi]
movaps [edi], xmm0
add edi, 16
add esi, 16
dec ecx
jnz lab_1
}
return dest;
}

void * memcpy_sse_b( void *dest, const void *src, size_t sz ){
__asm{
mov edi, dest
mov esi, src
mov ecx, sz
xor eax, eax
shr ecx, 4
lab_1:movaps xmm0, [esi + eax]
movaps [edi + eax], xmm0
add eax, 16
dec ecx
jnz lab_1
}
return dest;
}
529516:04/07/29 23:45
void * memcpy_sse_c( void *dest, const void *src, size_t sz ){
__asm{
mov edi, dest
mov esi, src
mov eax, sz
sub eax, 16
lab_1:movaps xmm0, [esi + eax]
movaps [edi + eax], xmm0
sub eax, 16
jnc lab_1
}
return dest;
}

int main(){
__dest = new char[MEM_SIZE+16];
__src = new char[MEM_SIZE+16];
_dest = (char *)( ( (DWORD)__dest & 0xfffffff0 ) + 16 );
_src = (char *)( ( (DWORD)__src & 0xfffffff0 ) + 16 );
prof( memcpy );
printf( "%d\n", prof( memcpy ) );
printf( "%d\n", prof( memcpy_sse_a ) );
printf( "%d\n", prof( memcpy_sse_b ) );
printf( "%d\n", prof( memcpy_sse_c ) );
delete []__dest;
delete []__src;
return 0;
}
530516:04/07/29 23:46
当時のソースがどっかいったので、
>トリッキーなコード その2
http://pc5.2ch.net/test/read.cgi/tech/1038215563/129-
を参考に書き起こしました。

一応元のソースもうpっときます
ttp://49uper.com:8080/img-s/1376.zip

結果のスコアは左から順に memcpy, memcpy_sse_a, memcpy_sse_b, memcpy_sse_c です。
P4 2.4CGHz
[256k] 15841764, 19733072, 18917596, 18243708
[8k]   568580,   317252,   396300,   363632
AthlonXP 1500+
[256k] 354506,   323496,   323240,   433326
[8k]   1008,     817,    810,      831

16byteアライン、16の倍数サイズ等、かなりSSE寄りで実験してますがこの結果です。
実際には16byteアラインで配置されてない場合の処理等、遅くなる傾向になると思います。
更に、同じ場所のデータのコピーが連続する処理は通常アプリで発生しえないので
キャッシュヒットはそう望めないと思います。

それでもこれより速くなるコードがあるなら是非見たいです。>519-520,>523
5318086知らない:04/07/29 23:47
ブロック転送って1命令で書けるんぢゃないの?
>>526
intにキャストすればintのサイズずつコピーするし、
doubleにキャストすればdoubleのサイズずつコピーするし、
long longとかにキャストすればlong longのサイズずつコピーするよ。
>>530

で何で256KBなの?
2次キャッシュ量の都合にヨリかな
>>530
スコアって小さいのとでかいのどっちが強いの?
ソース解凍するのマンドクセ
536デフォルトの名無しさん:04/07/30 00:14
>>531 >>533
>>512>>516を読んでないのか?
>>532
SRCとDSTがcharであっても、コピーするサイズが多い場合には
32Bit単位でコピーするってのもありだよね。
128BitCPUなら16byte単位でコピーだ!もちろん端数処理するけど。

memcpy()は内部でそういうことしてるから、C++記述だけでは限界がある。
538トリッキー2の129:04/07/30 01:47
>>535
どっちが強いって、、、
数字はかかった時間だよ。
すなわち小さいほうが速い。

しかしあのソースはもともと
CPU の周波数測定のために書いたやつを引っ張り出してきたのだが
MulDiv((int)(e-s),1000000,(int)f) をだったのを端折ってあったり
Sleep するのは REALTIME_PRIORITY_CLASS にした後が正しいのであった。

まぁ相対時間の測定はほぼできてるからいいか。(^_^;)
>>528
えらく制限のあるmemcpyだなw
「はじめて読むMC680x0」って出ませんか?
かなり欲しいです。
>>536
> >>512>>516を読んでないのか?

>>516 はキャッシュの容量を超えると変わらなくなると書いてあるが.
542516:04/07/30 10:39
>531, >539
memcpyのようなものをSIMDで最適化する事に意味があるか、の検証だから。
>538
その為のSleepだったのか…他のスレッドに処理渡してキャッシュ関係の条件を揃えるためかと思ってマスタ。
勉強になりますた。
>533, >541
AthlonXPのL2が256kだから。
P4の場合はギリギリ収まるのかな?
でも結局L1に収まらなければ意味が無いという結果は出てるし、限定的な事に変わりない。
ttp://hp.vector.co.jp/authors/VA003988/pentopt.htm#CACHE

>523
普通に命令並べてるだけですが何か?
汎用的で4倍速いmemcpyマダー?(・∀・ )っ/凵 ⌒☆チンチン
すいませんが場違いなのはわかりますが助けてください。
JPEG処理に使われる1次元8点DVTを実現するプログラムを
SH3-DSPのアセンブリ言語を用いてさくせいせよ。
変換行列の係数は計算済みとしてよい
ソースデータはメインメモリにおかれているとする
結果はメインメモリに格納する
>>543
宿題スレでどうぞ
>>543
ずばり、卒業研究かな?w
さくせいせよ。
が、平仮名なのが素敵。
さくせい 【▼鑿井】地下水や石油などを採取するために井戸を掘ること。
か、
さくせい 【削正】他人の詩文の語句を添削すること。斧正(ふせい)。
だったり。
>>544
アセンブラの宿題スレはないという罠
作れば?
>>543
step 1. Cでプログラムを書く
step 2. コンパイルしてアセンブリソースを出す
step 3. DSP命令を生成してくれなかったところだけ#pragma inline_asmを使って手で書く
        mov eax, sz
        mov esi, src
        prefetcht1 [esi + eax - 256]
        prefetcht1 [esi + eax - 192]
        sub eax, 128
        mov edi, dest
lab_1: prefetcht1 [esi + eax - 256]
        movaps xmm0, [esi + eax]
        movaps xmm1, [esi + eax + 16]
        movaps [edi + eax], xmm0
        movaps xmm2, [esi + eax + 32]
        movaps [edi + eax + 16], xmm1
        movaps xmm3, [esi + eax + 48]
        movaps [edi + eax + 32], xmm2
        prefetcht1 [esi + eax - 192]
        movaps xmm4, [esi + eax + 64]
        movaps [edi + eax + 48], xmm3
        movaps xmm5, [esi + eax + 80]
        movaps [edi + eax + 64], xmm4
        movaps xmm6, [esi + eax + 96]
        movaps [edi + eax + 80], xmm5
        movaps xmm7, [esi + eax + 112]
        movaps [edi + eax + 96], xmm6
        movaps [edi + eax + 112], xmm7
        sub eax, 128
        jnc lab_1
  memcpy_sse_a,       >551, memcpy

[8KB]         504,        506,       627
[256KB] 517900,   452702,   559928
[2MB]   2137066, 1789439, 2199712

これが限界だな。
環境も書けないのかよ。
SSEが動く全部のCPUで右より真ん中のが速いと思ってるの?
>>551
そこまでやっても2割増に届かないのか。
3〜4倍速いってどんなよ?

>>553
じゃあ遅くなるCPUの実測値キボンヌ。
キャッシュから外れてしまうような大量コピーの場合は、
ストアにmovntps等のノンテンポラル命令を使うと更に速くなるけど、
キャッシュヒットする場合に使うと逆にかなり遅くなってしまう。
556デフォルトの名無しさん:04/07/30 23:44
1マシンサイクル以下のクロックで命令実行できるわけ無いじゃん
フルアセンブラで2chブラウザを作る猛者はいないのか?
作る意味が感じられない
どうせほとんどsocksやFILEIOのシステムコールで済むんだから大したことなさそう。
作っても面白くない。
>>559
htmlのパースはどうするんた?
試しに3DNow!用のmemcopy_amdと標準のmemcpyを比べてみました。
抜粋するとこんな感じ

void main()
{
unsigned long counter;
long i = 1000;
long j = i;
const long numbuffer = 64;
char *ch_src = malloc(sizeof(char)*1024*numbuffer*2);
char *ch_dst = ch_src+sizeof(char)*1024*numbuffer;
memset(ch_src, 0, sizeof(char)*1024*numbuffer*2);

counter = timeGetTime();
while(i--)
memcopy_amd(ch_dst, ch_src, sizeof(char)*1024*numbuffer);
counter = timeGetTime() - counter;
printf("memcopy_amd %d\n", counter);

counter = timeGetTime();
while(j--)
memcpy(ch_dst, ch_src, sizeof(char)*1024*numbuffer);
counter = timeGetTime() - counter;
printf("memcpy %d\n", counter);
free(ch_src);
}
numbufferの値をそれぞれ64、128、256、512、1024, 2048で実行すると

memcopy_amd:43, memcpy:63//1.5倍
memcopy_amd:93, memcpy:148//1.6倍
memcopy_amd:215, memcpy:1602//7.5倍!
memcopy_amd:1283, memcpy:3148
memcopy_amd:2514, memcpy:6027
memcopy_amd:4865, memcpy:11806

*結果は数回試しても大きなずれはない
といった結果、
環境に依存するんでなんともいえませんが
自分の環境では256KBのメモリ操作が異常に速いです。
(゚д゚)ウマーなので自分はいつも、それなりに大きいコードの場合
void *(* memcopy)(void *dest, void *src, int n)
↑を宣言して、memcpyと差し替えて使ってます。
私が519だとか520だとかはとりあえず置いておいて、
こういってはなんですが516さんのコードでは
速度が出るはずはありません。
バイト境界の設定やプリフェッチの設定が最低限必要なので
それらを満足にしてから、テストされた方がよろしいかと・・・orz
Athlon 1.33GHz DDR 2100? 256MB Win2k
565560:04/07/31 06:37
dat直読みすれば大したことないな。
ごめん忘れてください。
ところでさー、memcpyなんか速くしたところで何か意味あんの?
自己満足は大事ですよ
>561-564
>抜粋するとこんな感じ
どいつもこいつもバカばっかりか?
抜粋するなら memcopy_amd を抜粋しろよ。
コードも晒さずそのスコアを信じろってか?
>561
それと、timeGetTime()使ってるのにtimeBeginPeriod()呼んでないのはネタか?
NT系なら不要なんじゃなかったっけ?
なんか攻撃的な猿が住み着いてるな。
アセンブラからはCOMとかDirectXは呼び出せないの?
呼べるよ
関数のポインタが並んでるだけなんで
バイト境界そろえる意味について分かってるヤシは >>563 以外にはいないのか?
手間さえ考えなければいくらでも呼べる。
>>574
shr ecx, 4しか見てなくて気付かなかったw
SSE使うなら16byte境界に合わせて余分なところをrep movsbするよな
>574=563 なのか?
じゃないと自分も解ってないという風に取れるが?

>576
お前は全然解って無いけどな。
movaps使ってる時点で16byte境界に調整されてるのに気付け。
563が言いたいのはALIGNディレクティブ使えって事だろ。
>>566
memcpyそのものには意味がないかもしれないが、それをテーマとして
メモリアクセス方法やコードの記述、測定方法について議論されるということに
充分な意味があるということが、このスレの流れからわかる・・・よね?
コードはAMDのサイトから拾ってきたのを改変した程度なんで
さらしてないだけなんです・・・orzすみません。
ところで私は574さんではないです・・・orzすみません。

説明するよりも実際に試走させてみる方が
わかりやすいと思うのでつくってみました。

ttp://www.uploda.org/file/0754.zip
実行するとこうなりました。
2048MB分のコピーを行います・・・
(´・ω・`)なにか・・押してください・・・

[1KB:2097152回] memcopy_amd: 341, memcpy:591
[2KB:1048576回] memcopy_amd: 290, memcpy:591
[4KB:524288回] memcopy_amd: 270, memcpy:571
[8KB:262144回] memcopy_amd: 270, memcpy:751
[16KB:131072回] memcopy_amd: 261, memcpy:561
[32KB:65536回] memcopy_amd: 280, memcpy:551
[64KB:32768回] memcopy_amd: 1302, memcpy:1722
[128KB:16384回] memcopy_amd: 1192, memcpy:1752
[256KB:8192回] memcopy_amd: 4277, memcpy:11286
[512KB:4096回] memcopy_amd: 4356, memcpy:11166
[1024KB:2048回] memcopy_amd: 3936, memcpy:11326
[2048KB:1024回] memcopy_amd: 4196, memcpy:11767
平均倍率: 2.205倍

ヽ(`Д´)ノなんか押せゴラァ
64KB, 128KBは境界の問題で遅いのかと思われます。
非常に汎用的に見えはするんですが、
エンコード・デコードなんかに用途は限られますね。
もはやベンチマークです・・・orz
3DNow!用に作ってありますが、3DNow!非対応でも
動くだけ動きます。動くだけですが・・・orz
キャッシュ越えで差が出るベンチなんて作るやつら, あほなのか?
キャッシュサイズがちゃんと分かるから便利じゃないかな
>>581
おまえがあほなだけ
>>579
実際にmemcpyしてる証拠も無いexe晒して意味あるの?
それとも逆アセンブルしろとでも?
568の言う通りですね・・・。
また猿が騒いでるが気にしないでくれ。
586552:04/07/31 20:43
>553
説明と感想書いてたら長くなったからばっさり切っただけなんだがな。すまん。

AthlonXP 1900+、後に実行した方が速くなるから
memcpy_sse_aは公正を期すためのウォーミングアップ用ダミー。
指摘するならmemcpy_sse_aとmemcpyの比率が
>530と違うことくらい気づいてくれ。

もっとも、memcpyの速度はライブラリとコンパイルオプションに依存するけどな。

あと猿とか呼ばれてる奴は最速コードと参考実測値晒してみろ。
環境書いて無いの以下じゃねぇか。
>>579
>コードはAMDのサイトから拾ってきたのを改変した程度なんで
>さらしてないだけなんです・・・orzすみません。
別に晒せない理由にはならないと思うので、是非晒しキボン。
>>584
それを言われると元も子もないですが
コード自体は相当短いんで
ollyなんかで展開してみてもわかります
・・・orzすみません
AMD Athlon1.2GHz 雷鳥コア
DDR1600-CL2.5 128MB
Windows2000

[1KB:2097152回] memcopy_amd: 392, memcpy:689
[2KB:1048576回] memcopy_amd: 343, memcpy:660
[4KB:524288回] memcopy_amd: 320, memcpy:647
[8KB:262144回] memcopy_amd: 310, memcpy:642
[16KB:131072回] memcopy_amd: 304, memcpy:636
[32KB:65536回] memcopy_amd: 311, memcpy:641
[64KB:32768回] memcopy_amd: 1474, memcpy:1995
[128KB:16384回] memcopy_amd: 1475, memcpy:2019
[256KB:8192回] memcopy_amd: 4295, memcpy:11251
[512KB:4096回] memcopy_amd: 4498, memcpy:12093
[1024KB:2048回] memcopy_amd: 4719, memcpy:11924
[2048KB:1024回] memcopy_amd: 4760, memcpy:12097
平均倍率: 2.086倍
テスト乙。やっぱり64KB、128KBか・・・・orz
memcpyって、転送元と転送先の領域が重なった場合でもきちんと
コピーできるように作ってあるんだけど・・・
>592
お前は議論に参加する資格が無いから黙ってろ。
>592
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa16.html#Q8
ttp://www1.cts.ne.jp/~clab/hsample/Point/Point20.html
どこの規格のライブラリをご使用でつか?(プ
>>592
それは memmove だろ。。。
596!516:04/08/01 06:34
>>563=>>574?
>>574

> _dest = (char *)( ( (DWORD)__dest & 0xfffffff0 ) + 16 );
> _src = (char *)( ( (DWORD)__src & 0xfffffff0 ) + 16 );
バイト境界合わせてるように見えるのは漏れだけですか・・・
>>592
VC6なんかだと、memcpyとmemmoveは同じルーチンつかっているから
問題ないようですけど、通常は保証されませんよ。
598576:04/08/01 07:05
>>596
呼出直後とループの頭でevenなんだろ
C++のクラスとかどんなコードに変換されるの?
んな事聞かなくてもコンパイラオプション付けてコード吐かせりゃすぐ分かるだろ
>>596
貴方だけですな
>>601
16バイト境界に合わせようとしているようだが
バイト境界にも合っているように見えるが
x86系のプリフェッチについて詳しくかかれているページはありませぬか?
x86フェチのページはいっぱいあるんだけどなぁ
aling 16
lab_1:
prefetchnta [esi+320]
movaps xmm0, [esi+ 0]
movaps xmm1, [esi+16]
movntps [edi+ 0], xmm0
movntps [edi+ 16], xmm1
movaps xmm2, [esi+32]
movaps xmm3, [esi+48]
movntps [edi+ 32], xmm2
movntps [edi+ 48], xmm3
add esi, 64
add edi, 64
dec eax
jne lab_1

こっちの方がよくないか?というかプリフェッチのページおしえてくれ
ん?なんか間違ってるかな?
というかプリフェッチのページおしえてくれ
Pentium4のBTBについて語っているページも知りたいなぁ
>>605
>aling 16
あ、わりい8だ
コピペしたわけじゃないから許してくれ
で、551とくらべてどうなの?
アリング
あれ。16でよくねぇ。
ぐばらぁ。アリングって・・・吊ってきます。
でやっぱり16であってるわ、あたりまえだけど。
でもSSEなんて動かないぜ
                        ─
 、   l   _,                  -‐-、
  ヽ/⌒ヘ~    ,ヘ        ,rァ       l
  ., 't,_,ノ丶   / '、     ,/ ,i       '’
 /  !   '`  |   '──--'  {       つ
        ,/ ● L_/    'i,
       /     l ,/  ●   i,    -っ
       'i      しii     丿     / ゝ-
      |`:、\     'ii   __,/      `‐′
      'i、 ̄~~     ij  乙__ノi       ├
       ^-ァ        __,ノ       σ‐
     r^~"i'        'l
     !、 !         l          ─‐
      ~^''!,   ,_    ,!_        ー〜'ヽ
         \ l,~^''‐--::,,⊃ ) ) ) )       )
            `'‐’                ノ
おれはDuronなのさ...。
うちのDuronでは動くぞ
うちはG4だな
>579 を逆汗ったら確かに>588とほぼ同じコードだった。
ただ先頭部分に、
mov eax, edi
が追加されてるんだが、その後eaxにはアクセスされてない。
おまじないの一種?>579
>>617
関数の返り値じゃないか?
>618
あー! それか!!
GJ
逆汗dクス(*´д`*)アハァ
まさにその通りで返り値です
>>600

VC7.1でも?
>>622
当たり前だろアフォ。MSDN読め。
結局、特定CPUでしか高速じゃないor動作しないmemcpyじゃメリット無いな。
前段でCPUチェック入れてそれぞれのCPUで高速動作するmemcpyに分岐してもいいけど、
コピーサイズによってはそのオーバーヘッド自体が無視出来なくなる場合もあるだろうし。
一回チェックすりゃ済む話だろ…
625=夏房
なんもわかってねぇな。

>コピーサイズによってはそのオーバーヘッド自体が無視出来なくなる場合もあるだろうし

ってどんな状態だよ。
CPUID取得すんのはソフト起動時の1回だけだしな。













という答えのためだけの釣りだという事は言うまでもない。
うっひょう。頭が溢れてオーバーヘッドだぜ
                        ─
 、   l   _,                  -‐-、
  ヽ/⌒ヘ~    ,ヘ        ,rァ       l
  ., 't,_,ノ丶   / '、     ,/ ,i       '’
 /  !   '`  |   '──--'  {       つ
        ,/ ● L_/    'i,
       /     l ,/  ●   i,    -っ
       'i      しii     丿     / ゝ-
      |`:、\     'ii   __,/      `‐′
      'i、 ̄~~     ij  乙__ノi       ├
       ^-ァ        __,ノ       σ‐
     r^~"i'        'l
     !、 !         l          ─‐
      ~^''!,   ,_    ,!_        ー〜'ヽ
         \ l,~^''‐--::,,⊃ ) ) ) )       )
            `'‐’                ノ
アセンブラなんて触ったこともない癖にぃ→>>625

オーバーヘッドが無視できないサイズのコピーでmemcpy使うのか?
そんなサイズ使えないよ
    、     ,.   / _/{         /    /
     l゙、   ,/{  ,.r'i r":::/ /   ,.r   /    /     /
     ノ:::`、∧l:::゙、i"::::|/:":レ'"l、-''""/  /   /    /
    {:::::::、:::::::::∧'"゙`::::::::"::::{:::::::::::ノ     /   /
  ヽ、 ゙、:::/ヘ/:::゙、:::r"゙ヽ、::::::::,","/‐ニ="´     /
 __l゙=vニ-‐"~゙i、::゙,:::/:::::`ヽ‐-、_r、/-、    /
 ゙、:::::<,-‐''"~、 ゙'‐-=彡ゝ、_::::::::,.-''l    `''‐-、___,,.
  ):::::| ノ''''‐、 ,.〃-‐'''‐=、ヽ‐'゙'ゝ !、‐-、 _、-‐'''"´ ヤ・・・ヤベェ・・・
  〈:::r' "-‐‐'/,゙i、 _,.-‐-、ミ ゙、ノl  |\ >ニ=‐''"  ヤベェよ兄貴・・・・
  l/ 〃 ,.-‐   '、 ゙、 (・) }::::::/゙,〈  ゙、  ゙i、
  ,i"〃 r'"゙゙'ヽ,  ヽ `'‐-'::i、./::j `ヽ、ヽ  ヽ、_,. 叩かれ過ぎ ―― !!!
..y'i.   ノ" ̄`、l   ゙、=‐-''" ゙}:::l ヽ  `ヽ r‐''"
〈, i / i'::::::::::;;;;/    `‐'" r'‐、゙、 ゙、,.、‐'"
/゙l/  /、:::::::::;/  // / /ra } ヽ, \__
:::::'i/ ゙'‐、__r" ι   /="/゙ 、 `ヽ'/
,.r"l  `'‐   ι    /、__,,./   ヽ , '"
  !       __,,,,...ノ ゙i、,__゙‐、 ,.、‐'"
 / ゙'''-r==‐'''"/ / ./}''" |   ̄
‐'   l | | / / / l j ヽ、
"~゙> /  / /r''‐''" `'-‐''"`゙゙

CPUIDの取得でなくて。
if( amd3dnow ) memcpy_3dnow(...);
else if( sse ) memcpy_sse(...);
...
みたいな感じになるかと思ったけど、初期化時に関数ポインタ書き換えりゃいい話だな。スマソ。

>629
固定サイズのコピーだけしか存在しないとでも思ってんのか?
関数ポインタを介するようにしたら、
小さなサイズで大量の回数コピーした時に、
インライン展開されたmemcpyよりも、
関数ポインタ参照の分だけ遅くなっちゃうね。
memcpyの呼び出し回数が多いとコストが馬鹿にならないよ。
       |
       |
   ぱくっ|
     /V\
    /◎;;;,;,,,,ヽ   そんなエサで
 _ ム::::(,,゚Д゚)::|    俺様が釣られると思ってんのか!!
ヽツ.(ノ:::::::::.:::::::.:..|) 
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U

てか、ポインタのサイズが32bitだから
最大メモリサイズも2~32byteだろ・・・・
>>632
経験上それは真っ赤な嘘。
無視できるほど小さい罠。
まぁ所詮脳内実験房ですからね。
「DLLにすると遅くなる」
「仮想関数にすると遅くなる」
と言ってるようなもんだな。
関係なくてすまないんですが
CrystalCPUIDが海外で微妙に人気があるのって笑えますよね。
多分作者も笑っているものかと。
海外は見た目から入るからね
>>637
いろんな言語に対応してるからという理由 だ ・ け だとおわれ
えっexcite翻訳でいいの?
>632
(´゚д゚`)えっ?
CnQ対応が評価されてんだろ
>>632
P6以降のCPUなら分岐予測とストアフォワード、アンド投機実行で、
分岐のスループットは消滅するだろうに。

・・・てな事位は教えてやれよ、皆。
スループットが消滅するとは、なんかわけわかな表現だ
(´゚д゚`)えっ?
帯域が消滅する?

普通はオーバーヘッドが消滅する?
そもそもmemcpy()インライン展開出来るのか?
ライブラリ関数だぞ?
rep movsXとかにはなるけど、ループは展開されませんとさ
ココハ
房ヲ
玄人カ
潰ストミセカケテ
釣ラレマクル
スレデスカ?゙
違うよ
(´゚д゚`)えっ?じゃ、これ真性房なの・・・・・・・・・・・
>>647
glibc/gcc だと __builtin_xxx に置換されて展開されるな







今月は釣られ月間
>>652
サイズが定数になってるmemcpyは展開されるよ。
654デフォルトの名無しさん:04/08/02 21:13
浮動小数点の足し算1回に掛かるクロック数を求めたいんです。

Cコードです。
#include<stdio.h>
void main(void)
{
double a,b,c,i;
for(i = 1;i<10;i++)
{
a = 1;
b = 2;
c = a + b;
}

}

c = a + b のアセンブラです。
00401070 fld qword ptr [ebp-8]
00401073 fadd qword ptr [ebp-10h]
00401076 fstp qword ptr [ebp-18h]

上記アセンブラの命令3つのクロック数を知りたいんですが
intelの資料「IA-32命令のレイテンシとスループット」では
fld 載っていない
fadd スループット1
fstp 載っていない
という内容で、分からないのです。
実測すると2.5clk程なのですが、上記アセンブラのクロック数をおわかりの方はいらっしゃいますか。
化石どもが
>>654
Pentiumシリーズって並列化処理で
1命令のクロックというのはそのときの状況によるからわからない。
だいたいそのときのメモリキャッシュやOSの制御で正確なクロックは測れないよ。
>>656
もっとも良い状況での最短クロック数を知りたいんでしょ
つーか、PentiumシリーズってP5/P6/Netburst/Pentium Mで全部違う気がするが。
659デフォルトの名無しさん:04/08/02 22:00
nasmの日本語訳希望します。
ホンヤクコンニャク食べたけど忌み分からなくて
みんなから意味きらわれました。
ジャーン!ジャーン!ジャーン!
ウゲエ!!masmだ
びっくりするほどMASMMASMMASMMASMMASMMASMMASMMASMMASM!!
OS板行ってMASK呼んでこい、さっきゅんでも可。
つーかさっきゅんはここに住み着いてるだろ。
661デフォルトの名無しさん:04/08/02 22:40
>>660
>>MASK呼んでこい、さっきゅんでも

ええ〜MASKって誰ですか
っていうか青春とはなんぞや?
と日々思っとります臼vvvv
ぐぐれ、と一言で言いたいところだが、ことごとく消えちゃってるな…。・゚・(ノд`)・゚・。
とりあえず↓とか。
ttp://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/nasm/nasm.html
663デフォルトの名無しさん:04/08/03 00:44
>>662

( ゚w゚) >>662 あんた最高だよ。カール大帝なんか目じゃないね。

がんば、れがんばれ >>662
ところで、memcpyの結論としましては
MMX以降のSIMDが搭載されているCPUでは
汎用的に高速化され、実践的である。
ということでよろしいのでしょうか?
よろしくないです
>664
C3/Crusoe辺りのベンチ結果次第じゃね?
>>664
Pentium MMXの環境では、FPUかMMXで転送するのが速いという結果となっています。
このような環境では、長いデータ型が有利なのでしょうか。
 Pentium IIIの環境では、工夫のないFPUやMMXよりも、
「rep movsd」が速い結果になっています。命令のデコード時間の分だけ無駄があるのでしょうか。
最近のCPUはinc eax*4回のほうがadd eax,4より速いとか
もうワケワカラン。
>工夫のないFPUやMMXよりも
>>668
incは、フラグの依存関係ペナルティで遅くなる。
最適化マニュアル読め。(もしくはVTune使え)
何でも前らそんなに詳しいんだ。
どれだけ勉強したんだよ。
673654:04/08/03 10:41

>>658
CPUはPentium4 2.8GHzです。

>>656
最短の理論値を知りたいです。

目的はCPUのFLOPSを測定したいのです。

c = a + b;
を100億回実行し、時間を計測すると9.1secかかります。
100億回/9.1sec=1207Mより
FLOPSは1207MFlopsと計算しました。
クロック数は
2.8GHz/1207MFlops=2.3
より2.3clkと求めました。
この浮動小数点足し算のクロック数の実測値と、理論値が等しいかを知りたいのです。
>>654
その命令列だと
ロード×2、fp加算×1、ストア×1
なので、ロード・ストアがボトルネックとなってしまい、
fp加算の理論最大性能は出せない。
>673
パイプライン技術の登場でMIPS/FLOPSの単位は意味を失ってると思うけど。
HDBENCHの値の方がよっぽど気が利いてる。
pen4はmipsだけは高いよな・・・
そのための20段パイプラインでつ。
678654:04/08/03 11:30
>>674
どのような命令列がいいのでしょうか?
よろしければ教えていただけますか。

>>675
FLOPSの値が、あまり意味を成さない事は分かっていました。
ですが客先から値を
「FLOPSはいくつ?」と聞かれていまして・・。
>>678
>>414のリンク先
> 1.5GHz 動作時に単精度小数点なら最大6GFLOPS、
> 倍精度浮動小数点なら3GFLOPS の性能を達成しています。

なので
2.8GHzなら単精度11.2GFLOPS、倍精度5.6GFLOPS。
RDTSCでクロックははかれるんじゃ?
----------------------------------
//RSTSCs.s 整形は自分でしてね
.file"cputime.c"
.text
.globl _RDTSC
.def_RDTSC;.scl2;.type32;.endef
_RDTSC:
pushl%ebp
movl%esp, %ebp
RDTSC
movl%eax, %ebx
movl8(%ebp), %eax
movl%edx, (%eax)
movl8(%ebp), %eax
addl$4, %eax
movl%ebx, (%eax)
popl%ebp
ret

-------------------------------------
//使い方
int main(){
int i=0;
unsigned int x[2];
printf("%d\n",i);
RDTSC(x);
printf("%u %u\n",x[0] ,x[1]);
某ゲームの逆汗解析を行ってくれる猛者募集
勿論有償で

要アセンブラ、C++、Perlの各知識。
詳しくはメールで
>>681
いまどきのアセンブラプログラミングに嫌気がするヤツしか居ないスレで釣れないと思うがなw

ところでこの本って、どきブラって略せばいいの?
ところで、memcpyの結論としましては
SSE/3DNow!以降のSIMDが搭載されているCPUでは
汎用的に高速化されたことが証明され、実践的である。
ということでよろしいのでしょうか?
逆汗なんて別に簡単だと思うんだが
Perlの知識をいつ使うのかと・・・・
個人じゃないなら著作権もので犯罪の悪寒・・・・
685デフォルトの名無しさん:04/08/03 15:57
レポート作成>Perl
え?てかCとGoogleが使えればPerlなんて
できてもできなくても(ry
Perlは一応出来無くても平気です
内容は、ソフト内で出力データに対し符号化を行っているルーチン部分の解析と抽出になります
>>687
>個人じゃないなら著作権もので犯罪の悪寒・・・・
って個人なの?
>687
「画像or音声のブッこ抜きアプリ集作るのに困っています、助けてください」って言い直せよ!
カッコつけるな
「今 僕は必死です」って
(´゚д゚`)えっ?じゃそんなことに金を・・・・個人の範疇をこえるんじゃ・・・・・
>>516なんだよこのくそおせぇSSEのmemcpyは、でかい口叩くんならまともなコードorバイナリ挙げやがれ
今日は猿と業者が一緒になって騒いでるな。
       |
       |
   ぱくっ|
     /V\
    /◎;;;,;,,,,ヽ   そんなエサで
 _ ム::::(,,゚Д゚)::|    俺様が釣られると思ってんのか!!
ヽツ.(ノ:::::::::.:::::::.:..|) 
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U

でも、memcpyの件はいったいどうなったのかと少々気になるな。
>>530, >>551, >>580, >>588, >>624

3DNow!で最高3倍、P4は最高1.5倍。
汗の知識があまりないので知識有る方に依頼したいのです
一応算出部分のおおよその場所特定はできています
お互い秘密厳守できる方で宜しくお願いします
>>695
人に頼ってないで、ここでも読んで自分で勉強しろ
http://www.kusamado.com/contents/sc_baio04.html
普通、ターゲットのCPUくらい書かないか?

逆汗なんてのは暇つぶしの片手間にやるもんだ。
時間かけりゃなんとかなる類のものではあるが、
それだけに作業見積もり出来ないし、はした金に見合う作業でもない。
しかもそれで金儲けしようってんなら、法的にもヤバイだろ。
解析といえば、ちょい前のP5ペアリングを考慮して最適化をした
コードとか、ebpを使わずにespを生のまま使って変数アクセスしてるのが
糞めんどうだったな。
あれは割にはあわない仕事だったw

>>697
逆汗しても、フルスクラッチでコードを書き直せば法的には問題無いハズだが。
699552:04/08/03 20:06
>>694
3DNow!のソースが出てすぐにSSEに持ってってみたけど速度は変わらなかった。
prefetch命令すらいらない。

結局高速化の1番のキモは、キャッシュに引き上げるために
prefetchではなくキャッシュライン間隔の無駄な転送をさせることで、
これだけで後の本意のコピーがmemcpyの2倍になる。

あとはmovntpsを使うことでプラスアルファして、計memcpyの3倍弱。
>698
リバースエンジニアリング自体を禁止してるとこもある。
ぶっちゃけ、コナミとの裁判沙汰なんかに巻き込まれた日にゃ・・・たまらんだろ。
まずはその契約の正当性から争おう。すんげえええええええええ金かかるけど。
おれ結構でかい逆汗してるけど、そんな時間かからんぞ。
時間かかるのはアセンブラからCとかに直したあとの
アルゴリズム解析が主だ。てかソースに起こしても著作権はもちろん
向こう側にあるんだがな
703デフォルトの名無しさん:04/08/03 23:38
マヂレスするとアセンブラでオブジェクト指向は無理
そもそもクラスや継承を表現するような仕組みがマシン語レベルでは備わっていないしな
fork()
705デフォルトの名無しさん:04/08/03 23:48
>>682
まさにタイトルにいつわりありな本だな
MASMにハマッテマス
マヂレスするとコンパイラでオブジェクト指向は無理
そもそもクラスや継承を表現するような仕組みがマシン語レベルでは備わっていないしな
>>706
氏ね
>>702
アルゴリズムには著作権は無いぞ

超引用@第十条
3 第一項第九号に掲げる著作物に対するこの法律による保護は、
その著作物を作成するために用いるプログラム言語、規約及び
解法に及ばない。
三 解法 プログラムにおける電子計算機に対する指令の組合せの方法をいう。
>709
業者必死だな(藁

>710
http://pc5.2ch.net/test/read.cgi/prog/1043334001/337
>>711
>710
>http://pc5.2ch.net/test/read.cgi/prog/1043334001/337
クリーンルームどうとかで回避できるんじゃなかったっけ。
>>712
http://pc5.2ch.net/test/read.cgi/prog/1043334001/337
のリンク先に書いてある。

http://www.venture.nict.go.jp/ipr/ken00002.html
> リバースエンジニアリングによって得られた情報を基に、プログラムを
>そのまま複製したり、改変してプログラムを作成した場合は著作権侵害
>となります。
> よって、リバースエンジニアリングを行う人と、プログラムを作成する人を
>別個に分け、プログラムを作成する人に、リバースエンジニアリングの情報
>が行かないようにして、プログラムを作成した場合は、例え、他人の著作権
>にかかる著作物と同一のものが出来たとしても、著作権侵害とはなりません。
> このように、プログラムを作成する人のところに、他人の著作権にかかる
>著作物の情報がいかないようにして、プログラムを作成する方式のことを
>一般にクリーンルームと言います。
714712:04/08/04 01:20
>>713
Oh, Thanx.
>>713
でも、これじゃリバースエンジニアリングで情報を得てもそれをチームのソフト開発に使う事は出来ない、って事じゃないの?
よく分からん・・・
でも、MSだってJ#でJavaのクリーンルーム実装やってるしなぁ
Javaに関しては、仕様が予め公開されているのでちょっと別の話。
>>715
そこの記述、理解して無いのか間違ってるね。
クリーンルーム方式は、元のプログラムを複製していない事を明らかにするために
解析とコーディングを分担してるので、アルゴリズム等の解析情報はコーダーの
方にいってます。
>>715
>>718の簡潔に言うと、
解析チームがリバースエンジニアリングで解析する。
解析チームがCoderチームにインターフェースを教える。
そのインターフェースに基づいてCoderチームが作成する。

でもよく考えたらこの作業自体リバースエンジニアリングそのものじゃんw
インラインアセンブラしか使わないんですが、mmxやsseも含めて紹介しているお勧めの入門書とかありますか?
それぞれ別の本でもいいです。
IntelとAMDの資料。

効果的な使い方まで書かれていたような。
>>720
721+Googleで「アセンブラ x86」で
今ではすっかり/すっきりx86アセンブラマスターになれます
ここまで読んで有益な情報無し。
こんな糞板二度と来ねぇ。
このスレでもっとも無駄な情報 >723
>>719
やっぱり解析とコーディングの分担のとこが理解できないなぁ
通常の逆汗って

メモリからアセンブラ読む→asm表記じゃだるいからコードに起こす

ていう風なもんだけど、分担ってどういうこと?
メモリからasmに読むとこが解析?そりゃないよなぁ・・・

あ、
→コードの内容を評価、解析する
ここの分担か?
ってわかったわかった、718?も719もまちがっとるやん
逆汗したことを知らない状態で相手に作らせるんじゃん。
法の抜け穴的で実際にはありえないな、仕様書とか起こせないもんね。
巷には

逆汗→基本構造解析・ちょっとぱくる→売り出し

っての実際に多々あるしね
働いてる人でまともなもの作ってる人は、
大概逆汗からコード書き起こしたりしてるよ、法律的には違法でもね。
くわえて裁判でも判決は曖昧でなんともいえないなぁ・・・
大企業相手に勝ってる弱小企業もいれば逆もまた・・・
>>719
違う違う。
アルゴリズムをぱくる → 合法
コードをぱくる(複製する) → 違法

コードをぱくったのかアルゴリズムをぱくったのかを明確に区別するために、
コードからアルゴリズムに落とす人と、そのアルゴリズムを実装する人に
分かれてるわけ。
実装する人が元のコードを知らないと、コードをぱくる(複製)のは絶対に
不可能だからこういう作業分担になってるわけで。

719だと、「メモリからアセンブラ読む→asm表記じゃだるいからコードに
起こす→コードの内容を評価、解析する」までが一人(or チーム)の作業、
その評価解析されたアウトプットを利用してプログラムを作るのが別の人の
作業。

ちなみに、このアルゴリズムをぱくられる事から保護するのは著作権ではなく特許なわけ。
727726:04/08/04 13:58
s/719/725/
の間違いだ・・・釣ってくるorz.
>>726
え!(´゚д゚ )結局違法なのわかってないのか
というか専門家でも意見がまちまちなんだ、726の方法でも
裁判に負ける場合もあるんだずぇ
というかアルゴリズムぱくるというのを平たく言えば
盗作なんだがな、ファイルフォーマットとかもろもろで、
しかも特許とってんのにまけてやがる判例まであるしな
もうむちゃくちゃだね。著作権
誤解が内容に書くけどアルゴリズムっていっても
非常に限定的な特殊なものもあるんだずぇ
プログラム全体の肝ともいえる

アルゴをぱくっても裁判に勝つやつ、負けるやついるし

デザインが似てるというだけで

意匠権の侵害だ!と訴えられて会社が傾いてるやつもいるし

まぁ結局のところ709氏ね
>>728
むちゃくちゃなのは君の日本語だと思う。
>>728
何の法律に対して違法なんよ?

クリーンルーム手法は、著作権の観点で合法。
アルゴリズムのパクりは特許の観点で考える
リバースエンジニアリングの可否は契約の観点で考える。
732の上げてるのは全てグレーゾーンだよ、せめて愚昏
クリーンルーム手法は確かに合法だよな?
個人的にはむちゃくちゃだと思うけどな。
だって要約すると

A君が最新のソフトを解析しまくる
そしてB君に
「おい、B君よ。おまえにいいもん教えてやるぜ」
「ここをこうしてこうすると、これが出来るんだ」
「仕様書もつけといてやるよ。おれってすげぇだろ。」
という

「A君凄すぎるよ、これ商売になるくらい凄いよ」
「僕がこれをつかってソフト作ってもいいの!うそ!」
とB君がソフトを作る

B君うはうは→A君に感謝で現金を(ry

こうみるとひでぇ話だけど
まぁグレーとするならその証明方法かな?
日誌でわかるって言う人もいるけど
実際に証拠として採用されない場合もあるし
なにより捏造もあるもんな、でも合法だよ。

とここで俺の考えたたわいもないことを聴いてくれ

ものすごい人数で逆汗にかかる(千以上→webで公開
→当然訴えられる→人数でどうにでもw→webを介してクリーンルーム手法をとる
→ソフトに著作権なんてねぇ

こんな可能性を想像した。
クリーンルームの話題でLinuxをおもい出しますた。
>>734
日本ではそういうのは不正競争防止法の守備範囲です。
その場合だれを取り締まるんだろうか、普通に謎だ・・・・・・・いいだしっぺとみた
>>734
クリーンルーム手法は確かに著作権から言ったら合法らしいが
特許権や意匠権からいったら違法だと思われ
むちゃくちゃなのは >>733 じゃないか?
>>737
>特許権や意匠権からいったら違法だと思われ
思うのは勝手ですね。

>>734
>クリーンルームの話題でLinuxをおもい出しますた。
私はエプソンの98互換機を思い出しました。
このスレは業者らしきものの逆汗依頼から
逆汗の法的にゃんらについて論議するすれでつか?
>>>737
>>特許権や意匠権からいったら違法だと思われ
>思うのは勝手ですね。

普通にワロタ
「思想・良心の自由」・・・・・・・・・・・・orz法律スレにきた悪寒
743あぼーん:あぼーん
あぼーん
744あぼーん:あぼーん
あぼーん
>>734
だから、そういうのを防ぐために特許で保護したりライセンスでリバー
スエンジニアリングを禁止するんでそ。

まあ、その例みたいに同時多数でやられちゃうと訴えきれないとは思うけど。
746あぼーん:あぼーん
あぼーん
747あぼーん:あぼーん
あぼーん
確かにグレーゾーンだが、
クリーンルーム手法は、現在のどこの大企業でも
暗黙の了解で行われている行為。
749あぼーん:あぼーん
あぼーん
750あぼーん:あぼーん
あぼーん
特許保護もライセンスでの禁止も国によってはまったく機能しなかったり
するんですよね・・・・・・・・・・orz
752あぼーん:あぼーん
あぼーん
>>748
禿同、個人レベルではクリーンじゃないライブラリ使ってる香具師も多々
(´゚д゚ )こっこれは・・・・・・・・・コピペで流れをかえるき・・・・・なのか?
>>754
美しい亜線部羅のコードをさらして止めてくれ。
>>755
これって結構美しいよな
http://moech.net/imgboard5/src/1091446545743.gif
特許侵害してるならリバースエンジニアリングもクリーンルームも関係ないだろアホ
すげー。やってみたいけど相手居ない。
>>757
餅つけ、アイデアのための権利つぅことだから関係なくもない。
やねうらおの新刊はこのスレ的にどうよ?
読んでないし、今後読むこともないだろう
簡単に言うと興味ないねってところ
>>760
「いまどきのアセンブラプログラミング」と比較したら、
かなりの良書だと思うよ。
763726:04/08/04 20:28
こんにちはマイコン > 解析魔法少女 > いまどきのアセンブラプログラミング
解析魔法少女 については
これ系の本最近出たばっかだしな
読むと後悔する位、アセンブラの程度が低いのは言うまでもない
このスレを読んでるようなひとがよむと・・・・orzっとなる
個人的には「ゲームプログラミングの神様」っていううたい文句は
「わたしはオタの上に勘違い野郎です」っていってるのと同値にみえるな。
秀丸尾氏が「おれってテキストプログラミングの神様」って言う方がまだまし。
766デフォルトの名無しさん:04/08/04 20:55
(´゚д゚ )えっ!・・・・・・・・・・・・・・・魔法少女・・・・・・・・・・
プリンセス・メグ
768デフォルトの名無しさん:04/08/04 21:43
>>765
このレビューは参考になりましたか?
◎はい ○いいえ
VisualStdio.net2002のLC.EXEでアセンブラのソース吐かせるオプションを教えてください
>>769
そんなオプション、ライセンスコンパイラにあるわけねーだろ!!!
771ほんたま:04/08/05 09:06
>>752
>クラスと云うのはパラダイムに属するもの

おみゃ〜らよ、オブジェクト指向の利点をひとつだけ言うならば、
オブジェクト指向ならインスタンスをつかって表現できるものを、
非オブジェクト指向だと、配列や構造体をつかって表現しなければならないということだ。
その結果大きなプログラムだと、重〜い配列や構造体を使うから、コンパイラが自動的に確保してくれるヒープやスタック領域が足りなくなり、
たとえばリソースのために確保された領域を食いつぶしてしまってダイアログが出なくなるなどの不具合が生じるわけだ。
その都度インスタンスを確保するオブジェクト指向方式なら、この心配はないわけだ。
おみゃ〜らよ、これが唯一の現実的なオブジェクト指向の利点よ。自分じわかるかな?
まあこれはマシン語に熟知したおりならではの意見よ。他の誰にもこういう意見は出せないぞ!!
自分じわかるかな?
772445:04/08/05 11:18
なんか発言がコピペに使われてるなw

>>771
自分でタコなコードしか組めない、と言ってる様なもんじゃん。
アセンブラで組むようなデリケートな(デバッグしにくい)作業で、
ヒープ圧迫するような実装をするのが悪い。
昔のマシンは、32kbとかで、ウインドウ処理から何から全部賄ってたぞ。
処理が複雑になって、OSが肥大化したからといって、
アセンブラで組むときにルーズな組み方をするなよ。
アセンブラで組むなら、リソースの管理は細部まで設計するのが普通。
出来ないなら、高級言語で組め。
GCCでJavaVMのアセンブリコードをはかせるオプションを教えてください。
CLじゃないの
ソースが公開されてるのに, なぜアセンブリ
>771
>おみゃ〜らよ、オブジェクト指向の利点をひとつだけ言うならば、
>オブジェクト指向ならインスタンスをつかって表現できるものを、
これだからアセンブラ *しか* 出来ないキチガイは嫌いなんだよ。
せめてOOPを少しでも勉強してから出直して来い。
沢村はアセも少しおかしいだろ。
いや、俺は決して嫌いじゃないんだが。
778デフォルトの名無しさん:04/08/05 23:50
質問です。

GNU アセンブラ入門(GAS)
http://stoc.as.wakwak.ne.jp/assembler/gas.html

上にあるハローワールドを実行すると「セグメンテーション違反です」と出ます。
どうしたらエラーなしに出来るでしょうか?
アドバイスがありましたらお願いします。
とりあえず自分で色々考えて試してみ。
>>778
俺のところでは普通にできた。
そっちの環境は?

sys_writeはLinux(とか)のシステムコールだけど
それ以外のOSとか使ってない?
>>780

VineLinux使っています。
コードをコピペして実行しただけですが、HelloWorldとは
表示されるのですが、その下に「セグメンテーション違反です」と
出てしまいました。
こちらの環境の問題のようですので色々と調べて見ます。
ありがとうございました。
>>720-あたりの議論と関連して、なんですけど
GPLのコードを見ながらそっくりなコードをリライトしたら、そのコードを
GPLではなくCPLやMPLなんかでリリースすることも可能なんでしょうか?

そうだとすると、ライセンスって結構アホ臭いものという話になるんですが。
783デフォルトの名無しさん:04/08/06 07:02
>>765
このレビューは参考になりましたか?
◎はい ○いいえ
関数型アセンブリプログラミング
785デフォルトの名無しさん:04/08/06 16:30
あらためてクリーンルーム手法について考えてみました(鉄拳
こんなクリーンルーム手法は結局ダーティだ!

・逆汗のとこで懲役食らっちゃってる

・多重人格でクリーンだといいはる

・二人羽織で解析だ

・JADつかってる

・脳内クリーンだ

・GPLでソース読んだくせにクリーンだといいはる

(*´д`*)アハァ…
>>785
アニオタ?
>>765
そんなあなたがNAMCOゲットおめ。
>>776
まあまあ。
ここはアセンブラスレですし。
つーか、OOPしか出来ないのも結構キチガイだと思う。
別にアレが究極のプログラミングパラダイムってわけでもないし。
>>782

全く問題無い。
790デフォルトの名無しさん:04/08/06 18:12
>>789
実は大いに問題あるんだけど、みんな見て見ぬふりさ
>>790
確か80年代BSDがUnixから完全に分離した時に、本家Unixのソースを使ってる部分は
全部リライトしてライセンス上全てのコードをクリアにしたんだよね。この場合でも元ソースを
全く見てないわけはないんだし、半分丸コピーが行われたんだろう。
MozillaのライセンスをMPL/GPL/LGPLのトリプルライセンスに変更する際にも
全ての開発者の同意を得て行われたわけだけど、連絡が取れなかった開発者が
書いたコードについてはリライトすることで回避されたはず。

事実上、全てのオープンソース(GPLの場合はフリーソフトウェア)ライセンスを無効化して
勝手にプロプラに使うことだって出来るわけで。
GPLの魔女算ネタだとGPLコードをリライトしてもGPLからは逃げられないらしいが
793デフォルトの名無しさん:04/08/06 18:33
GPLすらむちゃくちゃな悪寒・・・・・
http://www.linux24.com/linux/news/today/2002/12/25/640902-001.html
このへんか。

自分の事を棚に上げて騒ぎ立てる声だけデカい連中(/.とか)に見つからないようにさえ
注意すれば大体なんでもありってのが現状だろうな。ProGやエレコムについては
『よくある悲しい事』ってわけで、運が悪かったんだろう。
GPLの寄せ集めだ!と裁断された
ProGのソース読んだけど別にコードとしてたいしたことなかったりw
まあスレ違いなんだが、Elecomの 金輪際Linuxは使わん って判断は賢明だと思う。
ライセンス関連調査&交渉なんて厄介ごとを抱え込むよりはBSD系ライセンスの物を
使ったほうがはるかに低コストで済むから。最初からその危険ぐらい分かって使うのが
当たり前ではあるんだがな。
プログラマであれば他人のコードみるだろ。ふつー
例え小さいコードだろうがそれを平気で使いまわすじゃん。
GPL以外でもみんなやってるくせに、
自分の事は棚にあげないように。
ライセンス違反で騒ぎ立てるのはガキや無職だけだと思う今日この頃
んなこたーない
GPL厨はうざいから他所いこうな?
と、無職が言いました。
ここはアセンブルァーが使えるか使えないかを話し合うスレですか?
アセンブラで (;´Д`) ハァハァするスレです。
斡旋ブラを使っていかにTCOを削減するかを語るスレです
私は無職ですがお金持ちです。語ってもいいですか?
どうぞ一人で勝手に語っててください
>>796
GPL違反は当事者同士の問題なのでどうでもいいとしても
ネットワーク機器にバックドアを仕込むようなメーカーの製品は使わない方が賢明だろうな
>>807
それってM$の製品でつか?
809デフォルトの名無しさん:04/08/07 15:51
>>808
Elecomの製品

バックドアがばれたのもLinuxに騙されたようなものと言っている
バックドアっつうか、デバッグ用を残してただけでしょ。
>>810
それを利用して誰かに侵入されちゃったりなんかしたらこまる。
812デフォルトの名無しさん:04/08/07 21:56
>>810

ちがうちがう。
デバッグ用じゃなくて、将来フォームウェアなどをメーカーが
バージョンアップしてあげるための穴だよ。
サイトでいくらアナウンスしてもバージョンアップをしないユーザーが大勢いるから。
それってやっぱり M$ の製品じゃん
>>812

そんな機能はそこらへんのADSLモデムに付いてますよ.
パイプラインストールって略すとパンストだよな。
>815
パイプラをインストールするんだからパイインでね?
817デフォルトの名無しさん:04/08/08 19:26
このスレっていつもこんな展開だよな
たまぁ〜にアセンブラの話がでるんだけど
批判からの粘着とか、ソコから負けても負けを認めないとかそんな
もうほんとグダグダの展開で、結局うやむやのまま
またスレとまったく関係のない話にグダグダと・・・・・・・・・・・・・・・・・
>>817
皆その事はわかってて書かないんだよ。2chで書いても仕方ないだろ。
敢えて書いたお前も夏房の仲間。
ここは負け犬が必死に話をごまかす様を楽しむスレです
パンストってなに?
>>820
俺が今履いてるヤツ
エロティカ7
>>817
2chは一切有益な情報を提供しないので、貴方の知的欲求を満たすことはないでしょう
まともっぽいスレもあるのにな。
最近の流れ

久々にアセンブラてき流れで
拡張命令を使ったmemcpyの是非について問われる
「限定的過ぎて使えない」発言の516に対し
519・520が反旗を翻し、memcpy大戦勃発
523がSSEで3倍だ!と発言
516がへたれコードで実測するもそれにはいたらず(あたりまえだ
563で3DNow!用が実測され場合によっては3倍以上を記録する
肝心な部分のソースを晒さないので非難をサルに浴びる
後に逆汗でも確かに3DNow!のコードだと判明
516の発言は見事に弾き飛ばされたわけだが
516はなんということもなくうやむやに消えてへたれぶりを残す。
ここで
夏房が襲来し、無知な問題点を指摘、ことごとく撃破される。
浮動小数点の足し算1回に掛かるクロックを実測したいものが現れるが
実測方法に無理があることを指摘されたのち
RDTSCによる実測方法を載せられるも、レスは途絶える
房業者登場、逆汗の依頼をし、法的問題論争へ
クリーンルーム手法の是非を問うも
逆汗自体の法的曖昧さから完全潔白はありえないにもかかわらず
延々と無知な論議が繰り返され、
このながれを断ち切るためかひつこいコピペ房があらわれる
当然無視され、、話はGPLの法的効力へ
法的に効力を発揮しないGPLは実際あってないようなもの
という一般的な結論に一時的に達する
それに関してProGやエレコムらGPL違反問題が取りざたされる
泥沼的にGPL論議が再開する、
突如として「パイプラインストールって略すとパンストだよな。」
という書き込みがあらわれ今にいたる・・・・・・・・・・・・
826デフォルトの名無しさん:04/08/09 09:11
普通は夏厨というのに夏房などというから誰だか分かってしまう。
勝手にわかってろよ
>>827
むなしくないか?
むなしいさ、もう涙でてるよ
830827:04/08/09 13:13
  ヘ( `Д)ノ  モーコネーヨ ウワァァァン!!
≡ ( ┐ノ
:。;  /
蒙古は無いだろうなぁ。
6502
6809
6502
SC/MP III
68008
TLCS-12A
>825
そして口だけは達者な825が降臨してスレは荒れましたとさ。
839デフォルトの名無しさん:04/08/10 03:24
EICARのウィルステストファイルってASCII文字だけで実行ファイル作ってるんですね。
http://www.eicar.org/anti_virus_test_file.htm
ちょっと感動。
THIS IS NOT A VIRUS. The EICAR Test File is an internationally
recognized, non-virus code string included for analysis purposes
only. Again, THIS IS NOT A VIRUS
>>842 のせいでこのスレがウィルスチェックに引っかかる
ようになったりしてな。
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
と貼り付けるのを期待してるの?
↑タイーホ
21164
845839:04/08/10 23:02
逆アセンブル結果
debug eicar.com
-u100,11b
0100 POP AX
0101 XOR AX,214F
0104 PUSH AX
0105 AND AX,4140
0108 PUSH AX
0109 POP BX
010A XOR AL,5C
010C PUSH AX
010D POP DX
010E POP AX
010F XOR AX,2834
0112 PUSH AX
0113 POP SI
0114 SUB [BX],SI
0116 INC BX
0117 INC BX
0118 SUB [BX],SI
011A JGE 0140
-u140,143
0140 DEC AX
0141 SUB CX,[BX+SI+2A]
846839:04/08/10 23:04
自己書換えでINT 21Hを実現 (;´Д`) ハァハァ
もっとコンパクトにできるつわものいませんか?
俺はeicar.comを実行した事がある。
848839:04/08/10 23:15
>>847
びっくらこきましたよね
次スレは
「アセンブラ… キタ━(゚∀゚)━!!」
でお願いします。
アセンブラ… (;¬_¬)ぁゃιぃ

ところでスレ番がないとよく分からん。
アセンブラにはスレ番という概念が無いので仕方ありません。
斉藤由貴?
スケ番ちがい
854726:04/08/11 04:12
( ´・ω・)ノ―――――――@"キュイイイン

( ´・ω・)ノ@"パシッ

( ´・ω・)ノ―――――――@"キュイイイン

( ´・ω・)ノ―――――――@ヽ(・ω・` ) パシッ

( ´・ω(@"バシッ        ヽ(・ω・` ) ポイッ
こんなこと言うのは非常になんだけど、
懐石・蔵系の掲示板で
さもわかったように解析結果を説明する香具師って
非常に極悪だと思うんだよ。
なにが極悪ってね、まず第一に
「デバッガ丸投げ」のコードを読んでるだけであって
しかもそれも全体の数千・数万分の一程度のコードしか
読んでいない(読めない)のに、いったいおまえは何様だと。
もう馬鹿かと。もう氷使ってる時点でオワットル、捕まってくれ。

そんな香具師は少なからず優越感に浸ってよろこんでいるが、
自分の会社で売り出した商品の
尻だし部分だけ懐石されてみろってんだ!
どれだけの2chネラーが食いつくか・・・・もうほんと進でくれ。

でも、そんなやつらの中に明らかにそれが仕事の香具師が
まぎれているのもまた事実・・・・・・・・・・・・・・
投稿するのは解析結果だけってのに多い希ガス。
ドンぐるくらぁっく!してみたり。
直書きの部分を足してバイパスさせてみたり、
そんなことしてるやつ数限られてるってんだまったく・・・・・・・・・・
こんなこと言うのは非常になんだけど、

の部分まで読んだ
内容は要点をまとめて簡潔に。
結局なにが言いたいのか分からなかった
インラインアセンブラ内でカスタムリソースを読みたいんですが、
どうもうまくいきません。

if(h_res1 = LoadResource(NULL,FindResource(NULL,TEXT("#100"),TEXT("BINARY"))))
table1 = (LPSTR)LockResource(h_res1);

で、バイナリを読み込んで

MOV EBX,dword ptr[table1+EDI+1000h]

で、バイナリデータの一部を読みたいんですが、例外が出て止まってしまいます。
ちなみにEDI+1000hはオフセット値なんですが、何がいけないんでしょうか?

というかこういう質問はアセンブラスレ行きですかね・・・
俺は懐石が解析の誤字であることまでつきとめた。えらいだろ
>860
エロイな。
おめでとう。
>>859
MOV EBX,dword ptr[table1+EDI+1000h]

EBX = *(int *)(((char *)&table1)+EDX+0x1000)
だから
>>839
そういえば昔com2txtってのがあったよ。
>>859
個人的にバイナリデータならLPSTRよりLPBYTEにしろと言いたい。
>>863
そういう問題じゃなくて、コード全部がASCII文字の中でも特に
表示可能文字の範囲に入ってることがすごいっていう話なんだが?
>>865
com2txtは表示可能文字でSTUBが書かれていて自己展開でそのまま起動可能なんだよ
867865:04/08/12 14:49
>>866
それは分かってる
>>867
そんなに驚くことかね?
DOS時代は
echo ほげほげほげほげ>a.com
とかやって COM ファイル作ったもんだけどね。
EXE ファイル作れたらさすがに神だとは思うけど。
869839:04/08/13 00:05
>>863
知らなかった…
Vectorからダウンロードしてソース見てみたら
「ヘッダ部はほとんどハンドアセンブルによって作った」そうで。
>>868
だからそれはcom2txtとかのユーティリティがあるから簡単にできるってだけでしょ。
つか、com2txtみたいの使って作ったんじゃないのかと。
>>869
868じゃないけど補足しとくと、日本語だとカタカナとか漢字が使えるので、
ASCIIに比べて使用できるコードの範囲が広くて、 int 21(cd 21)が
「ヘ!」で表せたりするんで、そんなソフトを使わなくても簡単なプログラムなら
テキスト表記可能な範囲で実装出来ちゃうわけなんで。
確かawkだか何だかの256本でも、数文字の簡単なコードが一つ紹介されてた希ガス
872865:04/08/13 05:13
>>868
驚いているのは私ではないんだが・・・
良く読んでくれ。
873847:04/08/13 17:59
>>848
むしろ調子に乗って表示する文字列を書き換えたら、
McAfeeが別のウイルスとして検出して回収していったのに驚いた。
先週ぐらいからアセンブラを勉強しはじめたものです。
マイクロチップ社純正のアセンブラ「MPASM」を使用しています。
アセンブラで正確なストップウォッチみたいなものを作ろうとしているところで、
ひとつお聞きしたいのですが、
16F84(A)の動作クロックが8MHzの場合、1命令サイクルは0.5μsですが、
COUNT=3 として、以下の命令文では
LOOP NOP          (1)   (6)   (11)
    NOP          (2)   (7)   (12)
    DECFSZ COUNT,1  (3)   (8)   (13)(14)
    GOTO  LOOP    (4)(5)  (9)(10)
    RETURN                 (15)(16)
と、この場合、16命令サイクルになりますが、ここから本題、
割り込みを使用した場合、
START NOP (1)
     NOP (2)
     NOP (3)                    ORG   0
     NOP (4)                    START
     NOP (5)                    ORG   4
           ←ここで割り込みが発生 →  NOP (?)
     NOP (6)                    NOP (?+1)
     NOP (7)                    NOP (?+2)
? はいくらになるのでしょうか。
初めてプログラムしたり、回路を組むので、
どれだけの誤差が出るかわかりませんが、
できるだけ正確に組んでいきたいですので、
ご教授お願いします。
PICアセンブラ統一スレッド
http://pc5.2ch.net/test/read.cgi/tech/1060182978/
x86でpushfは、flagレジスタと全ての汎用レジスタを退避するんだっけ?
フラグだけだったような。
全レジスタのpushは別にあったと思う。
pushaとpopaはamd64で変わったんだっけ。
>>878
変わりません。使用できます。
ちなみにopcodeは、60
勝手に命令追加するなや
PDFよく嫁
amd64ってもうみんな当たり前の知識になってるの?

ちなみにAMD64のマニュアル第三巻には、こんな風に書いてあります。
Pushes the contents of the eAX, eCX, eDX, eBX, eSP (original value), eBP, eSI, and
eDI general-purpose registers onto the stack in that order.
This instruction decrements the stack pointer by 16 or 32 depending on operand size.

Using the PUSHA or PUSHAD instruction in 64-bit mode generates an invalid-opcode
exception.
882879:04/08/23 16:12
>>880
amd64上で32bitモードで実行するならpusha、popaが使える。
64bitモードではpusha、popaのコードは無いので使用できない。
>amd64上で32bitモードで実行するならpusha、popaが使える。

こんなの当たり前なのでは。あと「32bitモード」じゃ
CompatibilityモードなのかLegacyモードか判別できないから
ちゃんと分けて使うべきでは。
>勝手に命令追加するなや
>PDFよく嫁
全然、その命令が無いみたいに言ってるではないか。
無いわけ無い
ぬるぽ
>>885
F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4
F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4
F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4
F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4
F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4
879は放置でよろしく
Linux上でnasmを使いアセンブラの勉強をしたいと思っています。その際の教科書とする書籍なのですが、

はじめて読む8086
  http://www.amazon.co.jp/exec/obidos/ASIN/4871482456/249-8419394-4696315
はじめて読む486
  http://www.amazon.co.jp/exec/obidos/ASIN/4756102131/249-8419394-4696315

このふたつは内容が古いという話も聞きますけど、同じx86である以上本質はそんなに変わらないと思うのであまり問題ないですよね?
あと486の方は8086を読んだという前提の元話が展開されていくのですか?

#「こっちの方がお薦めだ!」というのがあるのならそれも教えていただけると嬉しい。
先にマセンブラをやっといたほうが良いよ
はじめて読む486はOSつくるんでもなければ用は無い。
>>890-891
ありがとうございます。(マセンブラ、ですか??)

486は少々高度な内容になるんですね。
でも私はまさしくOSをつくるとは言わなくても、Linux Kernelを完全に理解できるくらいを目指しているので読んでみようと思います。

アセンブラの勉強を一通りできたらMinix本も読もうかと。
486は堅実に読んでいけば難しくない
8086の知識はないと、やや読みがたい
読みにくいとは思うが、読みがたいとは思わないな。
386以前だと思うんですが
INT 50hって何をする割り込みなんでしょう?
ユーザ定義の割り込みでしょうか

>はじめて読む486
386よりかっこいいと思って買ってしまった苦い思い出
896デフォルトの名無しさん:04/08/25 13:01
ありゃりゃ、癖でsageてしまった
>>894
俺は読みムズいと思うな。
ここってアセンブラの質問していいとこですかね?質問したいんですけど。
http://wisdom.sakura.ne.jp/programming/asm/assembly7.html
ここでやってるようにdebugコマンドで勉強してるんですが、

-A 100
34EE:0100 MOV BYTE PTR [0200], 41
34EE:0105 MOV WORD PTR [0300], 4342
34EE:010B
-d 200 200
34EE:0200 42 B
-d 300 301
34EE:0300 00 00 ..

これっておかしいですよね?なんで0200がいきなり42なんでしょうか・・・。
0300,0301なんて00って問題外です。

アドレスは違うんですが、こんな感じでやってみてるんですが、
DSはどこ指してんのよ
900898:04/08/25 13:37
>>899
セグメントレジスタは全部34EE指してます・・・。
901デフォルトの名無しさん:04/08/25 13:41
895はスルー?
-G =100 10B
903898:04/08/25 13:54
>>902
(;゚д゚)ァ.... ・・・・・・。
実行してませんでした・・・・(〃▽〃)キャッ
今日の昼からはじめたばかりで・・・。
アセンブラって無償コンパイラすらまともにみつからないほどマイナーなんですね・・・。
Intel書式さえ捨てればgasがある
つーかnasmあるじゃん
tasmってフリーのセットに含まれてないんだっけ?
今はCコンパイラについてこない、市販のみ
908906:04/08/25 16:18
ちなみに、 gas(cygwin, mingwとか)が吐くオブジェクトファイルは
MicrosoftのPE COFFリンカが喰えたりするので、
gas syntaxで書くのも一興

俺のばあい、フロントエンドがC++Builderだったりするので、
gas で書いたコードをわざわざobjdump して、
db $XX とかが含まれた .asm を吐いてたりする。
>>895
ソフト割り込みだから、とくに決まってない。
俺もつい最近cygwinのspecsを眺めて知ったんだけど
x86用のgcc/gasって、intel形式でも出力できるよ。
(linux上だとレジスタに%がついてたけど)

gcc -S -masm=intel xxxx.c
で試してみそ。

ソースの先頭の方に.intel_syntaxがあると
intel形式のソースとして解釈されるみたい。
まあ、セグメント/ラベル/データ等の記述はmasm系と同じにはならないんだけどね。
913このスレの名づけ親:04/08/26 00:38
900超えたので

次スレは私に立てさせてください。
「アセンブラ… キタ━(゚∀゚)━!!」
いいやまだまだ。980超えたら立てるがよい。
915このスレの名づけ親:04/08/26 01:23
>>914
950を目安にします。
>>912
初めて知った
917895:04/08/26 13:06
ありがとうございます
早杉。吊れ。
>>919


    §,; ________§; ,
  || §; /    § ヽ  ||
  |~~~§~     §'~~~~~~~|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | ____§/"""ヽ,§_____  | < すいませんでした・・
  |__|///(§  §)ノ////|__|///\________
 ⊆___)///ゝ___§ノ/////(____⊇////
 ///////////////ジュ〜////////////
 /////////////////////////////
次スレはもう1年近く前から立ってるわけだが・・・

http://pc5.2ch.net/test/read.cgi/tech/1065535118/
922このスレの名づけ親:04/08/26 22:59
>>918
・・・
>>43
もうそろそろだ準備しとけ。
924デフォルトの名無しさん:04/08/31 18:15
重複すいません。
ちょっと、聞きたいのですが、アセンブラーで3000ステップあるソースをCOBOLに移行したら、
だいたい何ステップぐらいになるもんですかね?
1000
1000ステップ
927デフォルトの名無しさん:04/08/31 19:49
次のタイトルは

「 アセンブラ… 。・゚・(ノД`)・゚・。 ウエーン 」

でお願いします
アセンブラ… (;゚Д゚) ハァ?
アセンブラ… (°Д°)ハァ?
http://pc5.2ch.net/test/read.cgi/tech/1093519463/
責任もって埋めろよ
>>927
じゃ、950過ぎたら次スレ立ててみるよ
932埋め:04/09/01 20:03
アセンブラ… (°Д°)ハァ?
http://pc5.2ch.net/test/read.cgi/tech/1093519463/
NOP
NOP
NOP
無意味に埋めるな。
ここはdelay slotじゃない。
label000:
jmp label000
永久機関
そは空洞なり
そは空洞なり〜
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90^C
PREFETCH命令を使うと、心持ち早くなってるように感じるのは気のせいですか?
うん
HLT
っていうか、次スレってマジで、
アセンブラ… (°Д°)ハァ?
http://pc5.2ch.net/test/read.cgi/tech/1093519463/l50
なのか?
なんかバカにされてるようなスレタイなんだが。
mov a,aがあるんだから、
mov m,mも在るだろうと思った昔が懐かしい。
>>941
そっちは削除依頼
次スレはおれが950過ぎたら立てる
>>943
頼むよマジで。
アドレス生成インターロックやレジスタストールを検出できて
警告を出したりできるアセンブラがあれば便利だと思う。
そして、それを見て人間がその箇所に手を入れると。
このアイデアどお?
>>945

|つ[VTune]
アイディアは悪くないだろうけど

プロセッサが変わったら
無意味な警告でいっぱいになるよ。

今、「UパイプとVパイプが有効利用できません」なんて警告が出ても
どれほど役に立つと。
>>947
まず最初に、CPUIDで検査してだな...
対応してない場合は、このCPUは未対応ですっていうメッセージをだしてだな...
バージョンでアップで対応するCPUを増やしてだな...

っていうか、検出自体のプロセスはそれほど難しくないはずなんで、
バージョンアップで対応はそれほど困難ではないような気がするのだが。
>>947
>今、「UパイプとVパイプが有効利用できません」なんて警告が出ても
>どれほど役に立つと。
「ああ、今はUパイプとVパイプが有効利用できないんだな」って事が知ることができる。
>>948
>まず最初に、CPUIDで検査してだな...
他のCPUのはできないのかよw
>>946
VTuneってどうなの?

値段が高いので、おいそれと手が出せない。
職場に古いバージョンが転がってたけど、遊ぶ暇なかったし・・・。
CPUIDで検査できるのは、
「アセンブルを実行している環境のCPU」であって、
「アセンブルされたプログラムが実際に動作するCPU」を
アセンブラ自身が判別するのは不可能なわけだが。

だいたい、今現在だって
P6/NetBurst/K7/K8環境が混在していて
それぞれ得手不得手があるのに。
>>950
イソテルの辞書には、CPUIDの無いCPUは無いって書いてありました。w
>>952
うむ。
バイナリフォーマットにそういう情報あればいいのかな?
このバイナリは、P6で最適化されてます、みたいな情報。
...むりっぽいね、忘れてくれ。
自動判定がダメなだけで、
手動でターゲットを指定すれば出来ないことはないけどさ。
今だって、コンパイラが、特定のプロセッサに特化した最適化をしているでしょ。

ただ、アーキテクチャが変わるごとに警告内容が陳腐化して役に立たなくなるし
全ての環境に最適なコードというのが存在しないのだから
労力の割に効果が期待できなくて、どこも作ろうとしないのではないかと。

intelはVTune等の別ツールでの対応が本道だと考えているだろうし
MSはアセンブラじゃなくてコンパイラの最適化に力を入れるだろうしね。
011010111111001001010111
010110000000000010111100
アセンブラ… (°Д°)ハァ?
http://pc5.2ch.net/test/read.cgi/tech/1093519463/
959デフォルトの名無しさん:04/09/02 11:45
AMDのCodeAnalyst使ったことある香具師いるか?
感想きぼんぬ
アセンブラの仕事してる人いる?
8ビットですがノシ
>>960

128bitですが のし
>>962
しかもLIWだろ?
LIWじゃないよ、VLIWでもないよ
>>964
ちごたか(てへっ

# ただいまAMD最適化厨
MMX命令で32Bit符号付き整数の飽和減算をやりたいけどどの命令を使えばいい?
8Bit 16Bitはあるけど32Bitが見あたらないYO
>>967
名前的にPSUBSDになりそうな命令はやっぱり見つからないよー
>968
じゃあねぇんだろ。
こんなとこで喚いてないで、黙って他の方法考えろ。
アセンブラを使った開発の仕事をしたいのですが、
実際にどのような仕事になるんでしょうか?
ちなみに私は昔ゲームボーイソフト開発でZ80アセンブラ
(正確には違うらしいが)使ってました。
いまどきアセンブラなんて情報家電くらいじゃない?
>>970
これなら大半はアセンブラばかりだって仕事は、
PIC とか使った¥500位のおもちゃ製造くらいじゃないかな〜。
あとパチンコのプログラム。

アナログ回路技術者よりもさらに需要が少ない。
>>971
情報家電、携帯電話のソフト開発は大体Cでは?
ごくごく一部 Java もあるけど。
低〜中級技能者の大量投入でこなすパターンが多いし。
そこでBasicですよ
>>974
ワロタ、アセンブラですらないし
>>970
漏れ8ビットのゲーム系で仕事してるよ。フルアセンブラ。
アセンブラ… (°Д°)ハァ?
http://pc5.2ch.net/test/read.cgi/tech/1093519463/
DOSプログラムの逆アセンブラで良いものがあれば教えてください
PeRdr、dispe、objdumpあたりは対応していないようです
>>978
vectorに色々あるだろう。
Sourcerつーのが強力でよかったが、もう手に入らんよなあ。

980970:04/09/04 00:20
なるほど、アセンブラはもうあまり需要ないんですね。
ありがとうございました。
>DOSプログラムの逆アセンブラで良いものがあれば教えてください
漏れが作った奴。
問題は、n88basicで書かれていることだな。
>>980
正確に言うと、ズブの素人にゃ仕事は残されていないが
逝くとこに逝きゃ引く手あまた

次スレは、早く立ちすぎたアレでもよい?
うん
結局、反対してるのはスレタイを思い通りに付けられなかった一部の厨の罠。
真のあせんぶら使いは、スレタイなどのような細かい事にはこだわらない。
ところで、次々スレは「アセンブラ・・・ ( ・∀・)つ〃∩ ヘェーヘェーヘェー」でお願いします。
厨臭いタイトルつけることに意味あんの?
「アセンブラ・・・ ( ´∀`) <ぬるぽ」
にして、1000まで ガッ しつづけるってのはどう?
ただの荒らしか
スレタイに拘ることに意味あんの?
意味もなく厨房がよってくる
スレタイ決めたい厨が五月蝿いスレだな
100000000000000000ゲット
次スレ

アセンブラ総合スレ Part7
http://pc5.2ch.net/test/read.cgi/tech/1094271973/
>>992
忠告しとく。自作自演でもなんでもしてスレを伸ばしておかないと重複でそっちが消されるぞ。
>>992
重複スレ立てるなよ。
995デフォルトの名無しさん:04/09/05 00:17
997デフォルトの名無しさん:04/09/05 00:28
皆さんにお願いがあります。
俺、1度でいいから1000とって見たいんです。
999で放置してもらえませんか?
一度でいいからとりたい・・・
だが、断る。
999デフォルトの名無しさん:04/09/05 00:33
そこをなんとか・・・
1000デフォルトの名無しさん:04/09/05 00:33
アセンブラ… (°Д°)ハァ?
http://pc5.2ch.net/test/read.cgi/tech/1093519463/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。