アセンブラ… (・∀・)イイ!
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG機械語萌え。20 D4 FF FF 50 E8 8A DC FF FF 68 10 20 00 00 8D
45 B4 50 8D 85 B4 FB FF FF 50 6A 00 E8 7B DC FF
FF 8B E5 5D C3 00 00 00 FF FF FF FF 02 00 00 00
0D 0A 00 00 55 8B EC 83 C4 F4 84 D2 74 08 83 C4
F0 E8 82 C4 FF FF 89 4D F4 88 55 FB 89 45 FC 8B
45 FC 83 C0 04 8B 55 F4 E8 2B CD FF FF 8B 45 FC
80 7D FB 00 74 0F E8 B5 C4 FF FF 64 8F 05 00 00
00 00 83 C4 0C 8B 45 FC 8B E5 5D C3 55 8B EC 83
C4 F0 53 33 DB 89 5D F0 84 D2 74 08 83 C4 F0 E8
34 C4 FF FF 89 4D F4 88 55 FB 89 45 FC 33 C0 55
68 61 69 40 00 64 FF 30 64 89 20 8D 45 F0 50 8B
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004名無しさん
NGNG0005デフォルトの名無しさん
NGNGアセンブラ ∽ コンパイラ
アセンブル ∽ コンパイル
0006デフォルトの名無しさん
NGNG無料DLできますか。
0007デフォルトの名無しさん
NGNG----------------- 終了 ------------------
0008デフォルトの名無しさん
NGNG今なら1万5千円で買えるぞ
http://www.borland.co.jp/bcsuite/
DOSのC++コンパイラもついてるからワンダーウイッチにも使えるぞ
0009デフォルトの名無しさん
NGNGどうしても高速化したいときとかに使う物で、
趣味でやるもんじゃねーよ。
やったら最後、地獄にハマるんだなこれが・・・
高水準言語でお気楽に構えている方が正解だぜ。
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNGCPUは壊れない
しかしメモリメチャクチャ
ハードディスクぐちゃぐちゃってことはよくある
ウイルスより被害大(たった数字が1違っただけなのに〜)
なんてことはざらにある
001513
NGNGハードディスクへアクセスするにはそれなりに敷居があるからね。
0016デフォルトの名無しさん
NGNGHDDにアクセスって、デバイスドライバを書くのでもなければ
結局APIを呼ぶだけなので何が変わるわけでもない
0017デフォルトの名無しさん
NGNG>>16
の言っている程度のことでアセンブラを使うのは間違いである。
0018デフォルトの名無しさん
NGNGそれも速度のためじゃなくてCじゃ書けない処理を行うため。
スーパースケーラーなCPUではパイプラインの動作を人間が
追いきれないので最適化でコンパイラに勝てるなどと思うのは
素人の浅知恵です。
もし、Cをアセンブラで書き直したら早くなったってのは元の
プログラムがダメだったってことだ。
001913
NGNG部分的には最適化されていても、
全体を通してみると完全に最適化されいるわけではない。
アセンプラを使う理由はそこにある。
よってアセンブりコードはある程度複雑さを持っているということは自明であり、
複雑なことをするために相応の危険が伴う。
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別に危険は伴わないって
バグが発生しやすいだけ
何故アセンブラが危険を伴うと決めつけたがるんだ?
0024デフォルトの名無しさん
NGNGCで書こうがバグがあったら危険だろ
アセンブラ云々は関係ない
Cで発生せずアセンブラでのみ起こるような危険など発生させたことはないが
具体例を挙げてみてくれ
0025デフォルトの名無しさん
NGNG>ハードディスクぐちゃぐちゃってことはよくある
無ぇよ
>ウイルスより被害大(たった数字が1違っただけなのに〜)
ハァ?
先入観と妄想が激しいようですな
0026デフォルトの名無しさん
NGNG例えばメモリのA番地からB番地までをクリアするコードを書いたつもりが
ループの終了条件を間違えてB番地以降もクリアしてしまった場合。
Cのコードならばsegmentation faultやアクセスバイオレーションで終了してくれるが、
アセンブラならばそのままメモリの最後までクリアしてしまう。
0027デフォルトの名無しさん
NGNGOS持っているメモリ保護機能はCで書こうがアセンブラで書こうが同じように動作する
アセンブラをなんだと思ってるの?
0028デフォルトの名無しさん
NGNGまたいるよ(*´Д`*)
だったら、なんでCPUのアナライザなんか売ってんだよ。
人間の最適化が必要だからだろ。
0029デフォルトの名無しさん
NGNGグレート!
0031デフォルトの名無しさん
NGNGニーモニック"変換機"だと思われ
0032デフォルトの名無しさん
NGNGwarata
00332
NGNG一般教養として身に付けとけ.アセンブラ判らないと
「キャッシュに載るように」なんてのも判らんだろ?
0034デフォルトの名無しさん
NGNG俺も「グレート!」です。
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNGああ、もちろん手作業で最適化するのは時間が掛かるけどね。
x86アセンブラなら色々idiomあるし、触っても良いじゃない。
0037デフォルトの名無しさん
NGNG最適化なんてしなくてもいいように技術が進化してるんだから、過去の遺産は棄てなさいね。俺は32歳のプログラマーだけど、年収3000万だよ。
0038デフォルトの名無しさん
NGNG方が速いんだよ。
そりゃ中にはそれ以上のことをやる人はいるけど、アセンブラで動く物作った
位で得意になってるようなやつには吉野家のコピペ貼っちゃうぞ。
0039デフォルトの名無しさん
NGNG自慢がしたいだけ?逝ってよし
0040デフォルトの名無しさん
NGNGPen3->Pen4とかの違いでもうだめじゃん。
0041デフォルトの名無しさん
NGNG>アセンブラは業務で仕方なくとか、
>どうしても高速化したいときとかに使う物で、
>趣味でやるもんじゃねーよ。
???
どっちかというと趣味でやる(やりたくなる)もんじゃないの?
高級言語だと靴の上から足を掻いてるみたいで気持ち悪い−もっとダイレクトに書いてみたい、という動機で。
0042デフォルトの名無しさん
NGNGそういう方はどうぞやってください。
0043デフォルトの名無しさん
NGNGホビイストがプログラミングする動機は「面白いからやる、やりたいからやる」なわけだから、変な理由をつけて止める理由はないよね。
プロになった場合でもアセンブリの経験がないより、あった方がいいんでしょ、使わないまでも。
やりたい人はおおいにやりましょう。
0044デフォルトの名無しさん
NGNGもしいたら、どんな仕事してるかおしえてちょ!!
0045デフォルトの名無しさん
NGNGだけど、もう一方で普通の人はコンパイラに勝てないというのも正しいと思う。
そんなわけで、アセンブラを勉強するのに良い方法。
Cで簡単な関数を書いて、アセンブリソースを出力してみる。
これで勉強するとCでもアセンブラでも速いコードが書けるようになるよ。
0046デフォルトの名無しさん
NGNG0047キャリー
NGNG0048デフォルトの名無しさん
NGNG最適化しなくていい世界に住んでるあんたは幸せだな。
世の中そういうところだけじゃないよ。
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNGインラインアセンブラ強力だし
Delphiのコンパイラの最適化は 多少弱いから 使う価値あるしさ
0051デフォルトの名無しさん
NGNG最適化はコンパイラがやってくれるので心配無用です
0052デフォルトの名無しさん
NGNGあんたはタイトなループをCで書いて満足な速度出せますか?
0053デフォルトの名無しさん
NGNG具体的にどんな処理を書くときの話?
005451じゃないけど
NGNG書いて無い。
0055デフォルトの名無しさん
NGNG2,3年前の話だけど、本を見ながらソースをアセンブラに書き直したら
何割も早くなった事がある。
素人のおれがやっても、そんなだからプロがやったらもっと
速くなるんじゃないか?
それとも、この2,3年の間に飛躍的にコンパイラの技術が発展したとか?
0056デフォルトの名無しさん
NGNGだがプロファイルもとらずに最初から高速化する奴はヴァカ
0057デフォルトの名無しさん
NGNG>>55 飛躍したのはCPUだよ。動作が複雑化して単純な最適化は通用しなくなったのさ。
今自分が使ってるCPUに実行ユニットがいくつ有って、パイプライン何段だか知ってる?
0058デフォルトの名無しさん
NGNG全く同じ処理を何度もする場合でしょ
そんなケースってほとんどない気もするけど
でも、今はいろいろCPUあるし・・・
だから意味ないと思う
0059名無しさん
NGNG100万くれ
0060デフォルトの名無しさん
NGNGゴゴゴゴゴルァ!!
自社ライブラリを各CPU毎にアセンブラで最適化する身にもなってみやがれ
氏ぬよもう
0061デフォルトの名無しさん
NGNGインテルのコンパイラは見たことない。
0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNGまた知ったか君が・・・
でも人間を最適化出来たらそれが一番だろうな
0064デフォルトの名無しさん
NGNG内容は駄スレに値する程度のものしかありません
ここは抽象的な事を書いて知ったかするためのスレです
0065デフォルトの名無しさん
NGNGどっちでもいいから、煽ってないでなにか根拠を示せよ。
006658
NGNGアセンブラで最適化する必要のあるライブラリーってなんですか?
DSP以外にあるんでしょうか?
0067デフォルトの名無しさん
NGNGおまえが知ったかなんだろ?
アセンブラのコーディングなんてやったことないんだろ?
自分の部下にやらせているんだろ?
0068デフォルトの名無しさん
NGNGこのスレが知ったかの固まりの駄スレであることは明白だろう
0069デフォルトの名無しさん
NGNGパスワードの処理なんかに最適だと思うけど。
コンパイラなんかで書いていたら、すぐに解読されてしまうよ。
0070キャリー萌え
NGNGSP(スタックポインタ) 魔法使い
ステータスレジスタ/フラグ 貴族
アキュムレータ/汎用レジスタ 雑兵
裏レジスタ 伏兵
セグメントレジスタ 嫌われ者
0071デフォルトの名無しさん
NGNGなぜ?
実際にアセンブラなんて使ったことなくても
コンピューターの仕組みがわかってれば
ある程度のことは予想つくのでは?
物理とか化学の勉強したことないの?
自然現象もその類
0072デフォルトの名無しさん
NGNG実行中の状況をトレースされたら終わりだと思うが?
0073デフォルトの名無しさん
NGNG3D関係。リアルタイムだから間に合わなければ速くしなければ使い物にならないので。
あとLightwave, PhotoShopのプラグインなんかもコンパイラの対応していない
最新の命令(3DNOW!SSE2など)を使うためにアセンブラ使わざるを得ないんじゃないの?
よく知らないけど。
0074デフォルトの名無しさん
NGNG予想で適当なことを書くことを知ったかと呼びます
0075デフォルトの名無しさん
NGNGまた、そういう意味のないたとえ話を…。
まぁ、机上の知識でもいいから、なんか具体的な話をしてみれよ。
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNG3Dで複雑なワンスキンメッシュのモーフィングも
アセンブラ使わんとマトモな速度でないぞ
0078デフォルトの名無しさん
NGNG>3D関係。リアルタイムだから間に合わなければ速くしなければ使い物にならないので。
リアルタイムならフレームレートを落とすだけ
ムービーを作るときなどのレンダリングならリアルタイムである必要はないので
間に合わないもへったくれもない
だから3D関係だからというのは当てはまらない
>コンパイラの対応していない最新の命令
これは確かにアセンブラを使わなければどうにもならないが
0079デフォルトの名無しさん
NGNG今は構成が違うから関係なさそうだけど。
0080デフォルトの名無しさん
NGNGリアルタイム描画が必要な状況では、
フレームレートが落ちてると見苦しい事が多いので、
無理をしてでも稼ごうとするもの。
レンダラのプレビューならそれでも良いんだろうけど、
デモやゲームだと見苦しいよ
0081デフォルトの名無しさん
NGNGαブレンドは良く話題に出るがアセンブラを使わなくても高速化する方法は
そこらのゲーム作成系の掲示板でいつも話題が出る
後者はビデオカードの助けがないと、どっちみちまともな速度で動かない
0082デフォルトの名無しさん
NGNGそのトレーサーが使え無い様にする事もできるのだが。
0083デフォルトの名無しさん
NGNGその手の方法だと、トリッキーな演算するんで、逆に読みづらくなるよ。
それに、エロゲ作るんじゃないんだから、αブレンドだけで60fpsが出たからといって満足はしないよ。
フェード中にちびキャラいくつも動かしたいとか、要求はいくらでも出てくる。
0084デフォルトの名無しさん
NGNGてゆうかロジックがばれたら破られるパスワードなんて実際には使い物にならない。
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNGロジックを解析しなくても、分岐を書き換えればそれで終わりです
0088デフォルトの名無しさん
NGNG別に全部アセンブラ化するわけではないし(場合のよってはやったが)、
先にCでプロトタイプ作っとけば、特に困難なわけではない。
ともかく高速化の要求が現実にある以上やらざるを得ないんだよね。
なんか未経験妄想君っぽいんでもう相手にするのは控えるよ。じゃあね。
0089A
NGNGX87FPUは全く知る必要は無いし、
Cで元のコード書いて、ループの中だけ
インラインアセンブラで置き換えれば良いだけと、
あんまりアセンブラの知識は必要なさそう。
0090デフォルトの名無しさん
NGNG逃走
>先にCでプロトタイプ作っとけば
そんなしょぼいプログラムですか・・・
現代の話じゃないそうです
0091デフォルトの名無しさん
NGNGは?
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNGターゲットアドレスを変化させながら ローテート命令を必要回繰り返すだけ。
Cだとどうなる?
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNG0096age
NGNG0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGとりあえずリトルエンディアンなら
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このスレで頭ごなしに否定している人ってどれのこと?
見あたらないんだけど妄想ですか?
0101デフォルトの名無しさん
NGNGEAX と EBX を合体させて、
EAX を上32ビット、EBX を下32ビットとして、計64ビットの
レジスタとして使うって事?
0102デフォルトの名無しさん
NGNG違う。符号有り32bitを符号有り64bitに変換する命令。
EAXレジスタの最上位ビットが0の場合、EDXレジスタに 0x00000000 を入れる。
EAXレジスタの最上位ビットが1の場合、EDXレジスタに 0xFFFFFFFF を入れる。
こうして出来たEDXレジスタを上32bit、EAXを下32bitに使うことで
符号有り64bitとなります。
0103デフォルトの名無しさん
NGNG0104_
NGNG3DNowの勉強したいんだけど、これは必須ですか?
0105デフォルトの名無しさん
NGNGプロセッサパック入れるとML.exeも入るね。
必須と言うか入れると便利かも。
nasmでも良いけど、MASMに慣れてるならこの方が良いね。
本気で使うなら、win32.inc付いてないから、DDK落すのが良いね。
あと、MASMのinvokeにはバグが憑いてるから注意。
0106デフォルトの名無しさん
NGNG業務でJPEGデコーダ(ARM,C++)の高速化改造やってるが、
アセンブラ以前にアルゴリズムがヘボでバグで鬱。
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNGそのときは結局PCアーキテクチャになんの?
それともBIOSやブートコードから自社内で作っていく?
そのへん興味あるんで業界の方お教えください。
0109デフォルトの名無しさん
NGNGSH系はクール
ペンティアムのように熱くならない。
SHが良くなってペンティアムを超えて欲しい。
インテルを超えて欲しいね。
0110109
NGNG0111デフォルトの名無しさん
NGNGなので組み込みではx86は少数派。
でも、無いことは無い。
BIOSやブートコードは0から作ることはめったに無いんじゃない?
会社の守備範囲にもよるだろうけど。
私はファームに半分足を入れたミドルウェ屋だけど、BIOSは基本的に
ハード屋さんの書くもので、よほどのことが無い限りは手を入れること
は無いです。
0112デフォルトの名無しさん
NGNGレスThanksです、業界の方のお話は貴重です。
BIOSやりたいとか思うんすけど、日本じゃ難しそうですね。
0113デフォルトの名無しさん
NGNG出来る奴が書いたCコード >>>>> ドキュンの書いたアセンブラ
って事でイイ?
0114デフォルトの名無しさん
NGNGそれは間違いない。
0115デフォルトの名無しさん
NGNG大きな企業の専門部所とか入ればチャンスはあるのかな・・・?
0116デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNG「できる」シリーズでプログラムかけるのか?(藁
0121デフォルトの名無しさん
NGNGバグ(?)有りにつき注意>VCPP
ただ3DNowやSSE使うなら便利なのでバグ(?)にだけ注意してれば大丈夫
リリースビルド時にebxが__asm{}前後で保持されないので
自力でpush ebx,pop ebxしておかないとバグる
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNG0126デフォルトの名無しさん
NGNGいまでは絶滅したのでは。
普通はCもできるだろうからね。
0127デフォルトの名無しさん
NGNGRubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!Rubyが最強!
0128sage
NGNG0129デフォルトの名無しさん
NGNG0130デフォルトの名無しさん
NGNG>>129 なんじゃそらw
013192
NGNG0132デフォルトの名無しさん
NGNGx86アセンブラはどの程度使える?
ソコソコ使えるなら
取り合えずMMXテクノロジ最適化テクニック辺りでも買ってきて読めや
VC使ってりゃインラインアセンブラでMMXは普通に使える
それ以外の処理系ならVCに変えろ
0133デフォルトの名無しさん
NGNG今月のC魔が買ってこい。
0134デフォルトの名無しさん
NGNGあんなのintelのpdfの既出情報ばかりで役に立たんうえに
MMX最適化部分については殆ど述べてないじゃん
0135デフォルトの名無しさん
NGNG今更またMMXやってんの?
とりあえず漏れも>>134と同じく(?)Intelのpdfマニュアルお勧め
アプリケーションセンター逝けば、サンプルプログラムも結構ある。
0136デフォルトの名無しさん
NGNGABS関数は大抵のコンパイラで
MOV EAX X
CDQ
XOR EAX EDX
SUB EAX EDX
と展開されると書いてありますが、
MOV EAX X
CDQ
XOR EAX EDX
INC EAX
ではだめなんですか?
X が -8 だとすると、
EAX = 1111 1000
ですよね。
CDQ してやると、上位1ビットが1なので
EDX = 1111 1111
で、XORすると
EAX = 1111 1000
EDX = 1111 1111 ( XOR
-----------------------
EAX = 0000 0111
で、最後に1を足す部分ですが、
EAX = 0000 0111EDX = 1111 1111 (SUB
---------------------EAX = 0000 1000
としないで、
INC EAX
ではダメなんですか?
こっちの方が早い気がするんですけど。
0137デフォルトの名無しさん
NGNGCDQ ->EDX=0 EAX=1
XOR ->EAX=1
INC ->EAX=2
abs(1)=2 ですか?
0138デフォルトの名無しさん
NGNGって どこで読んだの?
0139デフォルトの名無しさん
NGNG立つなら、adc eax, 0で良いんじゃ?
0140デフォルトの名無しさん
NGNG0141デフォルトの名無しさん
NGNGhttp://www.infoeddy.ne.jp/~tensyo/prog/linealgo.htm#hypotenuse
0142138
NGNG0143デフォルトの名無しさん
NGNG-a 100
2732:0100 mov dx,110
2732:0103 mov ah,9
2732:0105 int 21
2732:0107 mov ax,4c00
2732:010A int 21
2732:010C nop
2732:010D
-e 110
2732:0110 46.32 01.63 E8.68 08.21 D9.24
-r ip
IP 0100
:100
-g
0144デフォルトの名無しさん
NGNG(a+b) xor b か (a xor b)-b が
bがbitがall1の時に aの2の補数を
bが0の時 aを返します
(a xor ((a xor b) and c))
c=0の時 aを
c=-1の時 bを返します
0145デフォルトの名無しさん
NGNG整数演算のためにアセンブラでイロイロ書いたなぁ。なつかしい(´ω`)
誤差は出るけどそれなりに高速で楽しかったYO!
0146デフォルトの名無しさん
NGNGそれ、2chのどっかの板で見た。
0147デフォルトの名無しさん
NGNGgasはニーモニックが違うとかって聞くけど
x86系のアセンブラのいい本ないでしょうか?
とりあえずオライりーにはないよね
Linuxのカーネルソース読もうかとおもってるんだけどね
オライりーの詳解Linuxカーネルという本を買ってしまいました
眠気を誘う本だよね、みんな読んだ?
実際どれぐらいの人がカーネルソース読んでるの?
学生のうちに読んどけって聞くよね
セグメントとかページングとかはかなりの部分がx86がやってるらしいね
じゃ、やっぱx86系のアセンブラやらなきゃLinuxのカーネルソースは理解できないと
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNGNASMでいいんじゃない?リファレンスついてるよ。
入門編ならWebにいくつかある。
プロテクトモードの勉強するなら「はじめて読む486」がオススメ。
0150デフォルトの名無しさん
NGNGどこどこ、教えて下さい!!!
「はじめて読む486」は読みました。
正直まともなレスがつくとは思ってなかったのでうれしいっす。
http://bw-www.ie.u-ryukyu.ac.jp/~j97010/minix/minix.html
http://www03.u-page.so-net.ne.jp/da2/h-takaha/internal/index.html
↑このへんとかwebでも結構情報入りますよね。
0151デフォルトの名無しさん
NGNGターボデバッガーのインストールしたけど
なんかMS−DOSって感じの画面
さあて旅客機でGOディスアッセンブルするど
0152デフォルトの名無しさん
NGNGgoogleで調べてすぐに出てくるものを人に聞くのは関心しないなぁ。
ほれ。
本家:http://www.web-sites.co.uk/nasm/
日本語マニュアル(一部):http://guriponn.tripod.co.jp/others/japanise/nasmdoc0.html
アセンブラの入門も一個紹介。
http://hp.vector.co.jp/authors/VA000124/index.htm
自分で調べてみても分からなかったことだけ聞くべし。
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG次の言葉のうち、どれか知っていますか:
アーキテクチャ、アドレス空間、レジスタ
0156デフォルトの名無しさん
NGNGすまんですな。
ちなみにあなたCPUのアーキテクチャとか頭に入ってる?
Linuxのカーネルソース読んだことある?
一般的なプロのプログラマーはどんなもんなんでしょうね。
自分はまだ学生ですが
0157デフォルトの名無しさん
NGNGpush ebp
mov ebp,esp
push FFFFFFFF
push 00406158
push 004038E8
mov eax,fs:[00000000]
push eax
とここまで来て思ったがintel8086ってスタックエリアに
定数そのままプッシュ出来たっけ?
0158デフォルトの名無しさん
NGNGCPUのアーキテクチャねぇ。
俺はアセンブラは趣味程度にしか弄らないから
一般教養程度しか頭に入ってないな。
名前以上のことを知ってるのは
IA-32、IA-64、68k、MIPS、SHぐらいか。
PowerPCやAlphaのことはまったく知らんな。
R2000とかだったら内部ダイアグラムを読むぐらいはできる。
でもあくまでも教養の範囲なんで
いきなり組み込み系の仕事をやれとかいわれても困る。
Linuxは触ったことない。ソースを一目見て反吐が出た。
どうでもいいが少し口の聞き方に気をつけた方がいいぞ。
0159デフォルトの名無しさん
NGNG何様のつもりだ。
0160デフォルトの名無しさん
NGNGdataはデータセグメント
bssは初期化されていないデータセグメント
データセグメントはスタックセグメントと重なる場合もある。(DS=SS)
セグメントは物理メモリをリニアに見た時の覗き窓で、
8086のレジスタ仕様の64kByteまでしか一度に(効率的に)
アクセスできない制限を緩和する役目をはたす。
64kというのは、レジスタの長さが16bitなので、65536バイトまで。
0161デフォルトの名無しさん
NGNG結構知っとるやんけ
自分はLinuxをメインに使っている
Linuxの全てを知り尽くしたい
それでカーネルソースというわけ
そのうちemacsとかxwindowのソースも読んでみたい
口の聞き方は直らんのでゆるせ
くるしゅうない
0162デフォルトの名無しさん
NGNGおいおい、セグメントって何だよ。
セクションだろ
0163デフォルトの名無しさん
NGNG直らないんじゃなくて、直そうとしないだけ.
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNGアセンブラっていうのもね・・・
動くコードしかかけないじゃん
x86系じゃ、わかってても高速化は無理みたいだけど
ところで、インテルのコンパイラよりも最適化できる人って
いるの?
0168デフォルトの名無しさん
NGNGx86系じゃない人も
具体的にどこらへんを直した時に
どの程度早くなったのか教えてください
当然比較したコンパイラを書いてもらえないと、
かなり意味ないんですが・・・
0169デフォルトの名無しさん
NGNG動くコード以外に何を書くというのだ?
Intelのコンパイラもたいしたこと無い。
アレが完璧ならVTuneなんて売れるわけ無い。
つーか、VCよりも遅いこともあるし。
0170166
NGNG0171デフォルトの名無しさん
NGNG>160
補足すると
コンパイラが
text に コンパイルしたコードを吐く
data に static int x=0; みたいな変数を確保して かつ初期値を置く
bss には 初期化しなくていい変数を確保する
0172デフォルトの名無しさん
NGNG誰が読んでも、コンパイラよりも最適化されたコードって意味だろ
>Intelのコンパイラもたいしたこと無い
Pentiumに最適化するしたい時って・・・他に方法あるの?
で、Intelのコンパイラに問題があるなら
どのへんが問題なのか教えてくれよ
0173デフォルトの名無しさん
NGNG別に問題はないよ。
ただ、Intelのコンパイラが特別優れているというわけでもない。
0174デフォルトの名無しさん
NGNG>>動くコード以外に何を書くというのだ?
>誰が読んでも、コンパイラよりも最適化されたコードって意味だろ
それを言いたいのなら「動くコードしかかけない」ではなく
「動くだけのコードしかかけない」と書くべきだろ。
172の文も日本語的におかしいし駄目だこりゃ。
0175デフォルトの名無しさん
NGNGうわっ、とっても解りやすいです。
ありがとうございました。
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNG>>157
それ 8086 のコードじゃ無いじゃない 386以後のコードだよね?
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNG他のやつがソフトウエア工学をあまり知らなかったせいだと思われ
単なる動くコードっていうのは、
ソフトウエア工学でいう、まともな設計がなされてないコードの事
慣用表現のひとつだよ
0181デフォルトの名無しさん
NGNGじゃぁ、優良なコードは動くとは言わんのか?
ソフトウェア工学には 動くコード なんていう言葉の定義があるのか?
0182デフォルトの名無しさん
NGNGおい、あほまるだしだぞ?
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNG「単なる動くコード」と「動くコード」では意味合いが違うぞ。
もったいぶらないで「動くだけのコード」とか書こうぜ?
0185デフォルトの名無しさん
NGNGアセンブラで作れますか?
0186デフォルトの名無しさん
NGNG802師匠に作ってもらうとイイ
0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNGこことってもいいのですがちょっと古めですよね。
似たようなアセンブラ初心者向けのページがあれば教えてください。
0189デフォルトの名無しさん
NGNG3日経つと古いのか?
0190七誌興奮型
NGNGCASL !! CASL !! CASL !! CASL !!
CASL !! CASL !! CASL !! CASL !!
CASL !! CASL !! CASL !! CASL !!
0192デフォルトの名無しさん
NGNGgas のニーモニックは NASM, MASM などとは違いますが、基本的に一対一に
対応します。変換規則も単純ですから、どっちで勉強しても良いです。
> セグメントとかページングとかはかなりの部分がx86がやってるらしいね
Linux の仮想記憶のコードは x86 アーキテクチャにべったり依存していて極めて
ダサい(他のアーキテクチャでは、頑張ってソフトウェアで x86 をエミュレートして
いる)ので、勉強のために読むのは薦めませんけど。
0194デフォルトの名無しさん
NGNGねーじゃねーかよ!!!
いかにマイナー言語かがわかるな。
0195デフォルトの名無しさん
NGNGアセンブラ以外でMMXのコード書いてくれよ
0196デフォルトの名無しさん
NGNG使う道具としてのアセンブラだけ で食うなら
1)DSPの類 ただしコーデング技術よりノウハウで食べるんだけどね
2)4ビット系 ただし競争相手は世界なんで・・・・
かな・・・ まあご飯食べたい為の仕事なら外の仕事がいいかも
0197デフォルトの名無しさん
NGNGホラヨ。今は組み込み関数でも書けるんだよ。
__m64 m1;
m1 = _mm_xor_si64(m1, m1);
ちなみに、IntelC/C++Compilerもしくは、
VisualC/C++ + VisualC/C++ ProcessorPackでコンパイル可能。
GCCとかも最近は似たようなのを搭載しつつある。
肝心の性能だが、MMXでは、
適当にインラインアセンブラで書いたコードよりは速いのを吐いてくれる。
アセンブラできちんとパイプライニングしたものよりは多少遅い。
SSEに関しては、はっきり言ってとりあえずインラインアセンブラで書いてみました
程度の投げやりなコードでもアセンブラの方が断然速い。
まだコンパイラが成熟してないのか。
ただし、組み込み関数といえど、ほとんどアセンブリとニーモニックなので、
速度を追求してかいていくと
__m64 mm0,mm1,mm2,mm3,mm4,mm5,mm6,mm7;
とかレジスタ分の変数用意して、それだけしか使わず、
パイプラインも考慮して書いたりとかするようになるから、
結局アセンブラで書いた方が楽だったりする。
0198デフォルトの名無しさん
NGNGホラヨ。今は組み込み関数でもかけるんだ。
__m64 m1;
m1 = _mm_xor_si64(m1, m1);
IntelC/C++Compilerまたは、
VisualC/C++ + VC ProcessorPackで使える。
最近は、GCCとかでも似たようなのを実装しつつあるらしい。
気になる性能のほうは、
MMXに関しては、何も考えずに適当に書いたインラインアセンブリのコードよりは
高速なコードを吐き出してくれる。
ちゃんとパイプライニングしたアセンブリコードの方が少し速い。
SSEに関しては、はっきり言って何も考えずに書いたアセンブリコードの方が
大分高速に動作する。まぁ、どうしてもアセンブリが理解できない人向け?
この手の組み込み関数使ってても、
速度を追求して逝くと、結局はレジスタの数とか
ニーモニックとの対応やパイプラインを考えていくと、
ほとんどアセンブラと変わらん内容になってしまうので、
あんまり使い物にならんが。
0199197==198
NGNGちゃんと書き込めてたのか。2重投稿(しかも微妙に内容違う)スマソ。
0200デフォルトの名無しさん
NGNGインテルコンパイラに入ってる ivec.h なんかのベクタクラスライブラリを使うと
Is16vec4 m1; // 16bit符号付き整数×4
m1 = m1 ^ m1;
こんな風に直感的に書けるね。
0201197
NGNGそだね。でも、所詮は↑の組み込み関数のラッパーに過ぎないから、
直で組み込み関数使った方が実行速度は速いかな?
あと、実際には同じmmレジスタを8bitx8で扱ったり16bitx4で扱ったりとか
する場面が結構出てくるから、そういうときベクタクラスだとやりにくいかも。
02021
NGNGアセンブラスレに飢えていたのか?
0203デフォルトの名無しさん
NGNGなんでやねん!!
0204デフォルトの名無しさん
NGNG入門以前の事について書いてるページとかないよね
0205デフォルトの名無しさん
NGNGDOSでって、16ビットコンパイラの話をしているのか?
0206デフォルトの名無しさん ?
NGNG秋月で買い物すればいいような気が。
0207デフォルトの名無しさん
NGNGふつーにOBJファイルを生成したあとにリンクさせればいいじゃn
0208デフォルトの名無しさん
NGNGpublic
_
呼び出し規約
とか、その辺?
0209デフォルトの名無しさん ?
NGNG「MASMと…コンパイラをリンク」って書いてあるから
オブジェクトファイルをリンクさせるのとは
違う意味らしいよ。
>>204
Makefile を作っておいて、
nmake に Makefile を食わせればよい。
「入門以前」というより、ビルドを速くやるための浦和座というか…
裏技かよ?>漏れ
0210デフォルトの名無しさん
NGNGまず日本語入門サイトを探せ
0211204
NGNG>209
そうなんです、それなんです。
でもlink.exeが上手く動かずに必ずエラーが出るんです。
C++をvcvars32やってDOSで使ってたんですが、DOSではclしかできないんでしょうか…
>210
すみません。
プログラム始めたばかりなので質問しようにも知識が足りなくて。
0212デフォルトの名無しさん
NGNGなぜloop1の方が速いのでしょうか?
命令数はLoop2の方が少ないのに。
loop1は↓にあります。
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=049229
@@loop1:
MOVZX EAX, byte ptr [ESI]
MOVZX EBX, byte ptr [ESI+1]
MOV DL, byte ptr [EDI + EAX]
MOV DH, byte ptr [EDI + EBX]
MOV byte ptr[ESI], DL
MOV byte ptr[ESI+1], DH
DEC ECX
LEA ESI, [ESI + 2]
JNZ @@loop1
@@Loop2:
mov ax, [esi]
mov ax, [edi + eax]
mov [esi], da
add esi, 2
dec ecx
jnz @@Loop2;
0213デフォルトの名無しさん
NGNG?
loop2のdaってなんだ?
あと、処理が全然等価に見えないのだが?
俺がバカなだけか?
しいて言うならloop2はPpro系(Ppro,P2,P3等)のCPUだと部分レジスタストールに
該当するので遅くなる
あとloop2は486とクラシックPentiumでアドレス生成インターロックも
発生するかな?
Pproの部分レジスタストールは確か5クロックぐらいだったと思うので
JNZを除くloop1のクロック数が8として
同様にJNZを除くloop2のクロック数がまぁ見えてる範囲で9クロックだな
P2、P3のみに限ればloop1は十分な速度だ
それ以外のcpuも考慮する場合は
MOVZX EAX, byte ptr [ESI]
MOVZX EBX, byte ptr [ESI+1]
を
XOR EAX,EAX
MOV AL, byte ptr [ESI]
XOR EBX,EBX
MOV BL, byte ptr [ESI]
にするべきだ
まぁなんにしろ>212よ
お前にはアセンブラは向かないから理解するのを諦めろ
0214213
NGNGMOV BL, byte ptr [ESI]→MOV BL, byte ptr [ESI+1]
逝ってくるわ
0215デフォルトの名無しさん
NGNGediには64KB(256x256)の置換テーブルがあるってことかな。
これによるキャッシュ溢れも原因かもね。
loop1もloop2もそうだけど、1ループあたりの処理データ量が少ないなあ。
一回分ぐらいはunrollしてもいいと思うけど。
0216212
NGNGaxの間違いでした。
>処理が全然等価に見えないのだが?
リンク先を見れば分かりますが、
loop1は1バイトX256個 のテーブルを使っています。
そこで
loop2では2バイトX65536個のテーブルを使ってやってみたのです。
Delphiのコードはこんな感じです。
// Sの長さは偶数とする。
procedure Test7(var S : string );
var
ConvTbl: array[Word] of Word;
I: Integer;
P: PWord;
begin
for I := low(ConvTbl) to High(ConvTbl) do
ConvTbl[I] := I;
ConvTbl[PWord(PChar('AC'))^] := PWord(PChar('CA'))^;
// スキップ...
P := Pointer(PChar(S));
for I := 1 to length(S) div 2 do
begin
P^ := ConvTbl[P^];
Inc(P);
end;
end;
0217212
NGNGTest8(下のソース)を20回ぐらい連続して呼び出すと、
Test6と同じぐらいの速度になりました。
さっぱり分かりません。 Test6は↓にあります。
ttp://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=049229
procedure Test8(var S : string );
var
ConvTbl: array[Word] of Word;
I, Count, Len: Integer; P: PWord;
begin
for I := low(ConvTbl) to High(ConvTbl) do ConvTbl[I] := I;
ConvTbl[PWord(PChar('AC'))^] := PWord(PChar('CA'))^;
ConvTbl[PWord(PChar('AT'))^] := PWord(PChar('TA'))^;
ConvTbl[PWord(PChar('AG'))^] := PWord(PChar('GA'))^;
ConvTbl[PWord(PChar('CA'))^] := PWord(PChar('AC'))^;
ConvTbl[PWord(PChar('CT'))^] := PWord(PChar('TC'))^;
ConvTbl[PWord(PChar('CG'))^] := PWord(PChar('GC'))^;
ConvTbl[PWord(PChar('GA'))^] := PWord(PChar('AG'))^;
ConvTbl[PWord(PChar('GC'))^] := PWord(PChar('CG'))^;
ConvTbl[PWord(PChar('GT'))^] := PWord(PChar('TG'))^;
ConvTbl[PWord(PChar('TA'))^] := PWord(PChar('AT'))^;
ConvTbl[PWord(PChar('TC'))^] := PWord(PChar('CT'))^;
ConvTbl[PWord(PChar('TG'))^] := PWord(PChar('GT'))^;
P := Pointer(PChar(S));
Count := Length(S) div 2;
asm
pusha
mov ecx, Count
mov esi, P
lea edi, ConvTbl
xor eax, eax
@@Loop:
mov ax, [esi]
mov ax, [edi + eax]
mov [esi], ax
add esi, 2
dec ecx
jnz @@Loop
popa
end;
Len := Length(S);
if not Odd(Len) then
begin
case S[Len] of
'A': S[Len] := 'T';
'T': S[Len] := 'A';
'G': S[Len] := 'C';
'C': S[Len] := 'G';
end;
end;
end;
0218212
NGNG>Test6と同じぐらいの速度になりました。
毎回違う文字列でテストしたら、Test8は速くなりませんでした。
0219212
NGNG>ediには64KB(256x256)の置換テーブルがあるってことかな。
Loop1は256バイトの置換テーブルです。
Loop2は64K*64Kバイトの置換テーブルを用意して、
2バイトづつ置換しています。
0220213
NGNGデカイテーブルをボトルネックになる関数内で作ってりゃ世話がない
アセンブラ以前の問題だ
あと128kのテーブルはキャッシュあふれする可能性が高い
というかあふれるだろ
テーブルはでかけりゃいいってモンじゃないぞ
CPUの1次キャッシュや2次キャッシュに巧く乗るように(極力1次キャッシュに乗るように)
してメモリ読込による遅延を隠蔽してやらんと場合によっちゃCPU演算した方が早くなるぞ
あとアセンブラ箇所のみ関しては部分レジスタストールしてるつってんだろ
それだけ聞いてわかんなかったら諦めろ
お前にはアセンブラは向いてないって言ってるだろ?
どうして『部分レジスタストール』でgoogle引くぐらいしないんだよ?
取り合えずfnami氏のHPでも見てこい
ttp://www.csl.sony.co.jp/person/fnami/asm.htm#PARTIAL
ttp://www.csl.sony.co.jp/person/fnami/asm.htm#STALL
CPUにもよるがちゃんと今のx86で手動最適化する技能を持った人間は
お前みたいなペアリング無視ペナルティー無視のコードは書かない
最近のCPUは短いコードを書けば速くなるわけじゃないんだよボウヤ
(無論無意味に長いのは問題外だが)
0221212
NGNG部分レジスタストールについては今やっています。
220さんありがとうございます。
0222212
NGNGxor eax, eax
mov ax, [esi]
mov ax, [edi + eax]
これだけで部分レジスタストールは回避されるのでしょうか?
0223213
NGNG実はCPUがクルーソーとかいうオチを期待しているぞ(藁
>222
まぁ部分レジスタストールしてるのはそこだけだね
ただレジスタ衝突もしてるんで
@@Loop:
mov ax, [esi]
mov ax, [edi + eax]
mov [esi], ax
↓
@@Loop:
xor eax,eax
mov ax, [esi]
mov bx, [edi + eax]
mov [esi], bx
とするべき
対象CPUがP2以降ならAGIストールは発生しなかったはずなんで
AGIストールは無視する?
番地をレジスタに生成直後にその番地へアクセスするとストールする<AGIストール
上記なら
mov ax, [esi]
mov bx, [edi + eax] <ここでAGIストール
となる
なのでまずこういうコードは書かないよ<真にチューニングするべきルーチンでは
0224デフォルトの名無しさん
NGNGプログラム/テーブル/入力文字列/出力バッファ
の全てが1次あるいは2次キャッシュに乗るからでないの?
テーブルは全体でなく、
入力文字列を処理するのに必要な分だけ乗ればいいことに注意。
0225213
NGNG(asm部分では考えうる限り最速のチューニングしてるよ
逆に言うとloop2をloop1に近い形にもっていくのが速度の秘訣だ)
あ〜ebpまで使えばなんとかなるかな?>loop2でも
Count := Length(S) div 4;
asm
pusha
mov ecx,Count
mov esi,P
lea edi,ConvTbl
mov ebp,ecx
@@Loop:
xor eax,eax
mov ax,[esi]
xor ebx,ebx
mov bx,[esi+2]
mov dx,[edi+eax]
mov cx,[edi+ebx]
mov [esi],dx
mov [esi+2],cx
add esi,4
dec ebp
jnz @@Loop
popa
end;
つーかdec ebpって美しくないなぁ(´Д`;)
4byte/10クロックでペナルティーは見受けられないから
loop1の2byte/8クロックよりは速いかな(ただし要大容量キャッシュ)
はっきり言ってアレだけど真面目な話
コンパイラの最適化に任せるべきだよ>212君
ペアリングとレジスタ衝突、様々なペナルティーとキャッシュ周りを
きっちり考えて最適化しないと逆に遅くなるからね>今のCPUは
コンパイラはその辺考えたコード結構吐いてくれるんで
現行のCPUに関する詳しい知識がないならアセンブラによる最適化はお奨めできないよ
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNG0228213
NGNG実質的なチューニング的には殆ど終わったも同然でしょ?>loop1
0229デフォルトの名無しさん
NGNGそれに、こういう場面じゃアセンブラで書いても 頑張っても2〜3倍程度しか
変わらない。
同じ時間を割くなら もっと生産的な部分に注力した方がいいと思うな
それでも、どうしてもなんとか高速にしたいなら PCMPEQBで8バイト
同時に比較してはXOR・ANDマスクして置換すれば・・・・うーん
でも英大文字を英小文字にするとか一方向置換にしないといけないし
1ループで4回の置換作業が必要だから 速くなるかどうか判らないな
0230213
NGNG漏れも思って取り合えず考えはしてたんだが余計遅くなった(´Д`;)>pcmpeqb
movq mm0,[esi]
movq mm1,mm0
movq mm2,mm0
pcmpeqb mm1,mm4
pcmpeqb mm2,mm5
pand mm1,mm5
pand mm2,mm4
por mm1,mm2
movq mm3,mm1
movq mm1,mm0
movq mm2,mm0
pcmpeqb mm1,mm4
pcmpeqb mm2,mm5
pandn mm1,mm0
pandn mm2,mm0
por mm1,mm2
por mm3,mm1
movq mm1,mm3
movq mm2,mm3
pcmpeqb mm1,mm6
pcmpeqb mm2,mm7
pand mm1,mm7
pand mm2,mm6
por mm1,mm2
movq mm0,mm1
movq mm1,mm3
movq mm2,mm3
pcmpeqb mm1,mm6
pcmpeqb mm2,mm7
pandn mm1,mm3
pandn mm2,mm3
por mm1,mm2
por mm0,mm1
movq [esi],mm0
add esi,8
dec ecx
色々突っ込みどころ満載な上に動作確認もしてないんで
これに関する言及は勘弁してくれ(取り合えず並べただけなんで
最大の敗因は文字列に4本も使ってしまいmmxレジスタが足りなくなったことだ……
0231pcode 本人
NGNGもう一度アンロールしても手間の割には早くならない。
「アセンブラで書けば速くなる」という迷信を砕くのが目的だった
から、アセンブラグルの方々、212 の無知を許してやってくれや。
0232デフォルトの名無しさん
NGNG最近では「P4はSSE2最適化すれば何でも速くなる」と思っている人が多い。
0233197
NGNGある意味真でもあるんぢゃない?
少なくとも浮動小数点演算に関しては、
x87命令つかうよりもSSE/SSE2のスカラ演算命令の方が速いと
インテルが主張していたような。
その証拠(?)に、インテルのコンパイラには、浮動小数点演算を
x87命令を使わずにSSE/SSE2のスカラ命令を使うってオプションがついてた。
ちなみに、Pentium!!!で試したところ、実行速度に差違は見られなかった。
誰かPentium4で試してみてよ。
0234デフォルトの名無しさん
NGNG>x87命令を使わずにSSE/SSE2のスカラ命令を使うってオプションがついてた。
そんなオプションないよ。
x87とSSE/SSE2を併用するというオプションはあるけど。
またx87,SSE/SSE2併用オプションでコンパイルしてもほとんど速くならないケースは多い。
あとP4の場合、SSE/SSE2スカラの加算命令は、2クロック毎に1つしか実行できないから、
x87の加算命令の半分のスループットしか出ない。
0235229
NGNG1回の交換が
1) @1 := @0 XOR "AAAAAAAA"
2) @2 := @0 XOR "TTTTTTTT"
3) @3 ;= pcmpeqb(@1,all0)
4) @4 ;= pcmpeqb(@2,all0)
5) @2 := @2 AND @3
6) @1 := @1 AND @4
7) @1 := @1 OR @2
8) @0 := @0 XOR @1
でこれが1ループで2回必要だから、やっぱり改善にはならないかもねえ
0236229
NGNGmovq mm0,[eax]
movq mm1,mm0
movq mm2,mm0
pXOR mm1, qword ptr tblA
pXOR mm2, qword ptr tblT
movq mm3,mm1
movq mm4,mm2
pCMpeqB mm3,qword ptr tbl0
pCMpeqB mm4,qword ptr tbl0
pAND mm2,mm3
pAND mm1,mm4
pOR mm1,mm2
pXOR mm0,mm1
{ 略 tblA/tblT のみ置換して繰り返し}
movq [eax],mm0
tblAは'A'が8バイト続くデータ tbl0は値0のqwordデータ
0237229
NGNGちょっと短くなった
procedure ATCGchg8( p:PChar;cnt:integer);
const tblA:array[0..7] of Char=('A','A','A','A','A','A','A','A');
const tblT:array[0..7] of Char=('T','T','T','T','T','T','T','T');
const tblG:array[0..7] of Char=('G','G','G','G','G','G','G','G');
const tblC:array[0..7] of Char=('C','C','C','C','C','C','C','C');
const tbl0:array[0..7] of byte=($00,$00,$00,$00,$00,$00,$00,$00);
label lp;
asm
movq mm0, qword ptr tbl0
movq mm6, qword ptr tblA
movq mm5, qword ptr tblT
movq mm4, qword ptr tblG
lp:
movq mm7,[eax]
movq mm1,mm7
movq mm2,mm7
pXOR mm1, mm6
pXOR mm2, mm5
movq mm3,mm1
pCMpeqB mm3,mm0
pAND mm3,mm2
pCMpeqB mm2,mm0
pAND mm1,mm2
pOR mm1,mm3
pXOR mm7,mm1
movq mm1,mm7
movq mm2,mm7
pXOR mm1,mm4
pXOR mm2, qword ptr tblC
movq mm3,mm1
pCMpeqB mm3,mm0
pAND mm3,mm2
pCMpeqB mm2,mm0
pAND mm1,mm2
pOR mm1,mm3
pXOR mm7,mm1
movq [eax],mm7
dec cnt
lea eax,[eax+8]
jnz lp;
end;
呼び出し方
var buf:string;
begin
buf:='AGCT AGCT AGCT AGCT AGCT AGCT';
SetLength(buf,length(buf)+(8-length(buf) mod 8) );
ATCGchg8(@buf[1],length(buf) div 8);
0238197
NGNG漏れの記憶違いか……?
確認のため、なんとか発掘した
v4.5の日本語マニュアルにはこう書いてあった。
>-Qkscalar デフォルトのx87 命令でなく、
>ストリーミングSIMD 拡張命令を
>使用して、すべての32 ビット浮
>動小数点演算を実行します。
日本語訳が間違えているのかもしれないが、
英語のドキュメントどっか逝ってしまって見つけ出せなかったので確認できず。
ちなみに、v5.0のドキュメントを見たら、-Qkscalarは載ってなかった。
0239212
NGNGmov ax, [edi + eax] → mov ax, [edi + eax * 2]
テーブルの計算方法は間違っていました。
type
TWordTable = array[Word] of Word;
procedure SetWordTable(var Table: TWordTable);
var
I: Integer;
H, L: Char;
begin
for I := 0 to $FFFF do
begin
H := Char(Hi(I));
L := Char(Lo(I));
case H of
'A': H := 'T';
'T': H := 'A';
'C': H := 'G';
'G': H := 'C';
end;
case L of
'A': L := 'T';
'T': L := 'A';
'C': L := 'G';
'G': L := 'C';
end;
Table[I] := MakeWord(Byte(L), Byte(H));
end;
end;
0240212
NGNG>純粋にキャッシュヒットしてるんじゃないか?>連続呼び出し
そのようでした。 同じ文字列(同じメモリブロック)がキャッシュに
入っていたみたいです。 UniqueStringで別のアドレスに確保すると、
速くなりませんでした。
AGIストールについても考えてみます。
ありがとうございます。
部分レジスタストールについて質問なのですが、
下の(1)と(2)で発生するのでしょうか?
mov ax, 0
inc ecx
mov ecx, eax // (1)直後でない
@@Loop:
mov ecx, eax // (2)ループ
mov ax, 0
jmp @@Loop
0241212
NGNGhttp://www.sonycsl.co.jp/person/fnami/pentopt.htm#PPRO
の例で
MOV AL, [mem1] 1 uv
MOV AH, [mem2] 1 uv
MOV [mem3], AX 1
2 + 5(ペナルティー) = 7 clock
MOVZX EAX, BYTE PTR [mem1] 3
MOVZX EBX, BYTE PTR [mem2] 3
SHL EBX, 8 1 u
OR EAX, EBX 1 uv
MOV [mem3], AX 1
8 clock
なので、遅くなりませんか?
これは次のように変更するべき
でブラウザを検索すると見つかります。
0242213
NGNGん〜(1),(2)ともしないと思うけど?
>241
Pentiumでは部分レジスタストールは発生しないよ?
もうチョッとよく読もうな
そこでの記載はPentiumProとPentium2(3)に関してだし
Ppro系CPUではMOVZXは1クロックだよ(P4では0.5クロック)
μopコード実行だからペアリングなんて概念自体が無いので>Ppro
逆にPentiumではmovzxは重い処理になるのでやるべきじゃない
・Pentium
MOV AL,[mem1];1uv
MOV AH,[mem2];1uv
MOV [mem3],AX;1
2クロック
MOVZX EAX,BYTE PTR [mem1];3
MOVZX EBX,BYTE PTR [mem2];3
SHL EBX,8;1u
OR EAX,EBX;1uv
MOV [mem3],AX;1
8クロック
・PentiumPro
MOV AL,[mem1];1
MOV AH,[mem2];1
MOV [mem3],AX;1+5
約8クロック
MOVZX EAX,BYTE PTR [mem1];1
MOVZX EBX,BYTE PTR [mem2];1
SHL EBX,8;1
OR EAX,EBX;1
MOV [mem3],AX;1
約5クロック
どっちのCPU向けに最適化するかによる
今時だとP2、P3が主流だと思うんでPpro向けの最適化のほうが好ましいと思う
Pentiumでの遅延を減らしたいなら
movzx eax,[mem]→xor eax,eax/mov al,[mem]
に展開するべき(さもなくばCPUによってル−チンを切り替えるか)
ちなみにP4だと何故か展開したほうが速くなるんだよね……>movzx
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG真の乱数(規則性なし)は量子コンピュータ持ってきても作れませんが、何か……?
量子力学やカオス理論の世界ですら、
時間をパラメータとする規則性のある数列でしかないことがわかってるし。
自然界では時間は任意に変更できないから、
ある意味真にランダムであるとも言えるだけで。
つーか、ランダム性と処理速度とどっちを重視するのか言ってくれないと、
紹介のしようもない。
0245Delあめ猫にゃ
NGNG乱数種の一つとして
function RDTSCm:integer;
asm
DW $310F //RDTSC
XOR EAX,EDX
IMUL EAX,65535
end;
0246デフォルトの名無しさん
NGNG最近のPCならチップセットに乗ってる
ハードで完全にランダムな値、作れるんじゃないの?
漏れのマシンにはついてないけど。
http://developer.intel.com/design/chipsets/rng/faq.htm
レジスタ叩いて読むだけ。
>>244さんはこれでも満足できないのかもしれないけど
ソフトでやるのでは、回数が少なければ、
サイコロ振って乱数表作ってメモリに入れとけば、
規則性のない乱数列が作れるんじゃない。
周期性は避けられないが。
0247デフォルトの名無しさん
NGNGシリアルポートにでもつなげ
0249デフォルトの名無しさん
NGNG24bit以上のデータを扱えるオーディオカードならな。
普通のサウンドカードだと、16bit、しかも低い値しか取れないから、
拡大すると荒い乱数しか取れない。
0250212
NGNG215さんも224さんもありがとうございます。
キャッシュが・・・、と言われていたのに・・・。
0251デフォルトの名無しさん
NGNG例えば32bitの乱数が欲しければ、サンプルの下位1bitだけを
使用するとして32個サンプリングすればよいんじゃないの?
(本当はもっと偏りがないようにうまくやったほうが良いが)
これなら16bitサウンドカードでも大丈夫だ。24bitのサンプル1個を
そのまま乱数に使うってのは頭が悪いとしか思えん。
0252デフォルトの名無しさん
NGNG速度が遅くなんない?
どのぐらいかかるか知らないけど
0253デフォルトの名無しさん
NGNGM系列とかの乱数種に プログラム起動時に1回使うだけならともかく
0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNG0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNG一番わかり易くコンパイラを解説した書籍を教えて?
ドラゴンブック?
岩波?
0261デフォルトの名無しさん
NGNG【コンパイラ・スクリプトエンジン】相談室
http://piza2.2ch.net/test/read.cgi/tech/981672957/
過去ログ
http://piza.2ch.net/tech/kako/987/987880355.html
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNG2進数だと見づらいから、人間は16進数で見ている。
0265デフォルトの名無しさん
NGNGvoid func(int a=0)は
add esp, -8
push dword 0
push dword 0
call func3_Fii
add esp, 16
void func2(int a=0, int b=0)は
add esp, -4
push dword 0
push dword 0
push dword 0
call func3_Fii
add esp, 16
と引数に使うスタックを4つにする理由はなんなんですか?
もっとたくさんにしてもコンパイラは8、12・・・て固定しようとするんですけど・・・。
0266265
NGNG0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGスタックを4つというのは、4バイトを4個ってことだよね?
それは16バイトアライメントです。
0269265
NGNG初めて読むMASMをみてLinuxで勉強してると細かい違いがいっぱい出てきて。
symdebみたいなのがあれば助かるのですが。。。
上のfnamiさんのページでHOW TO OPTIMIZE FOR THE PENTIUM PROCESSOR見てきたんですが、こりゃ道は長いぞっと(w;
ttp://www.csl.sony.co.jp/person/fnami/pentopt.htm
0270デフォルトの名無しさん
NGNG「HOW TO OPTIMIZE FOR THE PENTIUM PROCESSOR」はよくまとまっているけど
内容が古い。読み終わったらすぐ、Intel のプロセッサマニュアルを読みなされ
0271255
NGNGshift演算したほうが早いとか、そういうのはどのような資料からでしょうか?
>>258さんが言われるようにRDTSCで測定しているだけではありませんよね?
0272デフォルトの名無しさん
NGNGIdiom
0273デフォルトの名無しさん
NGNGftp://download.intel.co.jp/jp/developer/jpdoc/iaopt_j.pdf
これのページ 1-5 とページ D-1
0275デフォルトの名無しさん
NGNGマイコン向けのプロセサのデータバスもやはり64BIT?
0276デフォルトの名無しさん
NGNGThanks
0277デフォルトの名無しさん
NGNGこれは以下の認識でよいのですかね。
・ある関数fに引数を渡す方法のうちの一つである。
・すべての引数を全ての関数共通のスタックにPUSHし、関数fにはスタックのアドレスを渡す。 もしくは、すべての引数を関数f専用のスタックにPUSHし、関数fを呼び出す。
・呼び出された関数fは、自分の持ち得る引数の個数と
同じ回数だけPOPする。ただし、f(a,b) と定義されている関数の場合は、
b,a の順番でPOPする事になる。2回目以降のPOPで取り出される値は未定義である。
0278デフォルトの名無しさん
NGNG呼び出し時、引数を共通のスタックにPUSHし、その後帰り番地をPUSHした後、関数fにgoto=JMPする
呼び出された関数は、SPをBPに複製し、さらにSPを操作してローカル変数用の変数を確保する
引数、変数の参照は BPからの相対参照とする
関数終了時は、SP=BPと復元し 帰り番地を得た後、引数分のSPを 関数側で操作するか
呼び出し側で操作するかする。
というのが今の普通のやり方
0279デフォルトの名無しさん
NGNG呼び出し側で破棄するのがcスタイル
0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNG∧ ∧ ./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(;;゚Дメ)< それも判らんで質問してたんかい
/ | \_____________
〜(___ノ
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
NGNG0285デフォルトの名無しさん
NGNG0286デフォルトの名無しさん
NGNGX68000
0287つーかレス番号が意味深(笑
NGNGそれをいうならHUMAN68KとかOS-9とか、、
0288285
NGNG0289285
NGNG0290デフォルトの名無しさん
NGNG勉強はしやすいと思うが、使いやすいかどうか・・・・
MSXでも良いんじゃない?俺はどっちも好きよ
0291デフォルトの名無しさん
NGNGあとボーランドのBCC(フリー)でも内部記述できる。
要所要所だけアセンブルするのがよいのです。
あとNASMって結構よいです。作ったオブジェクトファイルを
コンパイラからリンクするのですがこれもdelphiで使えます
だからやっぱりインテル系だね。
0292デフォルトの名無しさん
NGNGアセンブラは、ハードウェアに対する基本的な理解が前提となるから、コンピュータの論理設計
と合わせて勉強した方がいいと思う。「コンピュータの構成と設計」(パターソン&ヘネシー)を読
みつつ、MIPS エミュレータの SPIM で勉強とか。
0293デフォルトの名無しさん
NGNGハード(and/or OS)は古くて簡単な方がいいと言う事で
X68000などが挙げられたのだと思いますが、
環境が整うなら(アセンブラが調達出来るなら)
MSXなら尚良し、なのではないでしょうか。
VRAM,ROM,I/Oなどのアドレスが固定で
メモリマップの資料などが揃っていると
それこそマシンの隅々まで理解した気分になれます。
(今のマシンじゃ、○○ポートのアドレスは...なんてやり方出来ないと思う。)
0294デフォルトの名無しさん
NGNG早速コンピュータの構成 上 を買ってよんでいるのですが、
レジスタ等わかりやすく書いてありますね
MIPSを使ってあるので、Windowsユーザーでも
便利です。
ところで、私はVisualc++をもっているのですが、
これはどうでしょうか?
0295デフォルトの名無しさん
NGNGファームウエアを作成するとなったら、アゼンブラ以外に必要な
知識とかありますか?
0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG0D 0A みっけ。
でも 00 とか FF とか多いな。
0298デフォルトの名無しさん
NGNGハードウェア。密接に絡むからね。
取り敢えず、デジタル回路の回路図は最低限読めないと。アナログ
も知っているとベター。
0299あせんちゃん
NGNGなんかのバグとかで、Cが吐いたコードをアセンブラで読んで
原因がわかっちゃうときなんかは、あ〜無駄な経験じゃなかったな・・・
な〜んて、思うこともあり。
アセンブラレベルでは8086からたいして変化が無いので、
全然問題なく読むことできたし。
0300デフォルトの名無しさん
NGNG1ー、2ー、
300ダァァァァァァァ!
0301デフォルトの名無しさん
NGNG検索しても全然出てこない・・・。
もしくは、薦めの勉強方法ってありますか?
御教授お願いします。
0302デフォルトの名無しさん
NGNGttp://www.6502.org
ってそのものずばりのサイトがあったよ。
オペコードなどの説明もPDFファイルで見られる。
0303tiger book
NGNG一応電気工学科なのですが、オラクルばっかりやっていて、すっかりわすれて
います。
デジタル回路を学ぶための良書教えて!
0304343
NGNG0306_
NGNGちょっと質問なんですが、昔はメモリ全部見れたんですよね?
でも今だと個別のプロセスごとにメモリ空間があってみれない
っていうのはなんとなく知ってるのですが、プロセスごとなら
最初の番地から最後までみれるんですか?
Cで
for(int i=0; i<100; i++) {
char* c = (char*)i;
printf("%d", *c);
}
っていうのはLinuxに怒られました。
全部見てみたいな・・・
0307デフォルトの名無しさん
NGNGあとCの言語仕様上0番地のアドレスはNULLポインタだから使えない。
0308AAAAAAAAAAAAAA
NGNG実際どうよ?
0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG・そのCPUに対してのアーキテクチャの理解
・周辺デバイスに対しての入出力制御の理解
・開発環境を構築するためのICEなどの機材の使用方法
この辺は必須のはずです。
0311デフォルトの名無しさん
NGNG奇数アドレスから「バイト単位」以外でのアクセス、です。
奇数アドレスでもバイト単位のアクセスならばアドレスエラーでは落ちないはずですよ。
0312デフォルトの名無しさん
NGNG_asmで駄目か?
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNGI/0マップは増えたの?
0315デフォルトの名無しさん
NGNGcmp eax, 0
よりも
test eax, eax
の方がコードサイズが小さい
という記述があったんですが、どうして小さいんでしょう?
どちらも一行に見えるんですが。
0316デフォルトの名無しさん
NGNGcmp eax,0 →83 f8 00
test eax,eax→85 c0
「cmp eax,0」は3byte、「test eax,eax」は2byte
即値使うとコード(バイナリ)サイズがでかくなるので
この場合test eax,eaxのが小さい
0317315
NGNGありがとうございます。わかりました。
とだけ書くのはゴミレスなので私でもできるのを一つフォロー
>>6
http://www.microsoft.com/ddk/
というのがあります。私は今これで勉強中。
0318デフォルトの名無しさん
NGNG質問の意味がよく分からないんだけど。
「インデックスレジスタ」という名前のレジスタがあるの? という意味なら「ない」
アイゼロマップって一体何? マップは増えたり減ったりしないと思うけど。
あと、「増えた」って比較対象は一体何?
I/O空間のサイズという意味なら、8086のころからずっと64KBのはず。
0319元本職
NGNGアゲアシとりスマソ。
アイゼロってなによ?
アイオーでしょ? <<Input/Outputだし
>8086のころからずっと64KBのはず。
リアルモードではそうだけど、プロテクトモードは?
>3.3.3. 拡張された物理アドレス指定
>IA-32 アーキテクチャは、Pentium Pro プロセッサ以来、
>最大64G バイト(236 バイト) の物理メモリのアドレス指定を
>サポートしている。プログラムまたはタスクは、
>このアドレス空間内の位置を直接アドレス指定することはできない。
>代わりに、プログラムまたはタスクは、最大4Gバイトのリニア・
>アドレス空間を個別にアドレス指定する。このリニア・アドレス空間が、
>プロセッサの仮想メモリ管理機構によって、
>より大きな64G バイトの物理アドレス空間にマッピングされる。
>プログラムは、セグメント・レジスタ内のセグメント・セレクタを
>変更することによって、この64G バイトの物理アドレス空間内で
>リニア・アドレス空間を切り替えることができる。
>拡張された物理アドレス指定を使用するには、
>プロセッサがプロテクト・モードで動作し、オペレーティング・
>システムが仮想メモリ管理システムを提供する必要がある
0320318
NGNGいや、>>314の揚げ足取りのつもりだったんだけどね。
>>314をよ〜く見てみて。
で、拡張されてるのはメモリ空間の方で、I/O空間については現在でも、
プロテクトモードでも64KBだよん。
メモリマップドI/Oのデバイスではもちろんメモリ空間にI/Oポートが配置される
けれど、>>314では「I/Oマップ」とあったので、I/O空間
(IN, OUT命令でアクセスする方)についての話をしたわけです。
0321デフォルトの名無しさん
NGNGああ、アイゼロマップだw
0322_
NGNG0323デフォルトの名無しさん
NGNG0324_
NGNGありゃ。nasmで
SECTION .text
GLOBAL myfunc:function
myfunc:
mov DWORD[.integer], 8
ret
.integer DW 0
でcall myfuncしたら以降実行しなくなるんだけどなんでかな・・・
0325デフォルトの名無しさん
NGNGWin9x系とかの甘いOSならOKだろうけど、
NT計だと確実にAccessViolationで落とされそう。
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNGM$のリンカなら書くセクションの属性を変えるオプションがあったが・・。
NASMっつうことはALINK使ってるのかな。ALINKじゃ無理なんで、バイナリエディタで書きかえればいいYO
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNGデバッガのためだけにでも勉強してみようと思う今日この頃
0333デフォルトの名無しさん
NGNG試しにやってみたいだけというのなら全く構わないんだけど。
もし本当に書き換える必要のあるデータなら、そもそも.textに置くこと自体が
間違ってるし、命令の自己書き換えなんてやったらキャッシュのせいで
うまく動かないような気がするんだけど。
0334デフォルトの名無しさん
NGNGこいつが進化を妨げている。
0335デフォルトの名無しさん
NGNGIA-64のネイティブをコーディングしてみたら?
進化を感じるかも...
0336デフォルトの名無しさん
NGNG開発環境は手に入るかもしれないけど、
実行環境は個人が入手できるものじゃないだろ
0337_
NGNGSECTION .bss
integer resb 4
SECTION .text
mov [integer], DWORD 1
push DWORD[integer] ; (1)
call printarg ; 引数を表示するサブルーチン
add esp, 4
でintegerの内容 00000001が表示されるとしたら
(1)を
push DWORD[0] ; (1)
に変えたらintegerにアクセスできるかなーと思ったんですが
当然できないですよね・・・
実行時integerがどこに配置されるかはわからないのでしょうか?
どうしたら分かりますか?
カーネルの勉強でもしないと駄目なのかな。
0338_
NGNGobjdump -xでシンボルテーブルを見て080A04D8だったので
push DWORD[080A04D8H]にしたら行けました。
でも.bssの最初が080A04C0なのに間が空いてるのは何故ですか?
この区間は固定?
0339_
NGNGld にマップファイル吐かせるとわかりました。
先頭はcrtbegin.oが使ってるんですね。
その次に割り当てられていました。
そのまた次のlibc.aのbssまでの区間がちょうどコーディングで使った分だったのに感動。
当たり前だけど。
アセンブラって面白い・・・
0340KITE
NGNG0341ななし
NGNGとりあえずarrowasmを手にいれて以下のようなコード
CR EQU 0DH
LF EQU 0AH
STACK SEGMENT STACK
DW 32 DUP(0)
STACK ENDS
DATA SEGMENT
MSG DB CR,LF
DB 'Hello MS-DOS world'
DB CR,LF,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MSG
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
でコンパイルしてみました。
するとオブジェクトファイル***.objは
できたのですがこれをlink ***.objとすると、
LINK : error : Segment reference infixup record
test3.obj : fatal error LINK1123: failure during conversion to C0FF:
file invalid or corrupt
と出てしまい実行ファイルが作れません。
いろんな本に載ってるコードを何度も何ども
打ち込んでみているのですが、
どれもうまくいきません。
なにとぞお助けください・・・・
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNG0344デフォルトの名無しさん
NGNGアセンブリ言語というのは統一されたものですよね!
同じ処理をさせようとしても、CPUによって組みかたが違う場合がある
ってだけですよね!
「○○をアセンブラで組む」
「××アセンブラ入門」
この本に書いてあるアセンブリ言語はこのCPU専用なのか!!?と途惑ってます!
なわけなかろうと思いますが自信はありません。
0345341
NGNGそのあたりがよくわからないのですよ・
初めて読むマシン語、はじめて読むアセンブラ、MASM初級プログラミング
を買い込んできていろいろ読んでいるのですが・・・
>343
MicroSoftのlink ver5.12.8078です。
link.exeなので16bit版のはずなのですが・・・
0346デフォルトの名無しさん
NGNGCPUによって違う。
0347デフォルトの名無しさん
NGNGあるCPU(仮にA)のAXとBのCPUのAXは働きが違うということでゴザイマすか!!?
0348デフォルトの名無しさん
NGNGCPUによってレジスタの数も名前も違う。
CPUの設計そのものが違う。
0349デフォルトの名無しさん
NGNGつまりはCPUによってAXの名称が、例えばAXVになったり
全く違う言葉になってしまうと、そういうことですか!!?
0350デフォルトの名無しさん
NGNGCPUによって(とういうかアセンブラによって)
ニーモニックも違う。jmpだったりbrだったり。
0351デフォルトの名無しさん
NGNG0352デフォルトの名無しさん
NGNG本当のホントに「そのCPUについて、モトから理解しなきゃいけない」
ってことなんですな。
ははー、なるほど。よくわかりました!!!
0353デフォルトの名無しさん
NGNGそゆことです。
0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNG汎用レジスタの個々に名前がついてて、レジスタによって使える命令に
制限がある(直行性が悪い)のは、最近ではx86系くらいでは?
元の設計が古いから仕方ないが。
0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNG勘違いされてるかもしれないので . . .
名前が違うのは重要じゃないです。
仕様そのものが違います。
C++ と java と Pascal と Lisp くらい違います。
CPU が違えばアセンブラは全く別の言語といってもいいと思います。
アセンブラがどんなふうになるかは CPUの設計しだいです。
0361デフォルトの名無しさん
NGNGDATA2 DW 00FFH
RESULT DW 0
START:
MOV AX,DATA1
ADD AX,DATA2
MOV RESULT,AX
AXにDATA1をいれてそれにDATA2を足して結果をRESULTに入れる
というコードを書いたのですが
MOV AX,DATA1
コレがきちんと動きません。
MOV AX,0005H
とDATA1の部分を即値で書くと動くのですが・・
同様に
ADD AX,DATA2
MOV RESULT,AX
もだめです。どうやら、
変数を使用して値を移動させようとするとだめみたいです。
なんででしょう?
0362デフォルトの名無しさん
NGNGNASMだと
MOV AX,[DATA1]
にしないとだめかも。
0363デフォルトの名無しさん
NGNGmov eax,[eax]
という命令をよく見かけるんですけど、これはどういう意味ですか?
0364デフォルトの名無しさん
NGNGつまり axで示すアドレスのメモリの値をaxに
0365デフォルトの名無しさん
NGNG362の他にはセグメントが違うとか。。。
symdebでステップ実行してみればよろし。
0366デフォルトの名無しさん
NGNGその link やっぱり 32bit 版じゃねーのか。
32bit でもファイル名は link.exe だ。
0367デフォルトの名無しさん
NGNGカスル?キャッスル?
0368女
NGNG0369でふぉ
NGNG0370デフォルトの名無しさん
NGNG『風邪ひいてるんだけどな』
0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNG32bitに比べてサイズが小さいからキャッシュに入りやすい、
ってことくらいでしょうか?
0373デフォルトの名無しさん
NGNG32bit環境下で16bit命令はオペコードにプレフィックスが憑くから、
命令サイズが1バイト増えてデコードが送れたりキャッシュミスしやすくなる
0374372
NGNGサンクス。
すると、データ持っているときは16(or 8)bitで
実際に演算するさいは32bitでするのが良いのですね。
0375デフォルトの名無しさん
NGNG16bit命令と32bit命令はオペコードが同一のものなので、
プレフィクスの有無で判断してる。
それから、当然即値やアドレスをとる命令は、
16bitのものの方が短くなるよ、。
0376デフォルトの名無しさん
NGNG8 x 16のpacked byteとして使えるの?
0377372
NGNG>>372
>すると、データ持っているときは16(or 8)bitで
>実際に演算するさいは32bitでするのが良いのですね。
と
>それから、当然即値やアドレスをとる命令は、
>16bitのものの方が短くなるよ、。
の場合には16bitの方が良いってことですねー。
ありがとうです。
0378デフォルトの名無しさん
NGNGよくCの教科書本で書いてある関数の再帰利用ってのは
アセンブリコード的にはスタックをがばがば使う駄目なコードなのかな?
呼び出す度にスタックが増えていくような気がするんですが違うのかな?
0379デフォルトの名無しさん
NGNGそう。
組み込みとかだと、スタックが数Kバイトしかないというのはざらにある。、
下手に教科書に載ってるようなアルゴリズムを実装すると、即死する場合が
あるので注意が必要・・・
0380デフォルトの名無しさん
NGNG末尾再帰といって関数の末尾で再帰してる場合には、
(その関数のスタックはもうつかわないので)
スタックを再利用することができます。
0381デフォルトの名無しさん
NGNGそしてよく教科書に書いてあることが、現実社会でよく使われるとは限らない。
0382381
NGNG0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG関数の末尾で再帰してる場合にスタックを喰うか否かは言語(実装)依存だろ。
これを定義してる言語はSchemeしか知らないけど。
0385デフォルトの名無しさん
NGNGそうだけど、最近のコンパイラは偉いからきっとやってくれるでしょう。
0386デフォルトの名無しさん
NGNG教科書に書いてあることもな。
0387デフォルトの名無しさん
NGNG期待しすぎ。
0388デフォルトの名無しさん
NGNG関数型言語とgcc以外はやってくれましぇーん。
意外とおバカな処理系ばっかり。
0389378
NGNG罵倒なしにこんなに暖かくレスしてもらったの初めてで嬉しかったり(藁
これだけだとごみレスなのでお勉強したあせんぶ?のページのポインタ。
「@鈴希」
http://tt.sakura.ne.jp/~suzu/
読みやすくて最初に読むのにぐっどかと。
0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNGできますか!!!!!!!!
0392デフォルトの名無しさん
NGNGできますか!!!!
0393デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNGいろいろ見てるとmovbとかmovlとかあるんですが
b,lって何でしょうか?
0395デフォルトの名無しさん
NGNG0396_
NGNGnasmを少ししか使ってないから良く知らないけど
たぶん転送する値の大きさを指定してるのでは?
movb 1バイト movl 4バイト ?
私も質問。LinuxとかWin2Kでスタックのサイズって限界あるの?
0397デフォルトの名無しさん
NGNG0398_
NGNGまた質問で申し訳ないんだけどヒープってどこにあるのかな?
OSが独自にアドレスもって管理してるの?
Cは独自に管理してるとか書いてあったけど
それと同じように自分のdataセクションとかに自分で作れないのかな。
0399デフォルトの名無しさん
NGNG>それと同じように自分のdataセクションとかに自分で作れないのかな。
何がやりたいのかいまいち分からん
それをプログラム
0400デフォルトの名無しさん
NGNG0401_
NGNGそのプロセス独自のヒープつくれないかなって思いました。
でも、よく考えたらそれじゃサイズが固定されてしまうのか。。。
0402デフォルトの名無しさん
NGNG0403_
NGNGメモリ管理詳しく書いてそうなので今度買って見ます。
アセンブラ知ると色々仕組みが分かるのがいいですね。
0404デフォルトの名無しさん
NGNGそもそもセクションなんてない1パスなアセンブラもあるけど・・
0405デフォルトの名無しさん
NGNGソースがあったら、malloc 書き換えてstaticにしてしまうんだけどね
0406デフォルトの名無しさん
NGNG>>398
スタックサイズに限界があるからヒープがある、と理解したように
読めるんだけど…。ヒープサイズにももちろん限界はあるよ。
そもそも使用目的が違うし。
Linuxの場合、メモリ空間の頭の方からtext、続いてdataセクションが
あってそれに続くbss(0で初期化されてるdata)が後ろのアドレスに拡張
できるようになっていて、それがヒープとなる。この拡張はbrk()や
sbrk()というシステムコールで行われるので、この辺のmanも見てみると
いいよ。
スタックは、メモリ空間の最後の方のアドレスから逆方向に伸びていく。
ヒープはユーザーが明示的に増やしてやらないと増えないけど、スタック
は使用されるにしたがってOSが自動的にメモリを確保して割り当ててくれる。
ヒープとスタックはメモリの両端から逆方向に向かって伸びていくので、
論理的な限界はアドレス空間の真中でお互いがぶつかるまでかな。
(shared libraryのことを考えない場合)
0407デフォルトの名無しさん
NGNG自分で定義できるものなのか。凄い。
メモリ空間のパーティションみたいなものなのかな。
>>405
いいなー。なんかメモリを自由自在に操ってますね。
>>406
なるー。やっとヒープがどこにあるか分かりました。謝々!!
|----------------------------------|
| text |
|----------------------------------|
| data |
|----------------------------------|
| bss |
|----------------------------------|
| ヒープ |
| ↓(brk, sbrk) |
| |
| |
| |
| |
| esp |
| ↑ |
| スタック |
|----------------------------------|
こんな感じですか?
そういえばmalloc()で割り当てられたメモリに0が入ってるのって
bssセクションに割り当てられるからなのかぁ。凄いな。
0408406
NGNG実際には、ヒープとスタックの間の空間にshared libraryのtextとdataが
配置されているけど。
Linuxなら、cat /proc/<プロセスID>/maps とやるとそのプロセスの
アドレス空間の配置を見ることができるよ。
あと、余計なお世話かも知れないけど、確かに新たに拡張されたヒープの
中は必ず0でクリアされてるけど、だからと言ってmalloc()で確保する領域
が0でクリアされてるとは限らないので注意。malloc()はfree()で解放した
領域を再利用するけど、その際にわざわざクリアしたりしないので。
(それをやってくれるのはcalloc())
0409_
NGNGおお、こんな風に見れるとは。ほんとLinux(UNIX)はプログラマーのためのOSですね。
ちょっと考えたんですけど、この仕組みならなんでメモリリークがあるんですか?
プロセスが消えた時全部消えそうな気がするのですが・・・
#今度のItaliumではehp(ヒープレジスタ)も欲しいかも。
0410デフォルトの名無しさん
NGNGこんなナンセンスなCPUいらない。
ItaniumってIA-64だっけ?
だったら汎用レジスタが128本もあるというバケモノという話だけど
0411デフォルトの名無しさん
NGNGLinuxもWindows NTもリークが問題になるのは終わらないプロセスの問題。
0412デフォルトの名無しさん
NGNGそれで、アスキーのページから「はじめて読む8086」が消えているのですが、
ひょっとして絶版なのかな?
前に見た時、>>21からのリンク先には有った気がしたのですが。
どんなもんでしょうかね? さげ
0413デフォルトの名無しさん
NGNG1週間ほど前に本屋に行った時は売ってたと思う。
絶版かどうかは知らんが、あるところにはあると思う
0414デフォルトの名無しさん
NGNG例えば関数の初期化処理の
push %ebp
mov %esp, %ebp
なら3byte、みたいな。
0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNG0417_
NGNG0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNG800MHz程度じゃ、大抵の処理はがんばって最適化しても
Petium4 2GHzの方が速いんじゃない?
0420デフォルトの名無しさん
NGNG0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNG速いというやつだね。20MHzの286を出してたのはIDTだったか、AMD
だったか・・・
0423デフォルトの名無しさん
NGNGすごく(・∀・)イイ!!。
0424デフォルトの名無しさん
NGNG0425_
NGNG実行できるとか、ちらっと雑誌で見たんですけどアレってプログラミング
が複雑にならないのかな?並列でしか意味ない?
0426デフォルトの名無しさん
NGNGその辺はコンパイラが面倒を見るという話らしい。
命令の同時実行は単純には今と同じ。
それを重視して設計をしたということ。
IA-64では幾つかの処理をひとまとめにした
バンドルという単位でプロセッサへのデータ入力が行われ、
1つのバンドルに含まれる処理は同時に実行される。
バンドルを構成するのはコンパイラの仕事になる。
0428デフォルトの名無しさん
NGNGアセンブリ自体はそう難しくはないと思うが、バンドルを手で構成するのは
地獄だと思われ。
0429四歳
NGNG0430_
NGNG書籍が少なくて戸惑うと思いますがアスキーの
「はじめて読む8086」「はじめて読むMASM」「はじめて読む486」を読みつつ
インテルにあるPentiumのマニュアル(pdf)を手元において
「gcc -S」が吐くコードを「Item2gas」でgasからnasmの形式に変えて読んだり
色んな所に落ちてるnasmのサンプル打ち込んでみたりしたら
思ったよりすぐ分かるようになりました。
Cでポインタとか分かってる人はすんなり頭に入ってくると思います。
お試しあれ。
0431デフォルトの名無しさん
NGNGすみませんが、ポインタを下さい。
0432デフォルトの名無しさん
NGNGwww.niksula.cs.hut.fi/~mtiihone/intel2gas/
0433デフォルトの名無しさん
NGNGitemって何だろ? って悩んでたんですよ。
どうももありがとう >>432 >>430
0434_
NGNGネタになってるし。
intel2gasです。申し訳ない。
付け足すと国内のページではアセンブラの情報がすくない気がするので
英語のページで検索かけたほうがいいと思います。
http://www.linuxdoc.org/HOWTO/Assembly-HOWTO/index.html
http://webster.cs.ucr.edu/Page_asm/ArtOfAsm.html
がお勧め。あとnasmのマニュアルかな。和訳ページもあったっけ。
http://guriponn.tripod.co.jp/others/japanise/nasmdoc0.html
0435名無しさん@お腹いっぱい
NGNG0436デフォルトの名無しさん
NGNG日本語のページ教えれ
0437デフォルトの名無しさん
NGNG「gcc -S」でないとダメ?VC++なんだけど。
0438_
NGNG0439デフォルトの名無しさん
NGNGSEなんでついてないのかな・・・
探したけど見当たらない・・・・
いい逆アセンブラってありません?できたらフリーで。
0440439
NGNGアカデミックバージョンでした。鬱邪内ケド氏脳・・・
0441デフォルトの名無しさん
NGNG/FAs
0442デフォルトの名無しさん
NGNGnasm
0443デフォルトの名無しさん
NGNG窓ならMASM
0444デフォルトの名無しさん
NGNG窓でもnasm
0445デフォルトの名無しさん
NGNG仮想メモリで32ビットアドレス表現なんだけど
どうやってプロセッサは一般保護例外って判断できるの?
セグメントがページングに変わるから判断できないと思うんだけど・・・
0446デフォルトの名無しさん
NGNGページングするから判断できる。
物理メモリに存在しないページを要求されたらプロセッサは
一般保護例外を出す。
それをOSが拾ってページを割り当てる。
割り当てるページが無かったらSegmentation Fault。
0447はじめて読む6809
NGNGその3冊手に入れました。頑張って勉強してみます。
遅レス失礼しました。
ところで、「はじめて読むMASM」、
兄弟本、「はじめて読むマシン語」、「はじめて読むアセンブラ」も絶版?
はじめて読むシリーズ危うし。
0448デフォルトの名無しさん
NGNG一般保護例外(0Dh)でなくページフォルト(0Eh)だよ。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNGページフォルトであるページを物理メモリに割り当てますよね?
そしたらその割り当てられたアドレスはセレクタ+オフセットで
表されてるのですか?
それともやっぱり32ビットの仮想アドレス?
うーん。
要は仮想アドレスを使っていてどうやって
タスク間アクセス保護が出来るのかって事が知りたいのです。
0452デフォルトの名無しさん
NGNG0453デフォルトの名無しさん
NGNG逆だよーん。ほんとはもっと複雑だけど、すごーく簡単に書くと
selector -> GDT or LDT -> base address
base address + offset -> page table -> physical address
で、タスクごとにpage tableをごにょごにょする。
詳しく知りたきゃ
http://developer.intel.com/design/pentium4/manuals/245472.htm
を読むべし。
0454デフォルトの名無しさん
NGNGう〜ん。
う〜ん。
がんばって読んでみます。ありがとうございました。
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNGのモービィディックというゲームが面白かったです。
あの本の最後の笑い話の意味がわかったとき
道を踏み外したなと確信しました。
0457デフォルトの名無しさん
NGNGhttp://www.vector.co.jp/vpack/filearea/win/prog/asm/index.html
ここから探した結果、
MASM 準拠で8086〜PentiumPro,MMX,3DNow! 命令に対応したマクロアセンブラ
http://www.vector.co.jp/soft/win95/prog/se183316.html
これが一番よさそうなのですが、どうですか。
0458デフォルトの名無しさん
NGNGダウンしましたが、
「通常はVC++といっしょに使ってください」
と書いてあったので、やっぱりだめみたいです。
0459デフォルトの名無しさん
NGNG0460___
NGNG0461デフォルトの名無しさん
NGNGは?マジで絶版?うそだろ
0462デフォルトの名無しさん
NGNGそれは、NWSA というアセンブラだけど、有償版には、
統合開発環境(デバッガ、逆アセンブラ付き)があって、
リンカも付いてくるので、Visual C++ がなくても単体
で開発できるよ。
アセンブラの統合開発環境で、ライセンス的に合法なのは、
これくらいかもしれないから、それなりに価値はあるんじゃ?
0463デフォルトの名無しさん
NGNGLD A,3
SUB B
RET
0464デフォルトの名無しさん
NGNGなんか検索しても変なページばっかり出てきます。
ようするに時代は終わったということでしょうか。
0465デフォルトの名無しさん
NGNGNWSAとPasm
ニモニック一覧くらいならついてるんじゃない?
0466デフォルトの名無しさん
NGNG問題になるのが速度だけならgccのインラインアセンブラを使えば
フリーでドキュメントがそこそこそろってると思うけど…
それともファイルサイズとかを限界まで攻めるために
純粋なアセンブラが必要なのだろうか。
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNGCを勉強する前にアセンブラをやるのが常識みたいだし、アセンブラができるとドライバーが書けるみたいだし、ドライバーが書けると女にもてるみたいだし。
0469だだ
NGNGそりゃないだろ。
0470デフォルトの名無しさん
NGNG女にモテたいがためにアレか?その、何だ、斡旋ブラやってるのか?
「こんなのどうでしょうお嬢さん」とかアレか?言うんか?
「お似合いですよ」がアレか?殺し文句か?
0471デフォルトの名無しさん
NGNGねただろ。ボケェ
0472デフォルトの名無しさん
NGNGここを見なさいよ。
0473デフォルトの名無しさん
NGNGインラインでアセンブラ書けるから勉強するには丁度いい
いきなりアセンブラだけでは試すのさえ厳しいよ
0474デフォルトの名無しさん
NGNG具体的にどのファイルが必要なのか解かりませんでした。
教えてください。よろしくお願いします。
0475デフォルトの名無しさん
NGNGつーか、あのWebページから探し出すこともできないんじゃ、中身を
読むこともできないような気がする・・・
Developer - Software - Pentium4 - Reference Manual で辿ってみな。
あとはどれか必要かわからないなら全部落としておけ。
0476デフォルトの名無しさん
NGNGどういう処理がボトルネックになってて、
どういう風に解消したんですか?
アセンブラやるには、CPUのパイプ処理とかも考慮するのですか?
ハザードに関しても,考慮するのですか?
そうだとすると人間の手でやるとバグが出る気が・・・
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNG(1)高速化
(2)ドライバ書く
以外の用途ってないんですよね?で、ドライバってCでも書けるんでしょ?
最適化はコンパイラがやってくれるよね?
0480デフォルトの名無しさん
NGNG組み込みだとコードサイズに制限があるからそのために使うことがある。
最近はどうだか知らんけど。
0481デフォルトの名無しさん
NGNGコンパイラより1.5倍程度速い。
ループしている部分には効果的
案外アセンブラで書くほうが綿密に計画するから
バグも少なかったりする。
0482デフォルトの名無しさん
NGNGVMの方が速いよね?
0483デフォルトの名無しさん
NGNGVMってドリキャスのVM?
0484デフォルトの名無しさん
NGNGVC++は漏れが書いた浮動小数点演算コードより2倍速かった
一生懸命考えて書いたんだが・・・欝だ
0485デフォルトの名無しさん
NGNGx86はダメそうだけど、ARMのCコンパイラは凄かった。
アセンブラで書いたのと比べて遜色無いコードを吐く。
0486デフォルトの名無しさん
NGNGどういう処理がボトルネックになってて、
どういう風に解消したんですか?
アセンブラやるには、CPUのパイプ処理とかも考慮するのですか?
ハザードに関しても,考慮するのですか?
そうだとすると人間の手でやるとバグが出る気が・・・
俺も知りたい
0487デフォルトの名無しさん
NGNGアセンブラによる高速化ってSIMD命令を使うのとかが多いのでは?
これってコンパイラでやるの難しいよね?
0488デフォルトの名無しさん
NGNG書いても速くなる気がしないよ・・・。割り切って、ブートとMMUにしか
使ってない。
0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNGSH仲間発見。おれはSH3と格闘中。ゲーム機とはかんけいないけど。
0492デフォルトの名無しさん
NGNGに対してまともな回答できるやつが一人もいない
という事は、ここにはアセンブラ使いがいない
0493デフォルトの名無しさん
NGNGアセンブラだとレジスタ同士の計算一発で終わる(1行)
のを、駄コンパイラはスタックに入れたり出したりで5行も10行も
吐く。
0494デフォルトの名無しさん
NGNG同時実行可能な命令のペアだと色が変わるとか
各命令の実行クロック数が命令の右肩に出るとかそういう機能が付いた奴。
0495デフォルトの名無しさん
NGNG>486
当方ゲーム(主にエロゲ)プログラマだけど
インラインアセンブラでMMX命令を使って画面ワイプとか高速化してるよ
クロスフェードとかやる分にはCコンパイラの吐くx86コードの数倍以上速い
パイプとストールは一応考慮してる、最適化は局所的だから
きちんとCPUに関する知識を身に付けてりゃそうそうバグらない
0496デフォルトの名無しさん
NGNG糞なメモリ性能でよく作った。
0497デフォルトの名無しさん
NGNG0498495
NGNGつーかMMXやSSEなんかは3Dや画像操作系のアプリなら使ってておかしくないし
ゲームも3Dものはほぼ常識、エロゲだってMMX程度なら常識になりつつある
で、こういったSIMD系命令を使う場合はやっぱアセンブラの知識がないと
intelCはSIMDを含んだ最適化もしてくれるけど
アルゴリズムが簡単な場合は最初からきっちり作ったアセンブラのコードには勝てないよ
あとアセンブラ使ったのっていったらLZ77の圧縮展開ルーチンとかかな…
Cのみのコードと比べたら倍ぐらいになったよ
>486は自分で作ったものをプロファイルとってボトルネックを調べるとかはしないの?
ボトルネックになってる部分が単純な関数ならアセンブラに起こしなおすだけで
かなり高速化できると思うんだけど?
0500デフォルトの名無しさん
NGNGCPU依存になるの?
パイプの段数が違えば、ストール起こす条件もCPUによって違うわけだから・・・
493が言ってる最適化の効果はどれくらいなの?
分岐予測が間違えると・・・っていう事で
あとに来る共通して使える命令が入ってるんじゃなかったっけ?
あと、一つ気になったのはCと比較してるけど
C++のコードをアセンブラで高速化する事って無いのでしょうか?
それともC=C++という意味?
0501デフォルトの名無しさん
NGNGアセンブラは機械語と一対一だからCPUに依存するよ。
0502501
NGNG0503デフォルトの名無しさん
NGNGインストールする時に、
CPUを調べてインストールしてるの?
0504仕様書無しさん
NGNGプロファイルとってみて異常に時間がかかってるところって、最適化以前の
問題を孕んでることのほうが多くない?
それに、処理内容が単純な関数だったら、CでもC++でもアセンブラで
も大差ないし。
>>503
そういうソフトもあるけど、CPUの判別は実行時に行うことが多い。
インストール後にCPU交換されたら困るじゃん。
0505デフォルトの名無しさん
NGNG私の知っているソフトの中では、YAMAHAの「S-YXG100」というソフトシンセサイザーがあるよ。
CPUがIntel PentiumII以上でないとVL音源のプラグインがインストールされないの(Celeronは基盤がPentiumIII(II?)だからインストールされる)。
もっとも、アセンブラーで高速化しているからという理由かどうかは分からないけど。
0506デフォルトの名無しさん
NGNG>アセンブラ専用のサポート機能が付いたテキストエディタってある?
Peggy Proぐらいしか知らない。
0507デフォルトの名無しさん
NGNGそれは単純にpentium2以上じゃないと、VLなんて動かないからだと思われ
まあ、動いたとしても使い物にならないだろうな
>インストール後にCPU交換されたら困るじゃん。
もっともだ(笑)
0508デフォルトの名無しさん
NGNG最新のAMDのプロセッサにはインストールされないけど・・・・・
0509508
NGNG0510デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNGhttp://www.yamaha.co.jp/product/syndtm/p/soft/syxg100/spec.html
見ろ。
もっともいつの間にかAMD Athlon/Duronでも動くように改良したみたいだけど。
0512デフォルトの名無しさん
NGNG構造体のメンバの参照は一般的には自前で計算するんでしょうか。
当然コンパイラや開発ツールに依存する問題ではあると思うのですが。
マニュアルはしょぼすぎて、その辺の記述がほとんどのってないんです。
その辺(インラインアセンブラ)の作法についての文献、HPなどがあれば
教えてちょ。
0513Kusakabe Youichi
NGNGIn article <[email protected]>, "512: デフォルトの名無し
さん" <[email protected]> wrote:
> 基本はCで、所々インラインアセンブラで最適化する必要が出てきたんですけど
、
> 構造体のメンバの参照は一般的には自前で計算するんでしょうか。
ほかにどうするというのでしょうか?
何か便利なマクロが使える環境もあるでしょうけど、
それはその環境依存ですから、一般的には何とも言えないでしょう。
> 当然コンパイラや開発ツールに依存する問題ではあると思うのですが。
> マニュアルはしょぼすぎて、その辺の記述がほとんどのってないんです。
具体的にはどういう環境のどういうCを使っているのですか?
> その辺(インラインアセンブラ)の作法についての文献、
> HPなどがあれば教えてちょ。
そういうところで一般的なコツみたいなのがもし見つかったとしても、
あまり役に立たないでしょうね。
0514デフォルトの名無しさん
NGNGメモリの構造を理解してないのなら、アセンブラを触らない方が良いと思われ。
0515デフォルトの名無しさん
NGNGメモリーの構造を理解していなかったらCも使えないと思うけど。
CPUの構造まで理解する必要はないけどね。
0516515
NGNG0517デフォルトの名無しさん
NGNGVC++なら構造体の変数名でオフセット指定できる。他のコンパイラもできるようになっていればできる
MSDNライブラリ【__asm ブロック内の C/C++ データへのアクセス】参照
0518
NGNG実行コード&データレベルでの圧縮をよくしたものだ。
ビットフィールドは当たり前
0519デフォルトの名無しさん
NGNG今でも組み込みの一部では残ってるよ、その文化。
メモリが4kしかないと苦労するって
0520デフォルトの名無しさん
NGNGインラインアセンブラを使う場合には、コンパイラがサポートしてる可能性があるから、
それを調べる。
ほんとにアセンブラだけで書く場合には、事前にオフセットを計算して(<stddef.h> の
offsetof マクロを使うのが汎用的な方法)一覧を表に書き出しておいて、それを使う。
たとえば GNU as を使う場合だと、簡単なプログラムを作って、
#define OFFSET_XXX 3
#define OFFSET_YYY 8
みたいな一覧表を出力させて、これをアセンブラのソース中で #include したうえで
movl OFFSET_XXX(%eax), %eax
とかね。
0521512
NGNGツールのサポートに問い合わせた所、自前で計算してくれとのことでした。
一応、構造体の先頭アドレスは _構造体宣言名 で取得できるので結構楽かも。
0522デフォルトの名無しさん
NGNGまたは、どんなページを読めばいいの?
0523デフォルトの名無しさん
NGNGでもしょうがないのか・・・。
http://www.csl.sony.co.jp/person/fnami/asm.htm
http://www.csl.sony.co.jp/person/fnami/pentopt.htm
0524デフォルトの名無しさん
NGNGアスキーから出てる「はじめて読む8086」「始めて読む486」あたりかな。
あと、Intelのページは情報の宝庫。
0525デフォルトの名無しさん
NGNGおしえてもらったページや本を読んでみます。
ありがとうとがいます。
0526あなん
NGNGそういえば、以前は68系ってもマシンがあったから、
選択肢として現実的だったけど・・・今はどうなんでしょね?
やっぱx86マンセーなのかしらん。
つかヲレもずいぶん前に会社でx86系やらされたクチだけんど。
0527へぼぐらま〜
NGNGとか、
・XOR AX, AX
とかとか、
やってるのを良く見かけますが・・・テメェ自身にナニしてるんですか?
0528デフォルトの名無しさん
NGNG下は0にする。
0529デフォルトの名無しさん
NGNG8086系は16bitの時代は、セグメントとかアドレッシングとか
めんどうだったけど、今は、そうでもないんじゃない?
(自分自身、もうアセンブラは使わなくなってるんで、あれだけど)
0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNG使えないんでしょうか。
SSE命令とか使ってみたいんですが、アセンブラにはじかれます...。
なんかどこかの雑誌では、サービスパックVer3以降をインストールすればいいと書いて
あったのでインストールしてみたのですが変わりません.....。
教えてください。
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNGMS のサイトから Processor Pack ってのを探してきてインストール。
これで SSE 対応のアセンブラが入ります。
0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNGinvoke ExitWindowsEx,1,0
invoke ExitProcess,eax
0537デフォルトの名無しさん
NGNG0538>536
NGNGinclude \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.386
.model flat, stdcall
option casemap :none
.code
start:
jmp @F
szDlgTitle db "ColdBooT MASM",0
szMsg db "どうかな?",0
@@:
push MB_OK
push offset szDlgTitle
push offset szMsg
push 0
call MessageBox
invoke ExitWindowsEx,1,0
invoke ExitProcess,eax
end start
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNGあほか。
0541デフォルトの名無しさん
NGNGマルチスレッドでロックをかけたい場合、VCでは
CriticalSection(&cs);
を使いますが、これは遅いので
xchg eax, [ecx]
を使ってるプログラムがあります。
この根拠とか解説が詳しく載っているお勧めの文献はありますか?
0542デフォルトの名無しさん
NGNGIntel の Web サイトから拾える Intel Architecture Software Developer's Manual.
0543デフォルトの名無しさん
NGNGこれだとロック中だ、ということが解るだけでwaitしないから
CriticalSection()使ったほうが楽じゃない?
0544デフォルトの名無しさん
NGNGThanks、とっても3冊あってでかい・・・。
ちと検索してみます。
>>543
実際はループしてます。
L1:
mov eax, [ecx]
test eax, eax
jz L0
jmp L1
0545デフォルトの名無しさん
NGNGmovじゃダメだろーというのは置いといて、
ループ中は他のスレッドの処理が遅くなるから結果的に遅くなるような気がする。
待機中はできるだけCPUタイムを割り当てないようにしたほうが吉。
0546デフォルトの名無しさん
NGNGケースバイケース。
- マルチプロセッサシステムで、他のプロセッサと競合する資源に対する排他アクセス
- 短時間しかロックしない
場合には、コンテクストスイッチを発生させない方が好ましい場合もある。
0547デフォルトの名無しさん
NGNGまさにビンゴです。
そうか、内部でCPUを解放させる処理が入っているので
CriticalSection()は遅いのか。
>>545
全部書かずに失礼。元のソースはこんなです。
CriticalSection()より8倍速く動きます。他に書き方はあるのかな?
__inline void lock(volatile int *ptr)
{
__asm
{
mov ecx, ptr
L0:
mov eax, 1
xchg eax, [ecx]
test eax, eax
jz end
L1:
mov eax, [ecx]
test eax, eax
jz L0
jmp L1
end:
}
}
0548デフォルトの名無しさん
NGNGそりゃブロックしなければ速いだろうが
ブロックしたときCPUを無駄遣いする(>>546の例外を除けば)
0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG何で、ループを二つも作る ?
__inline void lock(volatile int *ptr)
{
_asm {
L0:
mov eax, 1
xchg eax, [ecx]
test eax, eax
jnz L0:
}
}
だけでいいと思うが...。
0551デフォルトの名無しさん
NGNGxchgがバスをロックするから迷惑ってことだろ。
0552550
NGNGああなるほど、なんかそう言う仕様だったような気がして intel のサイトで確
かめたかったのだけど、今なんか落ちてるみたいなんだよ。俺だけ ?
ftp://download.intel.co.jp/jp/developer/jpdoc/24319102_j.pdf
0553名無しさん
NGNG今は入れるみたいだけど。
どう?
ftp://download.intel.co.jp/jp/developer/jpdoc/
0554552
NGNG落ちてるみ宅見えたのは漏れのミスだったわ、すまん。以前ルーターの
テストでフィルター設定したあと戻すのを忘れていたよ。
>>551
xchgがバスをロックするから迷惑ってことだろ。
確かにそうだわ、確認した。
0555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNG上中下巻とここにあるようだけど、
ftp://download.intel.co.jp/jp/developer/jpdoc/24319002_j.pdf
ftp://download.intel.co.jp/jp/developer/jpdoc/24319102_j.pdf
ftp://download.intel.co.jp/jp/developer/jpdoc/24319202_j.pdf
大元のページが分かりません。ここは少し違うようだし。
http://www.intel.co.jp/jp/developer/design/mobile/manuals/index.htm
リンクの紹介は見つけたけど。
http://www.ncfreak.com/ncf_os/#asm
0557デフォルトの名無しさん
NGNGアレ、一応Cのコンパイラもついてるんだけど、速度出そうと思うと
アセンブラで書くしかなくなるのよ。
VLIWマンセー
ちなみに最大8命令実行可能。
話題と全然離れるのでsage
0558554
NGNGえ゛、普通に http://www.intel.co.jp から...
1. デベロッパ → ハードウェア、ソフトウェア、およびウェブ...
2. 製品情報 → インテルアーキテクチャ → IA-32 プロセッサ
3. お好きなプロセサを選んで、マニュアルをクリック
4. お好みのマニュアルとをクリックする
5. サーバーの場所をクリックすると ftp でダウンロード
で、できますが...。
0559558
NGNG6c6
< 4. お好みのマニュアルとをクリックする
---
> 4. お好みのマニュアルをクリックする
0560デフォルトの名無しさん
NGNGさんくす。
ただ、IA-32の下巻への日本語リンクが見つからなかったので
上でFTPできるのと内容が違うのか、と思ったので。
細かい話なので無視していいです。
後、実はIA-32の意味が分からなかった。
Intel Architecture 32ビット、の略だったのか。
実は最近、Linuxにはまり NASM を使ってアセンブラを書こうとしたのだが、
特に擬似命令などが全然違うではないか?
NASM の構文が載っているページ知ってたら教えてくれ。(できたら日本語希望)
0562デフォルトの名無しさん
NGNGイヤダンヌ
0563三頭神
NGNGhttp://www.nk.rim.or.jp/~jun/lxasm/asm00.html
0566デフォルトの名無しさん
NGNGMMXの解説コーナーにあったのか。さんきゅーです。
0567デフォルトの名無しさん
NGNG6309は邪道です!!
Z80?
ふっ・・
0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNG0571デフォルトの名無しさん
NGNG6309ってレジスタ増えてたっけ?
0572デフォルトの名無しさん
NGNGってゆうかサンプルコード見せてくらさい。
0573MacOSX
NGNG興味本位だけでやるな。迷惑だ。
0574スマソですが
NGNG0575デフォルトの名無しさん
NGNGCASLIIなんて無駄無駄。
情報処理試験でしか使えないだろう?試験ならあんたの使えるCで受けろ。
0576デフォルトの名無しさん
NGNGレジスタも命令も増えてます。
おまけにネイティブモードにすればスピードが3割増!!
でも命令の拡張の仕方が美しくない(w
0577デフォルトの名無しさん
NGNGできますが、アセンブラに関してはMOV命令ぐらいしか知らない。
こんな俺がX86系CPUについていちから勉強したいのですが
どういう本がおすすめでしょうか?
0579名無し募集中。。。
NGNG||@ノノノハヽヽ@||
ミ/川 \||||ヽ彡
|||ノ \ 卅|||||
( | ・ ・ | ) <asmで1FD OS といったらmenuet。
νゝ " д"ノし テトリス,marioとtelnetが入ってる。そん代わりsshは無し。
ttp://www.menuetos.org/
>If you have some experience in 32 bit assembler you are
>welcome to join coding.
ま、玄人は参加して日本語サポートするヨロシ
0580デフォルトの名無しさん
NGNG>でも命令の拡張の仕方が美しくない(w
だいたい、拡張命令って既存の命令の隙間に無理やり突っ込むから、あんなもんで
しょ。80 系よりましと思うけど ?
0581仕様書無しさん
NGNG0582あわわ
NGNG機械語知らないのにバイナリエディタで
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000010 02 2E 9C AA BA B7 FF 7E 97 34 EE DD 75 D2 CB AF
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
(↑アドレス)
入力してと1.exeで保存して実行して遊んでたら
Microsoft (R) KKCFUNC バージョン 1.10
Copyright (C) Microsoft Corp. 1991,1993. All rights reserved
KKCFUNC が組み込まれました.
マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993
とODS画面に表示されてしまったのですが何かやばいでしょうか?(汗
環境はwin2000にPenIIIです。
0583デフォルトの名無しさん
NGNG惚れた♥
0584デフォルトの名無しさん
NGNGPICとかAVRかい?
0585デフォルトの名無しさん
NGNG何がしたいのかよくわかんないけど、MZ/PE形式のバイナリじゃないから、
DOSのバイナリだと思ってDOS窓で実行してるんだと思われ。
0586デフォルトの名無しさん
NGNGMZ/PE形式のバイナリ
って、なんですか?
exeにも、bmpみたいに、ファイルフォーマットがあるのですか?
あるのならフォーマットについて教えてください
0587デフォルトの名無しさん
NGNGなんでもかんでも、おしえておしえて言うなよ。
あつかましいよ。
キーワードばっちり提示されてんだから、まず検索してみろよ。
0588i586
NGNGスマソ。調べた
http://www.bd.wakwak.com/~opapa/VC/Specification/EXE.htm
見つかった。
www.amazon.co.jp/exec/obidos/tg/browse/-/3954/249-0246110-6828367
0590デフォルトの名無しさん
NGNGSHL AX,20
これを実行するとAXの値はいくつになる?
(i386CPUでリアルモードで実行とする)
0591デフォルトの名無しさん
NGNG0じゃないの?
0592デフォルトの名無しさん
NGNGってのを狙ったと思うが、世のほとんどのアセンブラは
デフォルトで十進表記だから 1 を左に 20 ビットシフトした値。
が正解でしょ。
0593デフォルトの名無しさん
NGNG0594高校生
NGNGインストラクションセットを解説したドキュメントなり
Webサイトなりありませんかね?
0595デフォルトの名無しさん
NGNGPDP-11 ということは、もしかして UNIX Version 6 のソースを読もうとしてる?
0596kcrt
NGNG0597高校生
NGNGUMLで起こしてる最中。coremap,sqapmap,proc,user,text,
sysent,file,inode,filesys,mount,bdevsw,cdevswがどんな
参照関係を持っているのか、どの関数によってどんな作用を
受けるのか調べているところ。(思ったより単純だ)
ターゲットであるPDP-11に関する詳しい飼料が欲しい。
0598デフォルトの名無しさん
NGNG86はバカ正直に全回数のシフトを実行
リアルモードがどういう仕様なのかは知らん
0599デフォルトの名無しさん
NGNGUML で分析/設計 -> 実装という流れならともかく、既存のシステムを分析するのに UML で
図を起こすのは時間の無駄だ。やめとけ。UML は分析/設計用の言語であって、既存のコー
ドを解析するために作られたワケじゃないからね。
(GLOBAL + htags でクロスリファレンス作るのは役立つと思うが)
> ターゲットであるPDP-11に関する詳しい飼料が欲しい。
UNIX V6 のソースを読むだけなら Lions' commentary on UNIX の巻末にあるリファレンス程度
で間に合わないか?
0600高校生
NGNG>図を起こすのは時間の無駄だ。やめとけ。UML は分析/設計用の言語であって、既存のコー
>ドを解析するために作られたワケじゃないからね。
フリーハンドで簡単なUMLを描いて見たけど時間の無駄とまではいえんと思う。
(誰かに提出するドキュメントでないから)
>UNIX V6 のソースを読むだけなら Lions' commentary on UNIX の巻末にあるリファレンス程度
>で間に合わないか?
アセンブラでかかれた部分(のtrapやcoreの初期化)が良くわからん。工業高校生なら
アセンブラバリバリ読むのかもしれんが。。。俺は素人(TT
0601デフォルトの名無しさん
NGNGおにぎり食べたいワショーイ
___ ___r――――――――――――――
∨‖ |ママン、ここは素人ばっかりだね
// ‖ |____ ____________
/ ‖ / ∨ヾ:::::ソ;/∧_∧ _______
‖ // |三| " , 、 ミ /
/ ‖ ノ::i::i:;;ヽゝ∀ く < そうね /■\ ∧∧ ∩∩ ∧_∧i::;/ ノ ̄ヾ i \
二( ´∀`)(=゚ー゚).('Д`).( ´∀`) ∪⌒ ⊂_ノ  ̄ ̄ ̄ ̄ ̄ ̄
( )( ).( : )( ) (__ノノミ
|\ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\.|__./|
\ \ \. | |
0602デフォルトの名無しさん
NGNGunix/low.s のあたりか? 確かに PDP11 知らんと微妙に辛いな。
トラップ/割り込みが発生すると、そのトラップ/割り込みに対応するアドレスから分岐先とステータス
ワードを読んできて、そこに分岐するようになってる。たとえばトラップベクタの先頭は、
trap; br7 + 0.
となってると思うが、これはトラップ 0 (バスエラー)が発生したらステータスワードを br7 + 0 に設定
して trap に分岐、という意味だ。ステータスワードの詳細などは Lions' commentary on UNIX の第二
部第二章に書いてあるから、本を買ってきて読むのが良いと思うぞ。
0603デフォルトの名無しさん
NGNGAAの素人発見!
0604高校生
NGNGサンクス!そうするよ。
0605デフォルトの名無しさん
NGNGシフト回数は切り捨てられて20-16=4ビットシフトになるCPUと
そのまま20回シフトしてゼロになってしまうのと
両方あったような記憶がある
その頃のCPU判別方法の一つじゃなかったかな
386はどっちだったか覚えてない
0606591
NGNG「286以降のすべてのIA-32プロセッサは、シフトカウントを5ビットにマスク
する」とあるよ。
「このマスク設定は(仮想8086モードを含めた)すべての動作モードで行われ」
だそうだから、リアルモードでも5ビットマスクということだね。
だから、やっぱり結果は0でいいんじゃない?
0607デフォルトの名無しさん
NGNG大きすぎる(64を超えると??)と
結果がヘンになるバグがあったような気がする。
0608605
NGNG32ビットのCPUだから5ビットでマスクか スマン
0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNGそれ使うCPUの判別方法があったな。
80186以降だとデクリメントする前の値になるんだっけ?
0611リストで質問
NGNGmov dword ptr[004358A4], ecx
mov ecx,dword ptr[004358A4]
こんなリスト。2行目って何の意味? nop 代わり?
0612デフォルトの名無しさん
NGNGそういうコードが出てくるけど、そういう話やなくて?
0613リストで質問
NGNGコンパイラがこんな無意味なことをするとは信じがたいが事実。
0614デフォルトの名無しさん
NGNG0615デフォルトの名無しさん
NGNG1) 2行目にループする事を予定してた
2) 利用するメモリを実際に確保させ、以後の処理を高速にさせる為
3) 引数をレジスタ渡しにしたけど複雑な処理をさせたから
4) 単に手抜き
0616デフォルトの名無しさん
NGNGあくまでも 対Visual Basic でしかない感じ。
Borland C++の最適化もWATCOM C/C++、Visual C++に比べれば劣っていた感じ。
つか、私ではVisual C++6.0の最適化には勝てない。
0617デフォルトの名無しさん
NGNGレジスタの塗分けとかCPU依存のところはまあまあだけど、
CSEなんかの抽象化されたところはあまいような。
GCCの方が上かも。
0618デフォルトの名無しさん
NGNG不正なコードにコンパイルされてもなー
0619デフォルトの名無しさん
NGNG一部分だけ抜き出すとすごいんだけど、関数全体とかモジュール全体になるとイマイチ。
0620デフォルトの名無しさん
NGNG中身まで詳しくは見ていないが、自分の実験では5%以上遅かった。
0621デフォルトの名無しさん
NGNG>Delphiの最適化ってあまり強くないし。
VCとは、ほとんど変わらないだろ。
0622デフォルトの名無しさん
NGNG0623デフォルトの名無しさん
NGNGどこの定説だよ。
Delは無料で手に入るんだから検証してから言えよ。
0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNGDelphiだとあんまりグローバル変数取らないでしょ
0626デフォルトの名無しさん
NGNGπとか素数計算が適当だと思うよ。
Cとの比較になってしまうけど
http://www.infoeddy.ne.jp/~tensyo/prog/piHex.htm
0627デフォルトの名無しさん
NGNG0628リストで質問
NGNGmov eax,1
00433614 cmp eax,1
jne 000433625
mov ecx,dword ptr[ebp-08]
movzx ecx,byte ptr[ecx+eax-01]
mov dword ptr [esi],ecx
jmp 0043362F
00433625 mov ecx,dword ptr[ebp-08]
movzx ecx,byte ptr[ecx+eax-02]
mov dword ptr[esi],ecx
0043362F mov ecx,dword ptr[ebp-08]
movzx ecx,byte ptr[ecx+eax-01]
mov dword ptr[004358A4], ecx <-
mov ecx,dword ptr[004358A4] <-
add dword ptr[ebx],ecx
mov ecx,dword ptr[ebx]
imul ecx,dword ptr[ebx],ecx
inc eax
dec edx
jne 00433614
begin
chk:=Us+Ds+Tm;
b:=0;
for i:=1 to Length(chk) do begin
if i=1 then
c:=Ord(chk[i])
else
c:=Ord(chk[i-1]);
s:=Ord(chk[i]);
inc(b,s);
b:=b*c
end;
0629リストで質問
NGNGmov eax,1
00433614 cmp eax,1
jne 000433625
mov ecx,dword ptr[ebp-08]
movzx ecx,byte ptr[ecx+eax-01]
mov dword ptr [esi],ecx
jmp 0043362F
00433625 mov ecx,dword ptr[ebp-08]
movzx ecx,byte ptr[ecx+eax-02]
mov dword ptr[esi],ecx
0043362F mov ecx,dword ptr[ebp-08]
movzx ecx,byte ptr[ecx+eax-01]
mov dword ptr[004358A4], ecx <-
mov ecx,dword ptr[004358A4] <-
add dword ptr[ebx],ecx
mov ecx,dword ptr[ebx]
imul ecx,dword ptr[ebx],ecx
inc eax
dec edx
jne 00433614
0630リストで質問
NGNGchk:=Us+Ds+Tm;
b:=0;
for i:=1 to Length(chk) do begin
if i=1 then
c:=Ord(chk[i])
else
c:=Ord(chk[i-1]);
s:=Ord(chk[i]);
inc(b,s);
b:=b*c
end;
0631最適化なら、
NGNG0632デフォルトの名無しさん
NGNGsがグローバル?
じゃあしょうがないんじゃないの?
変数sに他のスレッドが書き込む可能性もあるんだし
0633age
NGNGおすすめがあったら教えて頂けませんか?
プラットフォームはWinです。
0634デフォルトの名無しさん
NGNGたしかにあの出力コードは凄かった。レジスタをきちんと使いまくって
くれたし。ただし、Smallモデルl限定だけど(^^;
他のモデルではそうでもなかったような。
>>633
オレはttp://www6.airnet.ne.jp/dds2/にあるStirling使ってる。
0636デフォルトの名無しさん
NGNGMMXと浮動少数命令は同時に使えないのに、。
もしMMX使用中にスレッド切り替わって
切り替わった先のスレッドで浮動小数点命令つかったら死なない?
それともタスク切り替え時にMMXレジスタすべて保存してるとか?
0637デフォルトの名無しさん
NGNGノンプリエンプティブなOSなら、
タスク切り替えのタイミングわかるから自前で保存/復帰できますが、
プリエンプティブなOSではOS側でやってくれないと動作不可能ですが。
具体的には、
FLDENV/FSTENV/FNSTENVあたり?
中身についてはこれで。
FRSTOR/FSAVE/FNSAVE
0638デフォルトの名無しさん
NGNGなにもMMXに限ったことではないと思うぞ。
0639デフォルトの名無しさん
NGNG業務系などではどうなのでしょうか?高速化よりもソースの読み易さなのでしょうか?
0640デフォルトの名無しさん
NGNGそこがバグになったら最悪でしょ。
たいてい人がやると、
パイプライン処理でハザード起こしてしまったりする。
それにPCでは普通はやらない。
というか、普通は速くならない。
速くなるのは、MP3のエンコードみたいに
永遠と同じ処理を繰り返すような物に限った話。
ただ、これは機械語で書くから速くなるのではなく、
CPUに用意された、固有の命令を使うからはやくなる。
組み込み系でアセンブラ使うのは、
コンパイラ作る方が手間がかかるから。
ゲーム系でアセンブラ使うなんて話は最近は聞かない。
0641デフォルトの名無しさん
NGNG○ 延々と
ぶっ壊れたレコードじゃないんだから。
0642デフォルトの名無しさん
NGNGまぁ、あれはCPUが特殊スギって話だけど。
0643デフォルトの名無しさん
NGNGオマエMFCプログラマーダロ
0644デフォルトの名無しさん
NGNGゲームに必要なのはプログラマーじゃなく
エロ画家と思われ。
0645643
NGNG> エロ画家と思われ。
ウケタ
0646デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNGつか、ヘッダとインポートライブラリだったらPlatform SDKでダウンロード
できるじゃん。
0650648
NGNGはあっても、*.inc はないけど・・ >> 649
0651649
NGNGでもそれって*.hから変換するツール作ればいいんでないの?
0652649
NGNG他に方法ないかな、どっかでヘッダ公開してるとか? >> 651
0653デフォルトの名無しさん
NGNG浮動少数点のレジスタを保存する命令でMMXレジスタが保存されるから
MMX以前のOSでも大丈夫、というのがミソだったような
0654デフォルトの名無しさん
NGNGttp://spiff.tripnet.se/~iczelion/
0655デフォルトの名無しさん
NGNGそのとおり。逆に SSE は OS 側で対処が必要になる。
っつか >>636 が何を疑問に思ってるのかが謎だ。
0656デフォルトの名無しさん
NGNGってことはソフトウェアの方で固定少数しか使わないときは
MMXをずっとONにしててもいい、ってこと?
0657デフォルトの名無しさん
NGNGなんか話がかみ合ってない気がするな。
「MMX を ON にする」というのは、どういう意味だ? MMX を使う場合でも FPU を使う場合でも、
プリエンプティブなマルチタスク OS では
タスク切り替え時に OS がレジスタの退避/復元を行う
(実際には FPU 使わないプロセスも多いことに配慮して、遅延処理してるが)
ので、ユーザが気にする必要はない。ユーザが唯一気にしないとまずいのは、同一タスク内で
FPU/MMX を混在させて使う場合だけ。
0658デフォルトの名無しさん
NGNGないかな?
とりあえずZ80でいくつもりです。
0659デフォルトの名無しさん
NGNG今日日のエロゲ、MMXくらい普通に使用してるけど…。
EMMS 呼ぶ前に コンテキストスイッチが起こって、別スレッドが x87 命令
使った場合の動作が疑問ということかな? >> 636
レジスタの待避/復元は MMX レジスタは 実質 FPU レジスタな訳だから、いい
として、問題はタグワードだな。
0661デフォルトの名無しさん
NGNGレジスタにつき2bit分あるフィールドの組み合わせが一つ増えた(定義された)だけだったような。>MMX
それゆえ今までどおりの退避/復元で十分だったかと。
0662デフォルトの名無しさん
NGNGユーザーアプリでは何も気にする必要はないよ。
0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNGDLL でそれやるやつ嫌い。特に Microsoft とか Microsoft とか
Microsoft とか。
0665660
NGNGリファレンス見たら、確かにそうなってた。多謝 >> 662
0666660
NGNGP106 に載ってます。持ってる方は見てください。
0667デフォルトの名無しさん
NGNGふつーは Intel Architecture Software Developer's Manual Vol. III を参照すると思われ。
0668デフォルトの名無しさん
NGNGこの本いいよね。
P6系で各x86命令のμOP構成やそのμOPのレイテンシが結構詳しく書いてある。
IntelのWebのマニュアルには詳しく書いてないんだよね。
0670デフォルトの名無しさん
NGNGまぁ、こんなにかよっためいれいいっぽんにまとめちまえよ
というのがくさるほどあっていがいたい俺はとてもだるひ
0671デフォルトの名無しさん
NGNG遅レスですまんのだが、本当にそんな事実があったの?
手元にとりあえずあった、
ttp://shopping.yahoo.co.jp/shop?d=jb&id=18908945
この本のSHLの説明を見てみたところ、
「初期の486ではSHLの命令エンコーディングを認識しない」
としか書いてないんだが…
尤もこの本、結構誤植や誤謬が多くてちょっと不安なんだけど…
0672デフォルトの名無しさん
NGNGアセンブラを学びたいと思ってるのですが、
勉強する順番ってCASL→Z80でいいんでしょうか?
アセンブラを知って実用できるようになるにはどのような手順でいけば
効率的なのでしょうか?アセンブラに詳しい方、是非教えてください。
0673デフォルトの名無しさん
NGNGなんのためにアセンプラを勉強したいかによるんじゃないかな?
場合によってはアセンブラそのものよりターゲットとなるハードウ
ェアのIO周りの勉強の方が先かも知れないよ。
0674デフォルトの名無しさん
NGNGレス、有難うございます。
アセンブラをやってみようと思い立ったのは、
「Cを知るためにはアセンブラ(機械語)の知識があることが望ましい」と、
あるサイトに書かれていたからです。
そこで、Amazonなどでアセンブラ関連の書籍を検索しましたが、
在庫も少なく、発行年月も古いので、どれを読めばいいのかわかりません。
アセンブラを学ぶためにZ80の書籍を参考にするのは時代的に古いのでしょうか?
長くなってすみません。
アドバイスいただければうれしいです。宜しくお願いします。
0675デフォルトの名無しさん
NGNGアセンブラを知っていたらCのポインタを簡単に理解できるという
程度のものじゃないの?
0676デフォルトの名無しさん
NGNG実際のレジスタやメモリではなく、
ソフト上のレジスタやメモリを書き換えるような。
暴走してもソフト的に停止できるし。
昔、Z80でよく暴走させてたので。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNGあ、その手がありましたね。
0679デフォルトの名無しさん
NGNGとりあえず参考書には困らにゃい(笑
0680デフォルトの名無しさん
NGNGMIPS エミュレータの SPIM とか。ステップ実行させてレジスタの変化とか追えるから、学習用には
便利だよ。
0682デフォルトの名無しさん
NGNGCで何をしたいのかによるけど…
たぶん、C言語で Z80を動かそうとしているのではなさそうなので…
CASLで十分。ていうか、CASLがオススメ。
なぜなら、初心者用の教材がたくさんあるから。
「月刊情報処理試験」とかの連載記事も役立つよ。
とりあえず、CASL2 のシミュレータで特訓してみてごらん。
ttp://www.jitec.jipdec.or.jp/casl2/casl2dl_001.html
0683デフォルトの名無しさん
NGNG具体的にはpsadbwが使えるか知りたいんだけど。
0684202.221.45.130
NGNG俺のIPアドレスだ、おめーらの技量じゃハックデきね〜だろうけどw
0685683
NGNG0686デフォルトの名無しさん
NGNG割り込み番号は全く違うのですか?
BIOS レベルでは何等変わらないと思ってるのですが・・
後、MASM というか MS-Cのインライン asm では
asm push ds
asm mov ax, 0x80
asm mov ds, ax
asm mov ah, ds:0x00
asm pop ds
こういう書き方ができたのですが、gcc 用に
__asm__("push %eax
push %ds
xor %eax, %eax
mov $0x40, %ax
mov %ax, %ds
xor %ah, %ah
mov 0x96(%ds), %ah
pop %ds
movb $0x10, %ah
xor %al, %al
int $0x16
pop %eax
ret" );
}
こういうのを書くと
Error: `0x96(%ds)' is not a valid 32 bit base/index expression
こうなってしまいます。どうすれば %ds番地 + 0x96番地の中身を
%ah レジスタに mov できるのでしょうか。
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNG↑
これ暗号らしいんですけど解ける人いますか〜?
0689デフォルトの名無しさん
NGNGプロテクトモードの時、メモリを物理アドレスで参照するのは、ユーザープロセスでは無理。
0690688
NGNG0691デフォルトの名無しさん
NGNGユーザープロセスでデバイス直接いじくるのは、gas では無理で、
ioctl() 使うしかないのでしょうか・・・楽は楽なんですけど、、
そうすると、カーネルは低レベルでkeyboard 割り込みとか
どんな風に実装してるんでしょうね。興味深いです。
MMU には、カーネルが勝手に page table を見て仮想アドレスと
実アドレスを変換した値を渡してやるんでしょうね。
確かにカーネルが管理してる領域をユーザーが自由に変更する
事はできません。やっぱり ioctl() しか無さそうですね。
0692デフォルトの名無しさん
NGNGttp://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-4.html#chapter_mm_sect1-4
でも、読んでくださいまし。
0693デフォルトの名無しさん
NGNGつまり、 segment:offset の絶対アドレス指定、
ユーザープロセスのみ「仮想アドレス」モード・・・こら絶対手の届かん
とこに御大が居られる訳ですな。
raw device へのユーザーモードからのアクセスは、もう ioctl() 以外に
考えられません。
0694デフォルトの名無しさん
NGNGこれがホントに普通なのか知りたい。
たとえばどのCPUで使えるの?
そのリンク先見るとAlphaは違うって書いてあるね。
x86も違うよね?
0695age
NGNG0696デフォルトの名無しさん
NGNGAlphaも「物理的にマッピングされたアドレス空間」って書いてあるし、>>692の解説はx86のものです。
MMUを持ってないプロセッサへのUNIXカーネルの移植は、難しそうです。
でないと、プロセスが他のプロセスのメモリ壊すのとか、自分自身の飛び込み自殺とか防げないですからね。
(68881(でしたっけ?)を積んでない68Kのシステムで動くUNIXとか、Z80で動くのとか、あるにはあったようですが…)
0697694
NGNGそうじゃなくて「カーネルは普通MMUを通らないモードを使ってます」の部分です。
だけどAlphaはMMUを通らないモードはないって書いてあるんでしょ。
x86もないと思うのよ。
で、結局カーネルも仮想アドレスでアクセスしてるけど、仮想アドレスを管理して
るのはカーネルだから、どの物理アドレスにマッピングされてるかを知ることが
できるって感じなのではないかなぁと思ったのです。
0698デフォルトの名無しさん
NGNG> x86もないと思うのよ。
あるよ。妄想と思いつきだけでいい加減なことを書かないように。
0700デフォルトの名無しさん
NGNG>>692のページは、「MMUの変換を通らない」、であって、「MMUを通らない」ではない事に注意。
0701デフォルトの名無しさん
NGNG0702デフォルトの名無しさん
NGNG0703にょ って言ってみな
NGNG幼い日の手のぬくもりが帰ってくる
0704694
NGNGたとえば仮想アドレス100を物理アドレスの100にマッピングしてたら
「MMUの変換は通ってない」という意味ですか?
>>701
それはページングを使わないって意味ですよね?
0705デフォルトの名無しさん
NGNG>>701はカーネルプロセスだけページングをしない、ってんだから、それでいいんじゃないの?
あと、ページングしないんだから、変換通ってない、で、おかしくは無いと思うが。
それとも、セグメントディスクリプタ:オフセット→リニアアドレスの変換が、MMLの変換だ、
だから>>692の
>MMUの変換を通らないモード
や、>>692のページの、
>プロセッサはこのモードのときはアドレス変換をしようとしない。
は、間違いだ、といいたい?
じゃなかったら、インテルのマニュアルには「物理アドレスモード」っていう言葉が出てこないぞ、
っていってるのか?
だったらあんたがそう思ってればいいだけのことだ。
0706デフォルトの名無しさん
NGNG0708デフォルトの名無しさん
NGNG0709デフォルトの名無しさん
NGNG0710694
NGNGそれならMMUを通ってないっていえると思うんですが、
どうやったらできるのか分からないって意味です。
PGビットをクリアするのは意味ないですよね。ページングをオフにしたら変換
はしませんけど、>>692の説明にあったようにページングを仮定してるOSのカー
ネルで使えませんから。
それで、例えば、仮想アドレス100を物理アドレス100の変換するようにページ
テーブルを作って仮想アドレス100にアクセスすることで物理アドレス100にア
クセスできますよね。これを変換を通ってないとは呼ばないと思うんです。
(べつに仮想アドレスを物理アドレスと同じにする必要はありませんが)
で、これ以外に物理アドレスにアクセスする方法があるんだったら
知りたいなぁと思ってるのですけど。
0711デフォルトの名無しさん
NGNGがそれをやればええんでないの?
ちなみにPGビットは一度セットしたらリセットする方法は用意されてないはず。
0712デフォルトの名無しさん
NGNG0713デフォルトの名無しさん
NGNG4-2
・制御レジスタCR0 のWP フラグをクリアする。
・ページ・ディレクトリ・エントリとページ・テーブル・エントリごとに読み取り/書き込み(R/W)フラグとユーザ/スーパバイザ(U/S)フラグをセットする。
この処置によって、各ページは書き込み可能なユーザ・ページとなり、実質的にページ・レベル保護がディスエーブルにされたことになる。
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG0716694
NGNGLinuxは仮想アドレス使ってアクセスしてるの。
だけど、普通はMMUを通らないモードを使うってあったから、
その普通ってどの石かって聞いたらIntelって言われたんだけど、
肝心のそのやりかたがわからないと。
0717デフォルトの名無しさん
NGNG気に入らなかったら [email protected] にメールだして文句言えば?
つか、あんた、だれを相手にしてるんだ?(w
0718デフォルトの名無しさん
NGNG少なくともx86には当てはまらないと。
0719デフォルトの名無しさん
NGNGプ
x86のこと言うなら、論理アドレスとリニアアドレスと物理アドレスで話しようよ。
0720694
NGNG>>692 とか >>698 とか
というか、特に >>698 です。
とりあえず、リンク先はAlphaのことが書いてあるのでx86で物理アドレスで
アクセスできるとかは書いてないと思います。
>>719
Linuxは特にx86だけメモリ管理の扱いが違うってことはないと思います。
0721719
NGNGだからさ、x86に「仮想アドレス」っていう言い方は無いのよ。
>ソース見ても解決しないってば。
つーことは、ソースは見たんだよね、当然。
見ても解決しなかった、と。
だったらx86のカーネルはどういう実装だった?
で、実装がわかったんなら、「こうなってました」って言えば済むことじゃん。
でも、解かってれば、セグメンテーションとページングを別けて話出来るはずだよね??
x86には「物理アドレスモード」と呼べるモードはたしかにある、フラットメモリモデルがそうだ。
でもLinuxはそれを採用してない。これは>>692のリンクのほかのページ見れば、ページングを使ってることがわかるから。
ま、なんだ、きみはその、こう言いたいわけか?
「でびっどのうそつき!」
0722デフォルトの名無しさん
NGNG仮想アドレスなんて一般的な用語だろ。
Intelが使用している用語のみを使えという理由が意味不明だ。
あとそのx86のフラットメモリモデルとやらは、結局UNIX系OSのカーネルでは
使い物にならないしろものなんだろ?
0723722
NGNGページングとは全く別の話じゃないか。
ページレベル保護機能とページング機能の区別がつかない >>711 と同一人物? 電波?
0724719
NGNGIntelが定義している用語にこだわってるんじゃなくて、x86のアーキテクチャの話にしたいだけ。
694は「x86の場合はどうなのか」にこだわってるから。
それから、フラットメモリモデルは、「セグメンテーションとページングをディセーブルにした状態」を指すものと思うが?
(ディセーブルというか、イネーブルにしない、というか)
0726719
NGNGページングも使わない場合、だから、>>692のページにある
>プロセッサはこのモードのときはアドレス変換をしようとしない
っていう意味の「物理アドレスモード」は、x86用のカーネルは使っていない。
これはこれでいい。
でも、>>692のページを読むと、仮想アドレスと物理アドレスとをページングだけで解説してる、
つまり、仮想アドレス→物理アドレスの変換と、ページ保護だけのプロセッサの解説だろうから、
そもそもセグメンテーションのあるx86には当てはまらない。
だから、694には、気になるならソース見ろ、と。
で、x86にとっては抽象的な「仮想アドレス」という言いかただと、話がおわらないぞ、と。
0727694
NGNG結局のところ、>>692 のリンク先にある文書は説明を簡単にするためにカーネ
ルが物理アドレスモードで動いてると書いてあると言う解釈でいいのかな?
単純に x86 でページングをオフにしてる場合のようなものはカーネルの実装
には使えないので、このスレで x86 でできるといってたのはそのあたりの勘
違いと。
で、僕は x86 には、そういうページングを使いつつ物理アドレスでメモリに
アクセスすると言う便利な方法はないと思っていたのだけど、それができるプ
ロセッサはあるのかと言うのが最初の質問でした。
>>726
というわけで、たとえば Linux ではどう実装されてるかというようなことは
気になってませんでした。つまり、Linux ではそういうのは使われてないから
です。
あと、Linux ではフラットモデルを使ってると思いますが、そうすると仮想ア
ドレスはリニアアドレスと等しいのでリンク先のページの解説が当てはまらな
いというのはちょっと言い過ぎですね。
0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNGmov dword ptr [ebp-08], ebp
というのがあったのですが、これはどういう
意味なんでしょうか。どなたか教えてください。
0730デフォルトの名無しさん
NGNGCで書くなら、
*(long *)(ebp - 8) = ebp;
という感じかな?
*((long *)ebp - 8) = ebp;
ではない点に注意。
0731デフォルトの名無しさん
NGNGx86って何?って人がいきなりアセンブラに手を出すのは無謀ですか?
(intel系のCPUのことらしい、というくらいしか知らない)
そういう知識ってどこで手に入れるのかさっぱり分からなくて…
0732デフォルトの名無しさん
NGNGそれは、
void zzz(int x, int y, int z)
{
int a, b, c;
・・・
}
だったら、変数bのことじゃな。(32ビットの場合)
ちなみに、[ebp+8]だったら、変数z
ebp-4は変数cじゃよ。
0733デフォルトの名無しさん
NGNGebpはデフォルトのセグメントレジスタがssだから、VCだと
普通スタックフレーム(ローカル変数とか)のアクセスに使うね。
実際に逆アセンブルしてそういうコードみたこと無いから、はっきり言えないけど、
ebpをスタックフレームに保存してるって事は、関数から戻るとき用に保存してる
んじゃないかな?
前後のコードもうすこし教えて欲しいナリ。
0734デフォルトの名無しさん
NGNGかっこいい、くらいでてぇ出さないほうがいいじょ。
とりあえず>>682のでもやってみたら?
0735デフォルトの名無しさん
NGNG古本屋逝って8086本を探すんじゃな。
インテル系の 16ビットの最初のマイコンは、8086だから。
8086
80286
80386
80486
Pentium
って進化してきた。
これは、PCメーカとかが、型番に386とか付けるのが面白くなかったらしい。
その昔、RedZepplinというお爺さんに人気のあったバンドのアルバムは、
レッドツェッペリンI→�U→�V→�Wときて、
五作目から「永久の歌(邦題)」(だったとおもう)などという、題名にしてから、
落ち目になったので、インテルもそうなると逝ってたマスコミが居たのぉ。
アセンブラ知っている人はかっこいいんじゃなくて爺さんじゃよ。
0736デフォルトの名無しさん
NGNGあと、80486はi486が正しいんでなかったっけ?
0737デフォルトの名無しさん
NGNGC:\>debug
-a 100
2469:0100 mov ah,9
2469:0102 mov dx,200
2469:0105 int 21
2469:0107 mov ax,3000
2469:010A int 21
2469:010C
-e 200
2469:0200 41.48 41.65 41.6c 41.6c 24.6f 8C.20 C2.41 82.73
2469:0208 CC.73 83.65 74.6d 83.62 40.6c 83.65 43.72 83.21
2469:0210 8B.0d 82.0a F0.24
-g =100
Hello Assembler!
AX=0000 BX=FF00 CX=0000 DX=0200 SP=FFF0 BP=0000 SI=0000 DI=0000
DS=2469 ES=2469 SS=2469 CS=2469 IP=0132 OV UP EI NG NZ NA PE CY
2469:0132 2E CS:
2469:0133 0D0A35 OR AX,350A
-exit
ってやれば、機械語版、Hello Assember! の出来上がり。
※ -e の後は、2桁入力後、スペースキーで、最後(24)を入力後、Enter
0738デフォルトの名無しさん
NGNG>>737の
mov ax,3000
は、
mov ax,3100
だった。プロセスの終了のつもりだったが、30だと、DOSバージョン取得だった。
どうも、exit 入れないとおわらないとおもった。
0739729
NGNGcall 0100735D
mov dword ptr [ebp-08], ebx ; <- typo
call 010073B2
mov dword ptr [ebp-08], eax
push dword ptr [eax]
call 01007349
…
といってもcallの中身書かないと無意味そうですが(;´д`)
で、質問した個所はこんな感じに解釈してみました。違ったら訂正お願いします。
・mov dword ptr[ebp-08], ebx
ebxを、dword型とて[ebp-08]のアドレスに書き込む。
0740デフォルトの名無しさん
NGNGいまの Windows には debug はつかないよん。
DOS 5 位でつかなくなったんじゃ?
0741デフォルトの名無しさん
NGNGWindowsXP Proにはdebug.exe入ってるけど?
0742デフォルトの名無しさん
NGNGWinMeにもdebug.exe入ってるみたいですけど?
0743デフォルトの名無しさん
NGNGebpだと意味がちがっちゃうけど、ebxなら、まんま>>732が正解。
0744デフォルトの名無しさん
NGNG>>740 は Windows9x しか使ったこと無いんだよ。NT 系は、みんな debug 入っ
てる。(edlin とかも入ってるけど、使ってる人いるのか ?)
0745デフォルトの名無しさん
NGNG0746デフォルトの名無しさん
NGNG>ebxを、dword型とて[ebp-08]のアドレスに書き込む。
あってますよ。dwordは、32ビット ebxも32ビットですね。
0747デフォルトの名無しさん
NGNG(´-`).。oO(EDLIN なつかすぃ)
0748デフォルトの名無しさん
NGNG乗せてるページもしくは書籍ないかな?
0749デフォルトの名無しさん
NGNGmovdqu xmm0, DQWORD PTR [m64+ebx+8]
としたいんですがエラーになってしまいます。(DQWORD PTRが不正)
128bitのデータ型を指定する事はできないんでしょうか?
0750デフォルトの名無しさん
NGNG128bitデータ型は「XMMWORD PTR」。
便乗で、質問。
movsd xmm0,QWORD PTR [ebx+8]
がMASMで通らないんだけどどうしたらいい?
インラインアセンブラなら問題なく通るんだけど。
0751デフォルトの名無しさん
NGNGMMWORD PTR で通らないか?
0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNGヴァージョンが古いのかそれとも他になんか必要なんですか?
MASMは6.15.8803です
0754750
NGNGすまん、上の方で、
.XMM
XMMWORD TEXTEQU <OWORD>
って定義されてた。
128bitデータ型は「OWORD PTR」というのがMASMの正式な名前らしい。
>>751
それでも通らないのです。
movsd xmm0,xmm1
も通らないです。
VC++のインラインアセンブラなら通るんだけど。
0755デフォルトの名無しさん
NGNGOWORDですか・・・わかるわけない(;´Д`)
OCT(8)ってことか?
なぜ素直にDQWORDにしなかったんだろう…
0756750
NGNGやっぱり XMMWORD PTR と書く必要があるみたい。
結局128bitデータは
MASM : OWORD
VC++ : XMMWORD
ということらしい。なんかややこしい。
0757デフォルトの名無しさん
NGNGだったら4バイトはDDWORDが素直?
0758757
NGNG0759デフォルトの名無しさん
NGNG↓ ↓
x4 x4
↓ ↓
QWORD→x2→DQWORD
deiijan
0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNG0762反68
NGNGこちらhttp://pc.2ch.net/test/read.cgi/pc/1013286504が用意されて
います。
0763デフォルトの名無しさん
NGNGdebug.exeはwin98にもはいってますよ
アセンブラの勉強の初期につかってました
0764デフォルトの名無しさん
NGNG足し算、引き算、シフトでどの様に行えばいいのでしょうか?
0765デフォルトの名無しさん
NGNG分からなかったら話はまずそれからですね。
あと、小数点付きというのは浮動小数点? 固定小数点?
0766デフォルトの名無しさん
NGNG0767764
NGNG100*10を足し算命令で行う= 100を10回足していく
100/10を引き算命令で行う= 100-10を引けるまで行う
で、いいのでしょうか?
>あと、小数点付きというのは浮動小数点? 固定小数点?
これがいまいちわかりませんでした
今考えているのはわり算の場合例えば3000/2000の計算は
3000-2000 = 1000 1回引けた
1000を10倍して10000-2000を引けるまで行うと5回引ける
この結果から答えは1.5
かけ算の場合例えば2.22*1.2は
2.22をを100倍して222、1.2を10倍して12
222を12回足して2664
小数点の位置は100倍、10倍しているので下から3桁目で答えは2.664
と求めようとしています
0768デフォルトの名無しさん
NGNG意味不明。
0769デフォルトの名無しさん
NGNGそれを10の巾乗じゃなくて2の巾乗(シフト)でやりましょう。
0770765
NGNG見たところ、いきなり小数点演算に挑戦するには荷が重いように思います。
まずは整数同士の掛算、割算に限定してみた方がいいです。
ポイントは、>>769の言うように数を10進数でなく2進数として考えること。
計算のやりかた自体は、人間が2桁以上の数を手で筆算するのと同じです。
例えば3×5を計算するとして、これは2進数だと11×101。これを、小学生に
戻ったつもりで筆算します。
11
× 101
-------------
11
00
11
-------------
1111
これを見るとなんとなく分かると思いますが、5(101)を下から1桁ずつ3(11)に
掛けては3(11)を1桁ずらす、の繰り返しです。
ここで「1桁ずつ掛ける」というのは、2進数では×0と×1しかないので3(11)を
足すか足さないかのどちらかしかありませんし、「1桁ずらす」のはビットシフト
そのものです。これで、足し算とシフトだけで掛算ができるわけです。
割算についても、同様に筆算をイメージしてみるといいでしょう。
0771デフォルトの名無しさん
NGNG「Vectorに登録されてそうな」って…?
(´−`).。oO( Vectorで探せばぁ? )
0772デフォルトの名無しさん
NGNG0773デフォルトの名無しさん
NGNGLinux上での汗プログラミングを勉強するのにいいサイトは
ありますか?英語のサイトは沢山見つかったのですが、
最初は日本語のものが読めると嬉しいです。
それともCでプログラミングしたのがどうコンパイルされるか
確かめながら覚えるのが早いでしょうか?
0774デフォルトの名無しさん
NGNG0775デフォルトの名無しさん
NGNGセクションとセグメントはどう違うのでしょうか?
386におけるセグメントは大体分かるのですが、
セクションというのが何なのか分かりません。
asのマニュアルなどを見ると
Ld
As
Sub
bbs
などのセクションがあり、さらにLdに関しては
named,text,data
bss
absolute
undefined
などがあるようです。
誰かお願いします。助けてください。
0776デフォルトの名無しさん
NGNGAsは高機能なアセンブラだからinfoをよく読んだ方がいい。
gccで吐かれるソースはあまりAsの機能を使ってないから
Asを使いこなすにはそれを読んでるだけじゃだめだろう。
0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNG汗派の氷魚さんに聞いてください。
かれはインテルにいたそうですから。
0779デフォルトの名無しさん
NGNG面白くないんでその結果をアセンブリのみで(call putcharとかなしで)表示させてみたいんですが
参考になるページとかのヒントないでしょうか?
(Windows+GNU asでやってます)
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNGそんな時こそ DOS コール。
0782デフォルトの名無しさん
NGNG今のPCでは、おまえが理想としている技術はなかなか身につきません。
とりあえず、秋月の通販でH8/3048のボード一式を買ってください。
だまされたと思ってやってみろ。
0783デフォルトの名無しさん
NGNG関するサイトとか結構みるけど、日本には殆どないね。
これがコアなユーザー層のレベルの違いなのか?
0784デフォルトの名無しさん
NGNG/* Write the character C on stdout. */
int
putchar (int c)
{
return __putc (c, stdout);
}
となってて、さらに
/* The C standard explicitly says this can
re-evaluate its arguments, so it does. */
#define __putc(c, stream) \
((stream)->__bufp < (stream)->__put_limit ? \
(int) (unsigned char) (*(stream)->__bufp++ = (unsigned char) (c)) : \
__flshfp ((stream), (unsigned char) (c)))
とかなっててもういや〜。
>>782
それっていくらぐらいするもんなんでしょうか?
>>783
そうなんですよ。なんか圧倒的に情報少ないんです。
http://directory.google.com/Top/Computers/Programming/Languages/
とかみると海外じゃ結構情報おおそうなんですか。英語のページあさった方がいいのかな?
0785デフォルトの名無しさん
NGNGというか今の組み込みはCでもできるんで
ライブラリさえ用意してあればPCと同じ。
H8のレジスタは32bitで68000や386SXクラスです。
(モード7ではRAM2Kバイトで悲惨だけど)
text ... Windowsでいうコードセグメント
data ... 初期値を持つデータのセグメント
bss ... 初期値を持たないデータのセグメント
その他 ... デバッグや実行時リンクのシンボル、他
昔のbsdではvoidセグメントが実行時リンクライブラリ
Cでいうstatic変数がdataに来る。
古典的なUNIXのスタイルでは、
bssの両端にスタックとヒープが向かい合って存在し、
中央の領域は仮想記憶空間で実メモリがあるとは限らない。
最近はマルチスレッドと実行時リンクなどで
新しいトレンドがあるかもしれない。
Linuxなんかでは変わっていない。
0786デフォルトの名無しさん
NGNGttp://www.akizuki.ne.jp/
マザーボードとCPUボード、開発ツールのセットで10000円ほど。
I/Oを叩けばLEDも光るので、CPUの仕組みを学ぶのにもいいと思う。
0787デフォルトの名無しさん
NGNGこれですか?なんかおれもやりたくなってきたよ。
386みたいな高級なのなじゃなくても基本が知りたかった。
0789デフォルトの名無しさん
NGNG.data
L0001 .byte "hellow, world", 0x0a
.text
_main:
move.l ebp, esp
move.l $L001, eax
push ax
call _printf
move.l esp, ebp
move.l 0, eax
ret
0790工房
NGNGアセンブリのいい本知ってたら教えてください。
ついでに売ってるところも教えてください。
0791デフォルトの名無しさん
NGNG命令とハードとOSの知識だけ。
Cの関数はgccのX86なら引数を右からプッシュして_関数名で
呼び出すだけ。結果はeaxレジスタ。
スッタクポインタをいじると死ぬから、
扱うルールをハローワールドのアセンブラ出力をgcc -Sで出して調査。
アセンブラの関数からprintfとか使うの難しくないはず。
使って試しにインラインアセンブラを含んだ C のソースを変換したんだが、
はき出されたものを gcc に食わすとエラーが出る。誰か詳しい人教えて。
ちなみに AT&T 構文の知識は全くありません。
以下、簡単なソース。
/* testi.c */
#include <stdio.h>
int main()
{
int i, j, k;
i = 0x20;
j = 0x10;
__asm
{
mov eax , dword ptr [i]
mov edx , dword ptr [j]
add eax , edx
mov dword ptr [k] , eax
}
printf("%d\n", k);
return 0;
}
command:
$intel2gas -m -I testi.c > test.c
$gcc -o test test.c
test.c:23: invalid `asm': operand number missing after %-letter
0793デフォルトの名無しさん
NGNGYou can define a local register variable with a specified register like this:
register int *foo asm ("a5");
Here a5 is the name of the register which should be used.
0794デフォルトの名無しさん
NGNG変換後のソースがないとなんとも言いようがないと思われ。
0795793
NGNGインラインの変数名やめて
register int i asm("esi");
register int j asm("edi");
で渡して通らないか。
3個目の変数はまずいかも。
0796792
NGNG/* testi.c */
#include <stdio.h>
int main()
{
int i, j, k;
i = 0x20;
j = 0x10;
__asm__ (
"movl i, %eax \n\t"
"movl j, %edx \n\t"
"addl %edx, %eax \n\t"
"movl %eax, k \n\t"
: // FIXASM: output regs/vars go here, e.g.: "=m" (memory_var)
: // FIXASM: input regs, e.g.: "c" (count), "S" (src), "D" (dest)
: "%eax", "%edx" // CHECKASM: clobber list
);
printf("%d\n", k);
return 0;
}
0797デフォルトの名無しさん
NGNGmov %0, dword ptr [i]
mov %1, dword ptr [j]
add %0, %1
mov dword ptr [k] , %0
0798797
NGNG0799792
NGNGできればフルソースで頼む。
0800デフォルトの名無しさん
NGNG0801797
NGNGだから、%eaxでなくマクロパラメータの%0が出力されるように書かなきゃ。
レジスタ名がそこにある時点でアウト。
コンバーターの仕様は知らない。
関数単位がラクでいいよ。
0802792
NGNGAT&T 構文は知識がないのであなたの言っていることはよくわかりません。
>> コンバーターの仕様は知らない
intel2gas はすぐにコンパイルできるのでできれば試してみてください。
>> 関数単位がラクでいいよ
普段は NASM 使ってるんでよくわかります。
0803デフォルトの名無しさん
NGNGインラインだと、レジスタのスケジューリングの問題が
あるんで、テンプレートマクロの形でレジスタ名を指定しろという
ことです。前と後ろで勝手にレジスタの退避とかするんでなくて、
オプティマイザが具体的にどれを使うか決めるんです。
0804792
NGNGintel2gas の出力を gcc がそのまま通すと踏んだのだが ・・・。
gcc インラインアセンブラを少し勉強してから出直してくる。
ご協力感謝する >> 803
0805とおりすがり
NGNG読んだことがあるけど一部いまでもわけわからんよ。
マニュアル牽きながら読まないと…。
0806デフォルトの名無しさん
NGNG国内
ttp://hp.vector.co.jp/authors/VA000124/
ttp://black.sakura.ne.jp/~third/
ttp://www.e-net.or.jp/user/missing-link/assembler/
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/5989/
海外
ttp://spiff.tripnet.se/~iczelion/tutorials.html (最高にお勧め)
なんつーか、基本的なアセンブラの知識は日本の奴でも充分。
WindowsプログラムのはSDKの知識と最後の奴で充分だった。
0807デフォルトの名無しさん
NGNGやりたいことはこうじゃないか?
eaxを直接指定するのは問題ないぞ。ただしCの文字列の中では % は2つ必要。
clobberに書くのはレジスタの名前。
%0 や %1 を使う必要があるのは C の変数へのアクセスだ。
__asm__ ("movl %1, %%eax \n\t"
"movl %2, %%edx \n\t"
"addl %%edx, %%eax \n\t"
"movl %%eax, %0 \n\t"
: "=m" (k)
: "m" (i), "m" (j)
: "eax", "edx");
ただし、メモリからレジスタへの読み込みはオペランド制約をrにすれば
自動でやってくれるので普通は以下のように書く。
__asm__ ("addl %2, %0"
: "=r" (k)
: "0" (i), "r" (j));
0808デフォルトの名無しさん
NGNGaddl (%edx), (%eax)
0809デフォルトの名無しさん
NGNGSparcのstack frameの定義がsys/frame.hにありますが、
struct frame {
int fr_local[8]; /* saved locals */
int fr_arg[6]; /* saved arguments [0 - 5] */
struct frame *fr_savfp; /* saved frame pointer */
int fr_savpc; /* saved program counter */
char *fr_stret; /* struct return addr */
int fr_argd[6]; /* arg dump area */
int fr_argx[1]; /* array of args past the sixth */
};
このfr_argとfr_argdって何がちがうんでしょうか。
fr_argdにCの関数の引数が入ってる感じなんですが。。。
アセンブラの達人の回答お願いしまっす!
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNGhttp://www.borland.co.jp/bcsuite/prodinfo/bcsoverview.html
0813デフォルトの名無しさん
NGNGSparcにはレジスタウィンドウという仕掛けがあって、関数呼び出しの際に
呼び出し元で使っていたレジスタをいちいち保存しなくてもいいように
なっているんだけど、当然ながらレジスタ数には限りがあるので、
関数呼び出しのネストがある数(8くらいだっけ?)以上に深くなると、
自分が使用するレジスタを確保するために、自分の呼び出し元の元の…の
使っていたレジスタをスタックに退避しなければならなくなる。
で、fr_localやfr_argなどがそのための領域みたい。
Sparcは実際に使ったことないので間違ってたらゴメン。
0814デフォルトの名無しさん
NGNGもうしわけないっす。
でも、fr_argとfr_argdの違いってことなんですが。。。
0815デフォルトの名無しさん
NGNGSPARC だと汎用レジスタが 32 (r0 - r32) まであって、用途は
r0 ゼロレジスタ
r1-r7 グローバル
r8-15 出力(関数呼び出しのときに渡す引数, return address, stack frame pointer)
r16-23 ローカル
r24-r31 入力(関数呼び出しのときに渡された引数, struct return address, レジスタ
に収まらなかった引数を格納したスタック領域へのポインタ)
となってる。当然 r0-r7 は関数呼び出しのときに保存する必要がないので、
保存する必要があるのは残り 24 個。それを struct frame に適当に割り付け
てるだけだと思うよ。
名前からして fr_local がローカルレジスタ、fr_arg が出力で fr_argd が入力じゃ
ないの。
0816815
NGNG一つのレジスタウィンドウで見える汎用レジスタが 32 ね。汎用レジスタ自体は
もっと大量にある。
0817813
NGNGで、"SPARC ABI"で検索したら以下のようなドキュメントが見つかったので、
紹介しときます。
"Understanding stacks and registers in the Sparc architecture(s)"
http://www.sics.se/~psm/sparcstack.html
これは知りたいことの説明そのまんまになっていると思う。
"SYSTEM V APPLICATION BINARY INTERFACE SPARC Processor Supplement"
http://www.sparc.org/standards/psABI3rd.pdf
これの3-8 Function Calling Sequenceも参考になります。
0818デフォルトの名無しさん
NGNGみなさん、ぬりがとうございます。ちょっと調べてみます。
0819デフォルトの名無しさん
NGNG0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNG0822デフォルトの名無しさん
NGNG0823デフォルトの名無しさん
NGNGこの構文を使うコンパイラはなんですか?
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNGPICとかの言語とかと同じ感じですか
0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNG多めに読むべきだと思うYO。作りたいプログラムがあっても
アセンブラは1命令自体の役割は小さいから、結局
いくつかセットで理解したほうが使いやすい。
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNGせめてAVRにしろ。
0831デフォルトの名無しさん
NGNG構造化ならgasでかなりいけるんじゃない?
0832MOV AX,0400H
NGNG0833832
NGNGwコマンドでファイル保存のやり方はどうすればよいのですか?
0834デフォルトの名無しさん
NGNG「アセンブラMACROプログラミング技法」ってのだね。
A-MACROSが正式名称かと。
0835デフォルトの名無しさん
NGNG-n ファイル名.com
-r bx
:0000
-r cx
:プログラムの終了アドレス -100h
-w
忘れていたので昔の本サンショした
0836832
NGNG0837デフォルトの名無しさん
NGNGより分かりやすい例
C:\>debug
-a 100
1709:0100 jmp ffff:0000
1709:0105
-r cx
CX 0000
:5
-n hoge.com
-w
00005 バイト書き込み中.
-q
で、上記で作成したhogecomは、意味わからん厨は実行しないように。
責任はとらんぞ。
0838デフォルトの名無しさん
NGNGどういうステップで勉強すればいいでしょうか?
0839デフォルトの名無しさん
NGNG一般論だが、
1.文法について覚える
2.命令を覚える
3.プログラムを読む/書く
ってな感じで。
0840デフォルトの名無しさん
NGNGありませんか…?
0841kcrt
NGNGインテルのページに親切なPDFがあるよ。
0842デフォルトの名無しさん
NGNGありがとうございます。
早速行っていますが…。
…迷子になりもうした…。
もう、…ダメかもしれません。
0843デフォルトの名無しさん
NGNG頑張れ! o(^-^)o
0844デフォルトの名無しさん
NGNGttp://www.intel.co.jp/jp/developer/design/processor/index.htm
Pentiumからでよければ上記
書籍では、「はじめて読む486」とか
(まぁ、いくとこいけばそれいがいもたくさんあるが)
0845838
NGNG0846顔も名前も出さずに毎月100万円
NGNGFuture-Web(フューチャーウェブ)登場
なんと10,000円単位の収入
●10,000円単位の高収入
1件につき最大10、000円の高額収入。月収100万円以上も可能。
●画期的なビジネス!
インターネットを利用したこれまでにない斬新で画期的なビジネスです。
●誰でも出来ます!
インターネットが出来る環境の方なら誰でも参加可能です。
●専門的な知識は一切不要!
ビジネスに必要なツールはすべて当社で用意いたします。また、サポ
ートも万全です。
●詳細は今すぐHPをご覧ください。
http://www.future-web.tv/7823/
0847デフォルトの名無しさん
NGNG0848デフォルトの名無しさん
NGNG839の一般論とやらは無視しましょう
1. CPUの仕組みと動作原理を理解する
2. CPUと周辺機の関係を理解する
3. メモリのことについて理解する
まずは、上記のようなことから始めるのが近道と思われ
漏れは、10年以上前に「はじめて読む8086」っちゅう本で
勉強したよ。今でも本屋でみかけるぞ
0849838
NGNG>1. CPUの仕組みと動作原理を理解する
パイプラインの話でしょうか?
少しはわかってます。
>2. CPUと周辺機の関係を理解する
これはよくわからないのですがOSですか?
良い本があればお願いします。
>3. メモリのことについて理解する
これも良い本があれば教えてください。
OSのページング等の事なら、OSの本を読めばいいのでしょうか?
>「はじめて読む8086」
読んでみようと思います。
0850デフォルトの名無しさん
NGNG教えてクン、推薦図書スレをチェックしろ。
0851デフォルトの名無しさん
NGNG3月25日に発売されるようだ。
詳しくは、新刊案内を。
0852838
NGNGチェック済みですが何か?
0853デフォルトの名無しさん
NGNGだったら読むべき本は分かるはず。
0854デフォルトの名無しさん
NGNGMSは日本人には(英語の知らないのには)asmはするなということでしょうか?
MSDNの英語版のVS6_SP5のなかにasm入ってます
0855デフォルトの名無しさん
NGNGこれで分からなかったらプログラムなんて止めちまえ。
0856デフォルトの名無しさん
NGNGhttp://www2.gihyo.co.jp/books/bookinfo.asp?ID=4-7741-1442-1
0857デフォルトの名無しさん
NGNGmasmはマイクロソフトasmですか
どちらでしょうか
素人質問で申し訳ございません
0858デフォルトの名無しさん
NGNG>>849
> パイプラインの話でしょうか?
> 少しはわかってます。
まったく役にたちません。必用なのはCPUの論理的な構造を
知ることです。
> >2. CPUと周辺機の関係を理解する
> これはよくわからないのですがOSですか?
これはむしろプログラミングの対照についての知識に近いの
でアセンブラのプログラマでも知らなくてすむ人はいくらで
もいます。組み込みなどでは知らなくてはなにもできないで
しょう。
> >3. メモリのことについて理解する
> これも良い本があれば教えてください。
これはもとの意味が分かりません。メモリはアドレスを指定
してデータを読み書きするということだけ知っていれば充分
です。
しいて言えば >>839 の一般論が正解でしょう。
却ってとまどうかもしれませんがなぜアセンブラをやりたい
かわからないと839以上の答は難しいでしょう。
単に知りたいだけならx86でやるのは最悪の撰択です。できれ
ばきれいなアーキテクチャを選んだほうが良いと思います。
一応 68000,汎用機、CASLの旧型などが私のお勧めです。
0859838
NGNG>知ることです。
ハザードが起こらないようにするために考える必要があると思うのですが。
高速化するためには、どういうユニットがあるのか
それがどれくらいのサイクルを必要とするかがわかってないと
ダメだと思うのですが、見当違いでしょうか?
アセンブラを使えるようになりたい理由は、
プログラムを高速化したいからです。
0860デフォルトの名無しさん
NGNG0861デフォルトの名無しさん
NGNGどうでもいいけどlinux嬢でのアセの本書いた方が売れるんじゃないか?
Windowsで汗かいてる人はもう既にかなり出来る人がおおい。それに
新規で興味持ってるひともそんなに多くないような気がする。
他にドキュメントや本も沢山あるしね。
商売が下手なのか、単に書ける人間がいないのかどっちか知らないけど、
企画として失敗な気がするよ。
0862デフォルトの名無しさん
NGNG普通にプログラミング出来ればアセンブラなんてサクッと理解できると
思うけど。
まずアルゴリズム見直そう。アセンブラは本当の最終手段だと思うな。
使わんでも下手な奴がアセンブラで書いたプログラムよりCとかで書い
たプログラムが速い事は良くある話だよw
ローテート使いたい時にインラインアセンブラ使うとかw
0863858
NGNG> ハザードが起こらないようにするために考える必要があると
>思うのですが。
> 高速化するためには、どういうユニットがあるのか
ハザードは勉強不足で知りません。これはCISCに個有なもの?
ただプログラミングするときにパイプラインがどういうふうに動作
しているからこういう命令の並びにしたほうが速いだろうと考える
る人はいないと思います。スピードを上げたいなら他の方法を考え
るでしょう。
0864デフォルトの名無しさん
NGNGちみはどんなプログラムを高速化したいんですか?
0865デフォルトの名無しさん
NGNG戻れなくなった(覚えられなくなった)俺はこれから死滅しますか?
だってポインタ使い心地(・∀・)イイ!!んだもん
汗のレジスタハヤーイ!
0866デフォルトの名無しさん
NGNGここまでスレがのびーるとは思わなかった。
0867デフォルトの名無しさん
NGNGDAYONE-
アセンブラとCが一番居心地が良い。
0868デフォルトの名無しさん
NGNGハザードを考慮しないといかん、ってことは組み込み系か?
少なくとも俺はアセンブラ使うときにハザードなんか意識したことはない。
0869デフォルトの名無しさん
NGNG極めて困難デス
0870デフォルトの名無しさん
NGNGサイズも小さいし。
0871デフォルトの名無しさん
NGNG実はWin32SDKを使って書くならCと大差ないという罠。
しかもCの1/10倍くらいのサイズ。
0872kcrt
NGNG0873デフォルトの名無しさん
NGNG0874kcrt=872
NGNG0875デフォルトの名無しさん
NGNG0876840
NGNG遅レスですみませが、ありがとうございました。
とりあえず目的の物は見つかりました。(まだ降ろしてないですが)
また、放浪中に、(486までの)各x86系CPUのオペコードのサイクルが載ってる資料?を見つけたので、
「んなもん普通に持ってんに決まってんだろ、このクソ野郎!」とか
「既出だ馬鹿。ミソ汁で面洗えよ」
と仰らない方は↓どうぞ。
ttp://www.penguin.cz/~literakl/intel/intel.doc
ttp://www.penguin.cz/~literakl/intel/intel.html
0877デフォルトの名無しさん
NGNG838の逝っているハザードはソフト的なやつで、868の逝っている
ハザードはハードの方の話ではないのかと思われ・・・・
0878age
NGNGインストラクションセット・・
(゚∀゚)イイ!
0879デフォルトの名無しさん
NGNG> 普通にプログラミング出来ればアセンブラなんてサクッと理解できると
> 思うけど。
システムプログラミングがらみだと、そうでもないよ。マルチタスク、入出力、
仮想記憶がらみの命令は、アプリケーションプログラミングの知識があって
も理解できない。
それを知りたいなら >>848 が言ってることを抑える必要があるし、そうではなく
単にアセンブラで一般的なプログラムを書きたいって話なら >>839 だね。
0880デフォルトの名無しさん
NGNGCやJAVAより
単純だからこそ使いやすくてよろし
0881デフォルトの名無しさん
NGNGC+asmだと出来る範囲はホントしれてるし
0883デフォルトの名無しさん
NGNG誤爆ですな。
0884デフォルトの名無しさん
NGNG少し前はデバイスドライバはアセンブラだったけど、これもヘッダを作るためで実装はCで書けるし
今、あえてアセンブラを使うとすれば、他の言語 C++やDelphiと組み合わせる場合
例えば、
1、多倍長演算ライブラリを自作する( CFを使わないと非効率的な為)
2、コンパイラでサポートされてないCPUの命令を使う為 MMXとか RDTSCとか回転とか
3、コルーチンのようなスタック切替を使うテクニックの実装に
4、自己解凍書庫のようにとにかく小さく作りたい場合
5、複雑な整数演算(マンデルブロのような)をカリカリにチューニングしたい場合
ただ、複雑な処理といっても メモリアクセスサイクルとCPUサイクルが2桁も離れている現状では
大抵の処理はメモリサイクルに隠れてしまう事を考えると、処理時間のチューニングにアセンブラ
を使う発想はあまり有効でない。
0885838
NGNGとりあえず、x86というのはciscなんでしょうか?
それはいいとして、
x86がパイプランのハザードをどう処理しているのかよくわからないので
なんともいえないのですが、
ハードウエアとコンパイラ(アセンブラ)の両方で、ハザードを防止するような
アーキテクチャも存在させる事はできます。
また、ハードウエアだけで制御する事も、コンパイラだけで制御する事も
可能です。
高速化したいプログラムは数値計算です
0886デフォルトの名無しさん
NGNGインターフェイスだけはね
Pentiumのバージョンごとに内部の設計は変ってるから
それを考量して汗するのはひたすら大変だと思う。
0887デフォルトの名無しさん
NGNG数値演算用のライブラリを買った方が早いということ
0888デフォルトの名無しさん
NGNGたとえば統計処理だとメモリがボトルネックになって
アセンブラで書く意味ないよ。
0889デフォルトの名無しさん
NGNG> x86がパイプランのハザードをどう処理しているのかよくわからないので
分かれよ。Intel のサイトに必要な情報は全部揃ってるから。
0890デフォルトの名無しさん
NGNGアセンブラを過大評価してるように感じる。
正直アセンブラを使うことを考えるよりもアルゴリズムを改良したほうが
遥かに高速化されると思うぞ。
その処理の中でアセンブラを使ったほうが明らかに早くなるような場合に、
アセンブラを使おうって話になるんだが。
0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNGそれは十分わかってます
>その処理の中でアセンブラを使ったほうが明らかに早くなるような場合に、
どのように判断するのでしょうか?
>それを考量して汗するのはひたすら大変だと思う。
たしかにそうですよね・・・・
アセンブラが読めればいい、程度の気分になってきました。
0893デフォルトの名無しさん
NGNGもちろんパイプラインハザードを防ぐ為にストールするという事もあるけど
0894デフォルトの名無しさん
NGNG>どのように判断するのでしょうか?
>>884 で書いてると思うが?
0895age
NGNG0896デフォルトの名無しさん
NGNG0897バイク板の鬱な藁人魚
NGNGINT 1Ehの飛び先アドレスをポインタにして参照する
ディスクドライバパラメータブロックの内容って
何処で調べればいいのでしょうか??
0898デフォルトの名無しさん
NGNGここで聞いて調べなさい。
0899デフォルトの名無しさん
NGNGみたいな、他のレジスタを経由しない演算は他と比べて遅いのでしょうか?
コンパイラの出力みるとEBXやECXを経由してるのを良く見かけるんで。
0900デフォルトの名無しさん
NGNG何と何を比較したいのかヨク分からん。両方のコードを示してみて。
0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNG例えばLISPのペアオブジェクトのcadarを取るコード
struct pair {
struct pair *cdr;
struct pair *car;
};
のときのcadar(p)=car(cdr(car(p)))
の出力コードは
mov ecx, DWORD PTR [eax+4]
mov edx, DWORD PTR [ecx]
mov eax, DWORD PTR [edx+4]
になります。(VC6SP5)
これを全部eaxに直した場合とでは、速度差はでるのか?
って事です。
ちなみにEAXだけによるcdr参照は
mov eax, DWORD PTR [eax] ; t1 = cdr(t1)
car参照は
mov eax, DWORD PTR [eax+4] ;t1 = car(t1)
です。
cadarですと、
mov eax, DWORD PTR [eax+4] ;t1 = car(t1)
mov eax, DWORD PTR [eax] ; t1 = cdr(t1)
mov eax, DWORD PTR [eax+4] ;t1 = car(t1)
なので、これと前者を比較してどうか?ということです。
0903デフォルトの名無しさん
NGNGPentiumPro以降なら速度変わらないはず(レジスタリネームで別々の物理レジスタに割り当てられるから)。
古いCPUはわからない。
0904デフォルトの名無しさん
NGNGP5とかだとAGIかなにかで2クロックは待たされるはず。
0905899=902
NGNG(物理的にEAX=OP(EAX)が見たまんまの効率で動くとは思えなかった)
なんでこんな質問をするのかというと、
LISPで動的にインストラクションコードの並びの生成/実行を
やってみようと思いまして、とりあえずなじみのリスト演算で
きめ打ちコードを自動生成するプログラム作ってるときに
VC6SP5の出力と比較して、あれ?と思ったので。
0906デフォルトの名無しさん
NGNGちょっと905の意図しているところが分からないけど、
P6以降だとインストラクションの並べ替えはCPUがやっちゃうから、
下手にいじるよりもストレートに吐いたほうがいいかもしれんぜよ。
0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNGmov ecx, DWORD PTR [eax+4]
mov edx, DWORD PTR [ecx]
mov eax, DWORD PTR [edx+4]
これでもP5ではAGIストールは起こるはず。
結局、途中のレジスタ名を変えても変えなくても同じだと思う。
0909905
NGNG吐かせることにします。
0910デフォルトの名無しさん
NGNGそれは俺の自転車だYO!
0911905
NGNGそれでは逆に、なんでコンパイラはあんな出力にしてるのか疑問に
思うんですが、他になにか要因があるんでしょうか。
0912905
NGNG0913デフォルトの名無しさん
NGNG0914905
NGNGなるほど(w
もうこの件について考えるのは辞めたほうがよさそうですね。
ありがとうございました。
0915デフォルトの名無しさん
NGNGmov eax, DWORD PTR [eax+4]
mov eax, DWORD PTR [eax]
mov eax, DWORD PTR [eax+4]
コードを吐きました。単にVC6のクセでしょう。
0916デフォルトの名無しさん
NGNGつまり、そのMOVEの間に次の処理を埋めるとか
0917デフォルトの名無しさん
NGNGそれやるとP5ではAGIストールをなくせるから、P5では効果あるんじゃない?
0918デフォルトの名無しさん
NGNGアセンブラは覚えること少ないから楽でいいよ。
0919デフォルトの名無しさん
NGNGアホか。
Cのライブラリの量なんてたかが知れてる。
良く使う関数なんてのは決まってるし。
0920デフォルトの名無しさん
NGNG汗の対象物に関してあんまり大した知識を持ってないで適当にやってるんでそ
0921デフォルトの名無しさん
NGNGメモリや他のレジスタを
使わずに交換するのって
どうやったっけ。
XORとかNORとか使ってや
るんだとおもうんだけど。
0922デフォルトの名無しさん
NGNG0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNGそれはデバイス依存じゃないか。
0925デフォルトの名無しさん
NGNGアセンブラ自体は簡単なんだが、それを実際に使うためには
対象物についての知識が他の言語よりも必要だよなぁ。
0926デフォルトの名無しさん
NGNGa ^= b;
b ^= a; /* b = a ^ b ^ b = a */
a ^= b; /* a = a ^ b ^ a = b */
こんなかんじかぴょん。たしかめてないけどぴょん…。
0927デフォルトの名無しさん
NGNGa = 1100
b = 0101
a ^= b => (a = 1001)
b ^= a => (b = 1100)
a ^= b => (a = 0101)
交換できてます。
0928926星人
NGNGそれなりにアセに熱いサイトったら、へるみさんとこですかぴょんね。
アセプログラマじゃないぴょんけど、頭の体操しながらよく見に行くぴょん。
http://homepage1.nifty.com/herumi/
0929デフォルトの名無しさん
NGNGxorで同じ値は交換出来ずにバグと格闘すると言う罠。
0930デフォルトの名無しさん
NGNGって違ったかな?何か駄目なパターンがあった気がしたんだが。
引き算なら浮動少数でも交換出来るということを残して逝って来ます。
0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNGa = b - a
b -= a
a += b
0933デフォルトの名無しさん
NGNG同じ値ではなく、同じモノを交換しようとすると値が0になって消えてまう、って奴かな。
0934デフォルトの名無しさん
NGNG春なのに北風が吹くんですけど
0935デフォルトの名無しさん
NGNG春なのに北風が吹くぴょん。
0936デフォルトの名無しさん
NGNGで便利なtipってないの?
0937
NGNG構造体やクラスでは扱えない不定形データをソースのまま
連続してメモリに配置・生成できるのはいまのところアセンブラしかない。
0938デフォルトの名無しさん
NGNG自分でさがせ
0939デフォルトの名無しさん
NGNGそれ、どういうデータなのか、カナーリ興味ある。
教えてくれ。
0940デフォルトの名無しさん
NGNGインタプリタのコード。
0941デフォルトの名無しさん
NGNGネットワークバイトオーダまで考慮してくれるといいんだけどね
0942デフォルトの名無しさん
NGNG配列で領域確保するのと大差ないと思うが。
0943デフォルトの名無しさん
NGNGc なら reallocの連打でなんとかなるかも、とか思ってしまった。
0944デフォルトの名無しさん
NGNGアセンブラのサンプルちょーだい
http://pc.2ch.net/test/read.cgi/tech/1016445795/
アセンブラのプログラムですけど
http://pc.2ch.net/test/read.cgi/tech/1011120676/
【Cを】GUN Assembler【極める】
http://pc.2ch.net/test/read.cgi/tech/1015895034/
これを再利用する? それとも専門スレをたてる?
0945デフォルトの名無しさん
NGNGこれをリサイクルしようじゃないの。
0946
NGNG>>942
0947デフォルトの名無しさん
NGNGデータにラベルつけてGOTO命令入れたり出来ないじゃん。
0948デフォルトの名無しさん
NGNG冗談はよしてくれ
0949仕様書無しさん
NGNGなんで?おなじような話題だから統一してもいいでしょ。
0950デフォルトの名無しさん
NGNG死滅寸前のアセンブラを今まで必死こいて勉強してきた俺って一体・・・。
でどうよ?
0952デフォルトの名無しさん
NGNG2本目作れば良いのでは?
0953デフォルトの名無しさん
NGNG特定の処理系である GNU as を前面に打ち出したスレでは、ちと趣旨が違うと
思われ。
0954デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1015895034/l50
を使うのもなかなかだと思うけど、"Assembler"は「アセンブラ」と違って、
日本人には直感的に訴えにくいと思う。
ただ、>>950のようなスレタイトルだと、煽りや荒らしが心配。
0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNG0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNG類似スレが立ちまくると思われ。
アセンブラ… (゚д゚)ウマー
に1票。
0959デフォルトの名無しさん
NGNGでイイような気もするが。
0960デフォルトの名無しさん
NGNGbyte単位で書き込んでもいいし、どうやってもできるけど?
0961デフォルトの名無しさん
NGNG#n・・・よりは、n本の方が・・・・・
0962デフォルトの名無しさん
NGNGその □□■□
その □□■■
その □■□□
なんて厨っぽい?(w
0963デフォルトの名無しさん
NGNGはどお?
0964デフォルトの名無しさん
NGNG組み込みの人が少ないような気がする。
時代の流れかな。
ちなみに漏れの会社は、未だに新規でZ80互換を使います。
0965デフォルトの名無しさん
NGNGで決定。
0966デフォルトの名無しさん
NGNG新スレ立ててくださいませんか。
0967958
NGNGリとは締りが違う。
0968デフォルトの名無しさん
NGNGオマエガタテロYO
0969デフォルトの名無しさん
NGNG焦るな焦るな(((((;゚д゚)))))落ち着け落ち着け
0970デフォルトの名無しさん
NGNGとか逝ってスレ消費してみるテスト。
0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNG↓
@
 ̄ ̄700 ̄ ̄800 ̄ ̄900 ̄|
|
_____________________________________|__________
海
0973デフォルトの名無しさん
NGNG0974デフォルトの名無しさん
NGNGZ80はまずいかな・・・
アセンブラ… (・∀・)イイ! LABEL 2
とかか。
0975デフォルトの名無しさん
NGNGアセンブラ… (・∀・)イイ!B002
0976デフォルトの名無しさん
NGNG俺が決めるぞ!
>>988さん、よろしくぅ〜。
絶対立ててね!
0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNGいいな、お前ら?
0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG0981まるち
NGNGあと19ですぅ〜〜〜〜
0982デフォルトの名無しさん
NGNGいよいよ来た
0983デフォルトの名無しさん
NGNGきさま、その本を知ってるとは・・やるな
0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG非ノイマン型コンピュータなんて
0986えへへ
NGNGつーかはよ誰か立てろや
0987986
NGNG⊂(`Д´⊂ )⊃≡ <1000ゲットの練習しる!
0988えへへ
NGNGスレッド立てすぎです。。
と出てもーた
0989デフォルトの名無しさん
NGNGブレーキを踏んだ奴(スレ立てた奴)はチキンだな。
0990デフォルトの名無しさん
NGNG0991991
NGNG0992えへへ
NGNGほなな、お前立てろや
アセンブラ… (・∀・)イイ! Part2
前スレ
http://pc.2ch.net/test/read.cgi/tech/1002267809/
でいいから。
0993デフォルトの名無しさん
NGNGキタ━━━(゚∀゚)━━━!!!
0994デフォルトの名無しさん
NGNG0995995
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG<(゚ω゚) <うっ!
( )\
/'>
0998デフォルトの名無しさん
NGNG(゚ω゚)> <はっ!
/( )
<'\
0999デフォルトの名無しさん
NGNG<(゚ω゚)> <うっ!
( )
/'>
1000デフォルトの名無しさん
NGNGv
(゚ω゚)/ <はっ!
/( )
<'\
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。