- 1 名前:デフォルトの名無しさん [2006/05/24(水) 01:43:34 ]
- アセンブラ全般に関するスレッドです。
【前スレ】 アセンブラ… ヽ(゚∀゚)ノフォーウ! pc8.2ch.net/test/read.cgi/tech/1132761638/ 過去ログは>>2辺り
- 513 名前:ボケ [2006/09/30(土) 19:15:48 ]
- >>512
早速のご教示ありがとうございます。 ご指摘のdxをedxとし[ebp+4]を[ebp+8]に直してやってみたのですけど、 結果は変わらず、何も表示されなくて ただ改行されただけでした。 Cの参考ソースはけっこうありますけど、アセンブルってほとんどないですね!
- 514 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 20:05:55 ]
- >>513
最後に0x0aも出力してみれ。
- 515 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 21:58:20 ]
- >mov ecx, esp ; 書き込むバッファ
ここ間違っているのでは 既に40引いてしまっているのに・・・
- 516 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 22:04:24 ]
- lea ecx,[ebp+8]とかじゃね?
- 517 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 22:17:03 ]
- これはひでえ。釣り…なのか…?まあいいや。
putcharの先頭部分は push ebp ; espじゃねーぞ mov ebp, esp の間違い。それに伴ってretの前も pop ebp に修正。 sub esp, 0x40 では 0x40 も引く必要ない。0x4で十分。 「最初のパラメータ」コメントの次の mov dl, bl は何やってんのか意味不明。 ここは mov [ebp-4], ebx に変更。 putcharというからには出力文字数は1文字だろ。mov edx, 1 に修正。
- 518 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 22:34:25 ]
- > Cの参考ソースはけっこうありますけど、アセンブルってほとんどないですね!
だったらC言語で書いてみるべし。 /* putchar2.c */ #include <unistd.h> void putchar2(int ch) { write(1,&ch,1); } int main(void) { putchar2('A'); putchar2('B'); } そしてこいつを -S スイッチつけてコンパイルしる。 $ gcc -S putchar2.c コンパイラがどんなコードを吐くか、自分のものと見比べるべし。 最適化オプションも併せて指定するといいかもな。
- 519 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 22:37:26 ]
- gccの最適化は最初は知らないほうがいいんじゃないかw
- 520 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 22:40:35 ]
- どうして?ちょっとだけでいいから教えて・・
- 521 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 22:48:43 ]
- そしてICCとか最近のVC++で最適化コンパイルしてしまって余計混乱すると。
- 522 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 22:53:44 ]
- こんなガリガリのコードじゃたいして最適化できねぇw
putchar2はwriteをコールするだけだから関数の存在が消えてしまう可能性はあるが。 >>520 高度な最適化コンパイラは凡人の考えの及ばぬような超変形型ロジックを組むことがあるから。
- 523 名前:ボケ mailto:sage [2006/09/30(土) 22:59:17 ]
- >>517
釣できるほどのウデがあればいいんですけど… 貴方の仰る通り、>511の投稿には誤りがたくさんありました。 言われた通りにやったら AB と表示されました! 改行はしないみたいですけど、 改行は組めますので、後は簡単です。 Thanks
- 524 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 23:37:48 ]
- >>522
ふ〜ん
- 525 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 01:50:05 ]
- >>522
コンパイラ程度の最適化が超変形? じゃあ人が書いたコードは読めねぇなw
- 526 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 02:10:08 ]
- いや、人間様がそれ以上にド汚い変形かますことができるのも確かだが、
きょうびのコンパイラが超変形かますのは事実だろ。 何を噛み付いてるんだ。 カルシウム足りないのか。
- 527 名前:・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 mailto:sage [2006/10/01(日) 02:25:38 ]
- i *= 32;
を add eax, eax; add eax, eax; add eax, eax; add eax, eax; add eax, eax; に展開するコンパイラとかな。
- 528 名前:デフォルトの名無しさん [2006/10/01(日) 02:30:21 ]
- そんな大した事無いレベルの最適化でグダグダ言うなよ
- 529 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 02:39:09 ]
- VC++やICCの定数除算の最適化はなかなかエグかった気がするが
- 530 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 03:04:16 ]
- 漏れはVC2005のたらい回し関数でたまげた。
- 531 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 03:36:33 ]
- >>527
GCCでは無数にある最適化オプション組み合わせていくら頑張ってもシフトだった。 -O0ですらシフトだったw VC++のリリースコンパイルでもシフトだから、それが最善じゃないのか?
- 532 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 05:26:38 ]
- mov eax,dword 051eb851fh
imul ecx sar edx,byte 005h mov eax,edx shr eax,byte 01fh add edx,eax; / 100 これとか実行してみるまで何やってるかわからなかった(VC6)。
- 533 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 05:38:03 ]
- >>527
いや、それ普通。 VCのそれは、シフトが異常に遅い某CPUに配慮したものと思われ。 多分だけど。
- 534 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 09:07:13 ]
- P○n4は*32でもシフトより加算の方が早いのか?w
- 535 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 09:27:21 ]
- >>534
ちょっと上くらい読めや>507-509
- 536 名前:・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 mailto:sage [2006/10/01(日) 14:54:18 ]
- Pen4ではshlのレイテンシは4クロック、addは0.5クロック
依存関係チェインが深い場合は加算を繰り返した方ほうが早い VCじゃなくて、ICCの-QxWとか-QxNとかのPen4専用オプションだったような >>532 除算はクロック数やたらかかるから定数積算とシフトに置き換えるのは常套手段
- 537 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 17:29:21 ]
- 常套手段て…そういう裏技があるのなら標準でALUにそのロジックを積んで
もらった方がどれだけわかりやすいことか。 あるいは除算命令でこのシーケンスと同じμop生成するとか。 書きたいことはまだあるけどこれ以上はちょっとスレ違いになるので遠慮しよう。
- 538 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 17:53:12 ]
- いや、除算を他の演算に置き換えるロジックってすげー大変なんだが。
何で割るかによって全く違うロジックになるから。 そんなもんにトランジスタ突っ込む余裕なんかない
- 539 名前:デフォルトの名無しさん mailto:sage [2006/10/01(日) 18:33:31 ]
- >>532は>>529と繋がっていたのか、気づかなかった。
定数除算限定で、しかも最適化のタイミングはコンパイル時じゃないといけない 程度に複雑なアルゴリズムなのか。 随分と頓珍漢なことカキコんじまったな(恥
- 540 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 23:19:27 ]
- テキストエディッタで.asmファイルを作成してコマンドプロンプトでアセンブルしようと思ったのですがうまくいきません。
ml〜コマンドは合ってるはずなのですが。 知恵をください。 XPSP2です
- 541 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 23:23:42 ]
- >>540
それだけの情報で何かわかると思ってんのか。 せめてエラーメッセージくらい貼れよ。
- 542 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 23:31:03 ]
- 'ml' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ってなります。
- 543 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 23:32:22 ]
- >>542
アホか。パス通してないだけでないか。
- 544 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 23:46:16 ]
- 先生できませnorz
- 545 名前:デフォルトの名無しさん mailto:sage [2006/10/05(木) 05:03:25 ]
- アセンブラはちゃんとインストールされてるのか?
質問から察するに、それすら出来ていなさそうな気がする。 WinXPのDOS窓からの操作なら、DOS窓開いたらまずこのコマンドを打ち込む。 > set Path=%Path%;(ml.exeのあるディレクトリのパス) 開くたびにこれを入力するのが面倒くさいならバッチファイルに書くなり GUIから環境変数に登録するなり何なりと。
- 546 名前:デフォルトの名無しさん mailto:sage [2006/10/05(木) 20:38:09 ]
- 先生無事できますた。ありがとん
- 547 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 10:06:06 ]
- 割り算が理解できん。
なんであんなことになってんの?
- 548 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 11:35:36 ]
- その割り算は>>532のことか?
1ワードが無限のビット長だとすると、原理的には x / 100 == (x / 100) << 32 >> 32 という当たり前の恒等式を巧みに利用する。 ここでは 2のx乗 を 2^x と表現するので、そのつもりで。 x回の左シフトは、算術的には *(2^x) を意味する。 その性質を利用すると、右辺は => x / 100 * (2^32) >> 32 => x * ((2^32) / 100) >> 32 と変形できる。最適化のとき予め (2^32) / 100 を計算しておく。 この定数をnとおくと、除算の商は (x * n) >> 32 で求めることができる。 つまり定数の除算は乗算とシフトに変換できるというわけ。 実際はビット長が無限大ということはないし符号も考慮しないといけないので これよりも少し複雑な処理になる。
- 549 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 12:14:56 ]
- 精度が落ちていいなら
inc ecx mov eax, dword 028f5c28h imul ecx でedxに解が得られないかな。
- 550 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 12:35:00 ]
- 無符号整数除算ならね。
- 551 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 20:35:59 ]
- ん?無符号型ならimulじゃなくてmulじゃね?
- 552 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 12:57:52 ]
- このスレが適当かどうかわからないんですが。
VC++の最適化OFFで生成した以下の絶対値を求めるコード cdq xor eax,edx sub eax,edx これに対応するC/C++のコードがわかるかたいませんか?
- 553 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 13:25:58 ]
- >>552
インラインアセンブラでも使ってない限りも最適化 Off ではそのコードは 出てこないと思うんだが・・・。 abs() を呼んでれば最適化 On の時そのコードになるよ。
- 554 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 13:59:52 ]
- >>553
/Oiオプションでabsが上記の命令に展開されたのを確認しました。 最適化はOFFだと思ってたのですが、一部だけ有効になってるのかもしれません。 (バイナリとPDBファイルしかないので詳細不明) ありがとうございました。
- 555 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 17:48:43 ]
- >>554
/Oiって思いっきり最適化オプションの一部だろ。
- 556 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 18:26:42 ]
- >>552-555
ワロタw
- 557 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 09:14:28 ]
- OiOi
- 558 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 13:59:22 ]
- RS-232C?
- 559 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 15:34:13 ]
- どっちかっつーと丸井
- 560 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 16:21:15 ]
- 丸井って、クレジット詐欺って意味でしょ?
- 561 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 22:19:52 ]
- >>560
訴訟の元ハケーン
- 562 名前:デフォルトの名無しさん [2006/10/12(木) 22:34:02 ]
- 訴訟あげ!?
- 563 名前:デフォルトの名無しさん mailto:sage [2006/10/13(金) 13:55:12 ]
- 16ビットしか知らんが、みんな何に使ってるの?
やっぱインラインかな
- 564 名前:デフォルトの名無しさん [2006/10/13(金) 15:49:03 ]
- C言語からアセンブラ語に変換するにはどうすればいいですか??
分かりやすくお願いします.
- 565 名前:デフォルトの名無しさん mailto:sage [2006/10/13(金) 15:54:22 ]
- コンパイラにアセンブラ語で出力するようにオプションを付ける。
- 566 名前:デフォルトの名無しさん mailto:sage [2006/10/13(金) 15:54:28 ]
- GCCなら-Sとか
- 567 名前:デフォルトの名無しさん [2006/10/13(金) 15:58:20 ]
- それはMPLAB IDE上でできますか??
- 568 名前:デフォルトの名無しさん mailto:sage [2006/10/13(金) 16:07:08 ]
- アセンブラ語て…新語捏造するなやorz
本当はアセンブリ言語ってんだ。俗的にアセンブラでも通用するが。
- 569 名前:デフォルトの名無しさん mailto:sage [2006/10/13(金) 16:10:51 ]
- お前タン、実はマルチでつか?そんなことしたら駄目だお(AAry
- 570 名前:デフォルトの名無しさん mailto:sage [2006/10/13(金) 17:20:51 ]
- >>568
JISでは「アセンブラ言語」
- 571 名前:デフォルトの名無しさん mailto:sage [2006/10/13(金) 18:50:01 ]
- まじで?!
- 572 名前:デフォルトの名無しさん [2006/10/14(土) 16:55:38 ]
- 今学校の授業中です…
キーボードから3個の整数a、b、cを入力してスタックにセットし、これらの整数のうち最大整数をディスプレイに出力せよ。ただし、最大整数をセットするための変数maxもスタック上に作ること。 これが出来ないと帰らせともらえませんが、全くわかりません。どなたか出来る方いましたらよろしくお願いします。
- 573 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 17:21:41 ]
- よし!19時ぐらいまで粘れ!!
その時間位になれば、わかる人がここに来るぞ、たぶん。
- 574 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 17:40:28 ]
- >>572
開発環境、動作環境を書け。 話はそれからだ。
- 575 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 18:05:18 ]
- >>572
どのアセンブラで、どのCPUですか
- 576 名前:デフォルトの名無しさん [2006/10/14(土) 19:18:17 ]
- 19時を過ぎたのですがそろそろ教えてくれません?どうかお願いします。
- 577 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 19:23:08 ]
- >>576
いやだから教えようにも ・・まぁなんだ、頑張れ
- 578 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 19:35:56 ]
- >>576
>>574-575
- 579 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 19:54:20 ]
- >>576
変数って何桁でもいいの?
- 580 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 22:00:50 ]
- しかし、キーのスキャンやら画面表示やらはHWがわからんことにはどうしようもないだろ。
まあわかったところでこんなところに書き込めるようなコード量に収まるとも思えんがw
- 581 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 22:22:37 ]
- >>580
無能自慢はいいから
- 582 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 23:23:22 ]
- >>580
つ【ファンクションリクエスト】
- 583 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 23:44:27 ]
- 週末なのに学校に泊まりかw
- 584 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:01:57 ]
- >>582
それがある環境だと誰が言った?
- 585 名前:デフォルトの名無しさん [2006/10/15(日) 00:17:32 ]
- なんで教えてもらおうとしてるやつがそんなに偉そうなんだ
- 586 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:27:14 ]
- kawaisosu
- 587 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:43:22 ]
- 579はまだ帰れない
- 588 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:55:36 ]
- >>572
void main(){ }
- 589 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:57:03 ]
- >>572
void main(){ int a, b, c, max; scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); if(a < b){ } }
- 590 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:58:06 ]
- うわーん、要はC言語で作って、
gcc -S で、アセンブリ出力したら、 勝手にやってくれるよ。 だって、ローカル変数はスタックなんだからさ。
- 591 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 01:43:47 ]
- >>590
ローカル変数が必ずスタックに確保されるという保証はない
- 592 名前:・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 mailto:sage [2006/10/15(日) 01:49:36 ]
- volatileでおk
- 593 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 03:34:15 ]
- スレ違いの話だが、
「C言語のローカル変数がスタック上に生成される」というのは そういう実装になっている処理系が多い、というだけで C言語の規格上、ローカル変数(自動記憶域期間をもつオブジェクト)は 「スタック上に確保されなければならない」とは一言も書いてない。
- 594 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 11:57:25 ]
- ほれ、糞団子、gccのソースに言及しつつ>>593について熱く語れよ。
- 595 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 12:07:56 ]
- 「&をつけないとレジスタに置かれる可能性があるが、&をつければ必ずメモリ上に置かれる」というのもただの伝説だね。
- 596 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 12:34:44 ]
- そんなことより>>572は帰宅できたのかどうか
- 597 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 14:43:46 ]
- 家がなi(ry
- 598 名前:・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 mailto:sage [2006/10/15(日) 15:18:30 ]
- >>594
そんなしょぼいポンコツコンパイラなんざ使わないからしらねー。
- 599 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 15:20:44 ]
- >>598
gcc-4.1.1で最適化を-O3なんかにしたら最適化が変態すぎてまともにうごかないんだぜ。
- 600 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 17:52:03 ]
- >>598
お前半年くらい前にあーだこーだいってた気がしたが。 ありゃ可変引数リストに関してだったっけ?
- 601 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 18:04:44 ]
- >>598
しょぼいポンコツとは失礼な。 某大学の実習で使用されるシステムはH/Wスタックを装備していないから メモリ空間ぜ〜んぶヒープな環境だ。レジスタはアキュムレータ1つだけ。 で、課題でこのシステム向けに最適化されたANSI Cのサブセットコンパイラを つくれというのがあったが、どんなに凝ったコンパイラを作れど、この場合 スタックを「使わない」のではなく「使えない」んだよ。 団子はそんな環境で四苦八苦したことがないだろうが。
- 602 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 18:07:25 ]
- おっつ失礼。「汎用」レジスタはアキュムレータ1つだけ。
レジスタは他にもあったよ。PCとか間接メモリアドレッシングで使うやつとか。
- 603 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 18:18:49 ]
- >>601
無能自慢はいいから
- 604 名前:・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 mailto:sage [2006/10/15(日) 18:22:58 ]
- >>600
んーでもそういう環境わざわざ選ぶ理由無いよね♪ どんなマイナーCPUですか? ちなみにJava仮想マシンなら汎用レジスタ1本のスタックマシンだよね。 それ以前の問題として、マシン語がどんなのかよくわからんわけで。 それこそ情報処理技術者でよく使われるCOMET2/CASL2かもわからんし。 Cでコンパイルしてアセンブリコード吐かせれば出せるって前提自体が おかしいと思うわけで。 演習で使う端末ってx86とかPowerPC(ようはMac)のほうが多いと思うんだけど
- 605 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 19:39:54 ]
- >>603
ゴメ。自慢するつもりはなかった。ただこういう環境もあるということを言いたかっただけ。 >>604 あるよ。この流れの上流をよく見てみ。>>572で今学校の授業中ですとある。 どんな反則/時代遅れシステムを使わされるかもわからない。高機能から超低次元まで 様々な環境を考慮しなければ質問に答えることは出来ない。 そうでなくてもこの分野はどんな質問がくるか予測しづらい面もある。 肝心の質問者は何も言わず逃げやがったなw
- 606 名前:・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6 mailto:sage [2006/10/15(日) 19:43:12 ]
- まあ、かくいう俺も128本のレジスタと256KBのメモリ空間しかない
某プロセッサコアのシミュレータと格闘してた。 アレは気が狂いそうだ。
- 607 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 20:04:21 ]
- 128本も、一体何に使うんだよorz
人智では管理できんな、この数じゃ。CellとかItaniumとか!
- 608 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 23:36:33 ]
- Sparcも結構変態チックなレジスタ管理していた気がするが。
- 609 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 23:38:24 ]
- やはりデータレジスタ8本アドレスレジスタ8本が最も美しい。
- 610 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 23:46:19 ]
- >>609
レジスタの長さは、それぞれ 1Mバイトぐらいでよろしーですか?w
- 611 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 23:48:43 ]
- 奇数アドレスにアクセスすると転けるCPUなんて嫌いです。
- 612 名前:デフォルトの名無しさん [2006/10/16(月) 00:21:15 ]
- >>611
68000のことですか?
- 613 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 00:27:10 ]
- 中途半端に遅くなって動かれるくらいなら落ちてくれた方がいいけど。
|

|