1 名前:デフォルトの名無しさん [2007/08/14(火) 17:18:08 ] アセンブラ全般に関するスレッドです。 【前スレ】 アセンブラ… ( ゚д゚)ウッウー pc11.2ch.net/test/read.cgi/tech/1174825173/
632 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:28:44 ] なんか昨今はGoogleする前に2chって思考なのかね 人の脳みそをあんまり安く考えてると、働くようになってから 苦労するんじゃねーかな まあ、半可通の糞ほど教えたがりなんだが
633 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:43:33 ] これがゆとりか・・・
634 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:05:52 ] 普通に勉強してれば命令語一覧とかに載ってるのを知ってそうなものだが・・・ そのうち 「ある命令の実行でフラグがどう変わるか知りたいんですが?」 とかの質問も来るのかな。
635 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:54:57 ] >>632 逆に半可通だからこそそういう疑問が出るんじゃないかな? ビンゴワードを知らないと何回か周辺ワードでググってそれを探さないといけないから意外と難しい。 昔は頭使わなくてもマイコン雑誌の特集とかで載ってて必修みたいなものだったけどさ。
636 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/06/13(金) 21:14:19 ] 実測するためのCソースもIntelが提供してるな。 アレもわかりにくいところにあるけど
637 名前:デフォルトの名無しさん [2008/06/14(土) 01:40:46 ] >>635 > 逆に半可通だからこそそういう疑問が出るんじゃないかな? 半可通の酋長ダんゴ先生をバカにシュルナ!!!!
638 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 03:53:12 ] 知っているのならさっさと教えろやクズどもが。
639 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 09:32:33 ] >>638 あんただれ?
640 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:38:30 ] 俺だよ俺俺
641 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:43:50 ] あちこちで、教えるクンがオナニーしすぎて>>638 みたいな機知外 が本当に増えている
642 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 13:36:40 ] >>634 それも実験して調べるのです(Z80の隠し命令かよ・・・)。
643 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:00:18 ] >>641 それ以上にそいつ等をスルーできないやつ等のほうが増えて内科医。
644 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:11:17 ] おっさんくさいスレになりました
645 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 22:23:13 ] まあアセンブラなんて今時の若い者はあまりやらんからな。
646 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:17:34 ] つPIC
647 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:22:19 ] 最近の若い奴はJVMとCLRのアセンブラ(バイトコード)は結構読めるよ。
648 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:17:07 ] NASM のドキュメントの Appendix B って消えた? あれ便利してたんだが。
649 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:28:15 ] 今時アセンブラの需要はあるのかねえ
650 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:34:13 ] コンパイラベンダにゃ必須だろう。
651 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:36:25 ] エンコーダとか
652 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:40:54 ] ベクトル化ガリガリやりたいなら必要だね
653 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:03:58 ] 組み込みで、ブートローダー書く人とか。
654 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:31:20 ] 高級言語で書けない命令がどれだけあると思ってるんだ?
655 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:10:10 ] ローテート命令。 なんでC言語にはローテート演算子が無いんだ。 何度欲しいと思ったことか…
656 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:13:10 ] ローテートってそんなに速くなかったような気がするよ
657 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:45:22 ] シフトと論理和もしくは加算で書くより速いだろJK 何でもかんでもアセンブラで書きたがるのは昔の厨二病
658 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:47:15 ] 結果をすぐ使わないのであれば うまく並列実行されれば ローテートより速いんじゃね?
659 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:48:59 ] >>657 それがだな、昔シフト系の命令がクソ遅い Pentium4 とかいう CPU があってだな。 x86 の rol/ror 命令使うよりも mmx シフトと mmxor で書いたほうが速いとかいう ふざけたこともあったのだよ。フツーの 32bit の SISD でね。
660 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:00:51 ] つーか、ローテート命令が遅いなんてデマを流さないでほしい。
661 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:53:52 ] >>660 CPU によるけど、ローテート命令が速くない環境はあるよ。 intel の 24896604_j.pdf からの引用だけど、x86 では add : レイテンシ 0.5clk, スループット 0.5clk shl/shr: レイテンシ 4clk, スループット 1clk rol/ror: レイテンシ 4clk, スループット 1clk でー mmx だと pslld: レイテンシ 2clk, スループット 1clk psrld: レイテンシ 2clk, スループット 1clk por: レイテンシ 2clk, スループット 1ckl ね。 SISD で rol/ror より速いっつーのは記憶違いで嘘だったけど。 まーこういう糞な石はメインストリームじゃなければ無視できる のだけど、一時期多数派を占めてたりしたから無視するわけにも いかんのよ。
662 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 03:25:13 ] そんなにCがいいならインラインアセンブラつかえよ
663 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 03:31:41 ] ローテートぐらいならgccの拡張で使えたような気がする
664 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:26:14 ] rol や ror はintrinsicであるんだけどrolxやrorxのようにキャリーと一緒に回すのが無いんだよね
665 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:45:41 ] そもそもCにはキャリーの概念すらないし。
666 名前:デフォルトの名無しさん [2008/06/20(金) 09:47:19 ] Cのソースからアセンブラ吐いたんだけど,Cのソースではhoge(0,1)って引数で関数 呼び出してるけど、アセンブラでは movl $1, 4(%esp) movl $0, (%esp) という風に引数を逆に処理してるのは、どういう意味があるの?ご教示お願いします
667 名前:デフォルトの名無しさん [2008/06/20(金) 09:54:29 ] >>666 悪魔乙 gas の記法だろ。アセンブラによってオペランドを書く順番が違ってくるのさ
668 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 10:02:58 ] いや,オペランドじゃなくて引数の順序だろ. C では良くあること.
669 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 10:05:04 ] >>666 ・スタックは数が減る方に向かって伸びる。 ・その例でも引数1が %esp+0, 引数2が %esp+4 になってるでしょ? ・引数のポインタを取ったとき、スタック上の引数列が配列になるでしょ? hoge(int foo, int bar) を例に取ると int *p = &foo; によって p[0] == foo p[1] == bar となる。 で、このことは、引数不定とか可変長引数を実装するときに すごく都合がいい。スタックトップが必ず引数1になる。 K&Rの頃は引数不定がまかり通ってたし。 なお、>>666 の例では、%esp はあらかじめ減じられていると思われるため movl $0, (%esp) movl $1, 4(%esp) のように引数順に処理することもできるが、コンパイラの都合上それをやっていない。
670 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 11:45:08 ] 処理系によるんじゃないか?
671 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 12:04:24 ] >>666 Cの引数の評価順は特に決められていないので、コンパイラの都合で好きな順序で処理してよいわけだが、 たまたま逆順の方がコンパイラを作りやすかったとか、特に気にしないで作ったらたまたま逆順になったとか、 そんなとこだろうと思うよ 特に意味はないかと
672 名前:デフォルトの名無しさん [2008/06/20(金) 12:12:48 ] 厳格に決まっているわけではなく、 >>669 の述べているような理由などから、私が使っている処理系では引数がたまたま 決まっているということでいいんですか?
673 名前:デフォルトの名無しさん [2008/06/20(金) 12:13:51 ] ↑訂正、 引数がたまたま逆に処理されている
674 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 12:55:25 ] >たまたま逆に いや単に右から左なだけで,逆順とか正順とか決まってないから
675 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:34:07 ] カウントダウン方向で繰り返し処理すれば フラグ見るだけで処理の終わりがわかる
676 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 15:03:55 ] コード生成とスタックに積む都合から言うと、スタックに先に積むほうから 評価をしたいわけだ。 それと、可変長引数のことを考えると、Cの引数は右から左の順で積んだ ほうが都合が良い、ということ。
677 名前:デフォルトの名無しさん [2008/06/20(金) 18:12:47 ] やり方は、複数あるが後々都合が良い ってことですね。ありがとうございます。
678 名前:デフォルトの名無しさん [2008/06/20(金) 18:21:36 ] 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね 富の目キモすぎ。バケモン。身障。DQN男。死ね
679 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 18:45:53 ] 呼出し規約とかは関係してこないの?
680 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/06/20(金) 18:47:45 ] push/pop命令の動きはABI云々じゃなくてCPUの動作仕様だからな
681 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 20:23:35 ] VC++ に限って言うなら、 普通の関数は右から左、 普通のメンバ関数は左から右、 可変長引数を持つメンバ関数は右から左、だな。
682 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 20:25:17 ] Cっていうか、WindowsAPIの仕様に引っ張られてるんじゃね?
683 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/06/20(金) 20:28:54 ] thisポインタ=ecxは何とかならんかったのかと思う まあ、他に無いっちゃないが
684 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 20:29:03 ] PASCALキーワード!!!
685 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 20:57:03 ] VC++のメンバはthisをecxに積んで右からスタックだったはずだが
686 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 22:39:15 ] なんか、引数をスタックに積む順序と引数の評価順序の区別が付いてない 奴がいるな。
687 名前:デフォルトの名無しさん [2008/06/20(金) 22:48:48 ] ↑どういうこと?
688 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 22:49:28 ] >>685 ごめん。まちがえてた。
689 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:59:53 ] 引数の評価順序って決まってたっけ
690 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 01:07:38 ] 68000での質問です。 cmpi.w #$1234, D0 や cmpi.l #$12345678, D0 と同等な事をA0に対しても行いたく思い、 cmpaを使ってみましたが上手くいきません。 なぜでしょうか?
691 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 08:33:30 ] >>687 左から評価して、右から積んでも規約に違反はしてない。 評価した順にスタックに積んで行くほうが楽。 という「都合」が引数の評価とスタックに積む順序に影響しているってこと。
692 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 09:13:13 ] >>690 エスパーはいないぞ! もっと詳しく書け。
693 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 16:40:04 ] >>687 スタックに積まれた引き数の配置は処理系で決まっている。 順番に詰まれるかどうかは分からない。 評価順序も決まっていない。 >>690 > 上手くいきません。 何をやって、どうなることを期待してて、どうなったかを書け。
694 名前:690 mailto:sage [2008/06/21(土) 17:07:42 ] 解決しました。 理由もなんとなくわかりました。 ありがとうございました。
695 名前:690 mailto:sage [2008/06/21(土) 17:15:55 ] お前らの役立たずっぷりに呆れました。 もう二度と来ません。
696 名前:690 mailto:sage [2008/06/21(土) 17:18:51 ] >>695 まあそれが本音ですけどね。 もはや揚げ足取りですし。 ありがとうございます。
697 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 17:23:01 ] なんかね、どこからが釣りだったのかね、もうね
698 名前:690 mailto:sage [2008/06/21(土) 18:27:33 ] 詰まらない偽者がスレ汚ししてすみません。 最終レスは>>695 です。 ありがとうございました。
699 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 18:48:48 ] いいから消えろよクズ
700 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 18:57:46 ] ほっとけ 構うな
701 名前:690 mailto:sage [2008/06/21(土) 19:16:46 ] >>700 まったく同意
702 名前:690 mailto:sage [2008/06/21(土) 20:47:38 ] 誰だお前
703 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 22:33:55 ] もう誰が誰だかわやくちゃなんだけど、休日にわざわざこんなスレにまできて... なんかかわいそうだな。
704 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:35:43 ] Re:> お前はなにを言っているのか
705 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:44:09 ] king、コテ付け忘れてるぞ
706 名前:1stVirtue mailto:sage [2008/06/24(火) 21:10:58 ] Reply:>>705 お前に何がわかるというのか。
707 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:47:33 ] キングさんって、スクリプトですか。??
708 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 10:58:32 ] ん 数学板のking?
709 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 21:27:12 ] いきなりkingネタかよ 数学板以外にもたまーに顔出してるよ、奴は
710 名前:デフォルトの名無しさん [2008/06/30(月) 16:29:09 ] MASM MSからダウンロードしたけど、VC++ Express 2005が必要だと・・・ VC++ Express 2008じゃだめ?なの?
711 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 16:53:44 ] >>710 強制解凍してけば長いファイル名のが出てくるからそれを拡張子exeにリネーム
712 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/06/30(月) 17:07:48 ] もうNASMでえーやん
713 名前:デフォルトの名無しさん [2008/06/30(月) 17:32:54 ] >>711 thnx・・・thnx...... 冷静に考えて そうだ、ここは俊足なレスポンスを期待しちゃいけない、 と思い、 無い頭で考えて、 オーソドックスにプロンプトの指示に従い、 アンインストールをしたところで、 >>711 発見 orz あうぅぅぅ
714 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 17:35:23 ] JWasmってどうなんだろ?
715 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 17:41:44 ] >>712 YASMどうよ?
716 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 19:20:57 ] Yasm www.tortall.net/projects/yasm/ NASM/GAS互換 64bit対応 修正BSDライセンス JWasm www.japheth.de/JWasm.html MASM v6/WASM互換 Open Watcomライセンス
717 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 08:54:17 ] ちょっと使ってみた個人的な感想など: Jwasm: コマンドラインの引数など使い勝手がいいとは言い難い。 特にリンカは最悪で、設定ファイルが必要だとか訳が判らん。 結局、リンカだけ alink alink.sf.net/download.html と そこにある win32.lib を使うことでバイナリ作成した。 その後に使った fasm flatassembler.net/ なら、 単体で実行バイナリまで生成することが判った。 記法も独特ではあるけども、ヘルパのインクルードが充実していて あるAPIの挙動を確かめるようなテスト・ルーチンなんかをスクラッチするには いい感じだと思った。
718 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 17:48:04 ] いや、互換物はオリジナルと比較しないと意味ないでしょ。 あと、wlinkはなんでもできる強力なリンカだよ。libだけ用意すれば(.aでも.libでも食べてくれる) jwasm .\samples\windows1 wlink FORM Windows NT runtime CON F windows1 L kernel32.lib みたいな感じでいける筈。 たしかwatcom本体の方にMSのlink互換の奴(ラッパー?)が入ってる筈だから それの差し替え用なのかもね?
719 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 19:23:34 ] masm32のinc参照してるやつも導入pathを調整すれば同様に jwasm .\samples\windows3 wlink FORM Windows NT F windows3 L kernel32.lib,user32.lib でバイナリは出来るんだけと、これって豆腐窓が出れば成功なのかな? 窓プログラムはソース見てもいまいちわからないorz
720 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 19:58:28 ] lzasmってTASMのideal文法サポートだけで、MASM互換部分はごっそり抜けてるのかな? それとも元々こんなもんなの? 共通ソースってどうやったら書けるんだろうこれ?
721 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 21:02:44 ] masm support なんて書いてないけど
722 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 21:30:44 ] っていうかTASMとMASMの共通ソースってことね。 ローカルラベルとか使わなきゃ出来るんだと思ってた。
723 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 22:30:47 ] TASM,MASM両用にしたい場合 TASMのMASM5.1互換モードだかなんだかを使っていた記憶がある
724 名前:デフォルトの名無しさん [2008/07/05(土) 04:50:49 ] ゲームの解析をしているのですが MOV EDX,exe.00666666 00666666 は XOR AL,31 となっています 近くに1〜31範囲外の定数ビットシフトというコメントが多く使われているのですが どのような処理をしているのかわかりますでしょうか?
725 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 05:19:48 ] 単なるデータじゃないってなんでわかったの?
726 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2008/07/05(土) 15:53:04 ] つかDSに命令書くとDEPに殺されるだろJK萌え〜 その命令らしきものの後にretなりjmpがある?
727 名前:724 [2008/07/06(日) 02:01:18 ] >>725 00666666 はrdataセクションでしたorz MOV EDX,exe.00666666のASCII"41C6tvejeNiWj・・・・"の中身が格納されてるだけでした >>726 MOV EDX,exe.00666666 SUB EDX,EAX CMP EDX,ESI JNB SHORT exe.0050175C 0050175C TEST EDI,EDI 0050175E JNZ SHORT exe.00501764 00501769 MOV EAX,66666667 0050176E IMUL EDX この↓にもジャンプ命令がたくさんあります。リターンはずっと後にでてきます。
728 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 07:03:07 ] うんこい質問で申し訳ないですが、 00401239 |. B9 64000000 MOV ECX,64 0040123E |. F7E1 MUL ECX 00401240 |. 83F8 00 CMP EAX,0 00401243 |. 75 06 JNZ SHORT xxx.0040124B 00401245 |. B8 01000000 MOV EAX,1 0040124A |. C3 RETN 0040124B |> 33C0 XOR EAX,EAX 0040124D \. C3 RETN 関数の末尾のコピペなんですが、 アドレス0x00401239時点でのEAXが0以外で、この関数が1を返す事はあり得ますか? ECX(=0x64)を掛けている理由がよく分からないので、そういう可能性があるのかと思いまして。
729 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 10:26:35 ] eaxの値が0x04000000〜0xf4000000の範囲なら1
730 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 16:44:24 ] >>724 単なる難読化だろw
731 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 04:23:03 ] 初歩的な質問ですが教えてください MOV DWORD PTR DS:[ESI],00400000 例えば、00400000にはアドレスが入っています。この場合、00400000を移動するのか 格納されているアドレスを移動するのか、どちらでしょうか?
732 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 19:34:23 ] // ESIはポインタ *ESI = 400000;