1 名前:デフォルトの名無しさん [2007/08/14(火) 17:18:08 ] アセンブラ全般に関するスレッドです。 【前スレ】 アセンブラ… ( ゚д゚)ウッウー pc11.2ch.net/test/read.cgi/tech/1174825173/
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;
733 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 23:41:52 ] それだと誤解を招きそうなので // ESIはポインタ TYPE_T *ESI; ESI = 0x400000; って書いた方が
734 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 23:48:37 ] ポインタじゃなくて、ただのレジスタとメモリ領域。 ポインタって言ってると、わかり辛い。
735 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:19:54 ] >>731 セグメントアドレスがDSの値でオフセットアドレスがESIの値なメモリ領域に十進数の400000を入れているように見える
736 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 10:02:54 ] // DSの説明ははしょるけど DWORD PTRなんだから DWORD* ESI; *ESI = 0x400000; // でええんでないか?
737 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 10:42:06 ] 皆さんありがとうです ESIにデータセグメントのアドレス00400000を示しているということですね ではそのままなら[ESI+8]は00400008でよいのですか?
738 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 11:28:25 ] >>737 だめ
739 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 11:47:50 ] ddebでも落として飽きるまで実験しろ
740 名前:デフォルトの名無しさん [2008/07/13(日) 07:45:00 ] だめだこりゃ
741 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 18:39:18 ] キャリーフラグの反転ができる CPU では、 コイツも使ってやってね(Z80 表記)。 CP 0AH CCF ADC 30H DAA
742 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 13:12:01 ] www.computerworld.jp/topics/vs/115629.html
743 名前:デフォルトの名無しさん [2008/07/18(金) 00:00:59 ] 質問:アセンブラの除算 質問です。アセンブラの除算は、具体的に どのような処理をしているのでしょうか。 「ビット レベルの計算」のイメージができません。 また、除算は ほかの計算と比較して、クロック数を消費するとインターネットに書いてありました。 それが なぜなのか、理解できていません。 おそらく、どのような計算をしているかを把握できれば、理解できるとおもうのですが。 インターネットで「除算 アセンブラ div 」などで検索しましたが、求めている情報が入手できませんでした。 そのため、質問させていただきます。 また、読むべきサイト、書籍などがあれば、教えていただければ幸いです。 よろしく お願い致します。
744 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 00:06:58 ] 除算器で検索
745 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 00:10:28 ] >>743 つ journal.mycom.co.jp/column/architecture/ ここを読んでまるっきり理解できなきゃ筋がないと見なす。
746 名前:デフォルトの名無しさん [2008/07/18(金) 00:40:01 ] ありがとうございます。よんで勉強します。 論理回路の基礎は知っているので、何とか理解できそうです。
747 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 05:25:03 ] ビットレベルの計算って、要するに2進数で筆算してるだけの話じゃないか?
748 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 07:05:38 ] それ前にアセンブラの除算もCの除算もみな一緒だと思うが
749 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 09:00:46 ] >>747 筆算ってこたーない。。
750 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 09:51:37 ] >>749 マジなんか面白く上げ足とっただけか知らんが、イメージは筆算だ。 掛け算も同じ。
751 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 09:56:38 ] その人がどういうモデルで筆算というものを把握してるかに依るだろJK
752 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 10:30:08 ] >>745 の84回で、モロに筆算の図が載っているわけだが
753 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 11:23:14 ] >>751 筆算にモデルもクソもあるか JC
754 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 11:40:04 ] 夕食ってどうやって作るんですか->一例を回答->それは調理だな
755 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 16:51:24 ] CASLの問題のこと聞いてもおk?
756 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 18:43:28 ] レスがどんなアセンブラでも構わないならいいんじゃね? っていうか専門スレないの?
757 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 18:51:47 ] 情報処理試験のあれか、1バイトが16ビットだっけか。
758 名前:デフォルトの名無しさん [2008/07/18(金) 19:26:11 ] おいおい 1バイトは8ビットだろ・・・。
759 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 19:32:52 ] 情報処理技術者試験出題範囲を見る限りでは、1語16ビットとは書いてあるが「バイト」という単語は出てこないっぽい。
760 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 19:38:38 ] >>758 決まってるわけじゃないよ。多いだけ。
761 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:23:51 ] >>760 このスレの住人ならそんなこと百も承知だろう
762 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:36:07 ] ワードアドレッシングマシンなんだよな確か
763 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 22:54:27 ] CASL でシフトによる割り算がまったく思いつきません。どなたかお手本をみせていただけませんか?
764 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:21:16 ] >>763 とりあえず1ビット右シフトを考えてみて。
765 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 02:29:36 ] 昔々あるところに、1byteが6bitや9bitのコンピュータがあってだな…
766 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 04:10:28 ] >>765 自作?
767 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 06:11:10 ] 基本的に1byteは8bitだけど8bitじゃない場合もあるんだっけ? マスタリングTCP/IPでは明確にするためにoctetを使う、みたいなのが書いてあった ちなみに1hydeは156cmで固定 学生の知識だから合ってるか分かんないけど
768 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 09:59:51 ] PDP-10とかだな
769 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 12:53:32 ] > 学生の知識だから合ってるか分かんないけど 156cmをどこで習うんだよ!