1 名前:デフォルトの名無しさん [2006/05/24(水) 01:43:34 ] アセンブラ全般に関するスレッドです。 【前スレ】 アセンブラ… ヽ(゚∀゚)ノフォーウ! pc8.2ch.net/test/read.cgi/tech/1132761638/ 過去ログは>>2 辺り
902 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 02:50:44 ] >>900 もしかして 00000011 ってなると思ってる
903 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 03:28:06 ] >>902 CFが1で、00000010になるのではないかと。 >>901 あーそっか。-63か-64かは知らないが、絶対値がこれ以下なら 上から2番目のビットも1だから負のままだし、 絶対値がそれ以上の場合にはオーバーフローになるわけね。 tnx.
904 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 01:03:12 ] 「アセンブリ言語の教科書」読んでてよく分かんないのだけど、 MOV AH, 4CH INT 21H とシステムコールを利用した時、スタックに値があれば、 終了するのではなく、その値のアドレスに飛ぶのでしょうかね? Cで例えるなら、exit()でなくreturn相当なのかな。
905 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 03:40:16 ] exitであってる exit(AL)になる returnはret
906 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 06:28:00 ] >>904 前提が書いてないから勝手にMS-DOSと仮定するが、 そのシステムコールではスタックは関係ない。
907 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 21:23:33 ] >>905 >>906 どうもです。&& 環境書いてなくてすまんかったです。 しかし、exitであるならば、あの本のコードは少し変なのかな。 ……と思ったら、web上の正誤表見たら訂正されてたorz
908 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 17:26:54 ] #define EMULATE_WINDOWS while(1) { __asm__("cli hlt"); } ちょwwww
909 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 17:31:25 ] 何ですかそれは
910 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 17:33:45 ] あてずっぽで言うと、 EMULATE_WINDOWSを展開すると、haltするコード だが、笑い所がいまいち分からない だってコードの使い所が分からない
911 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 17:36:05 ] Windowsのエミュレート=ハングアップっていいたいんだろう。 面白くもなんともないが。
912 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 19:45:29 ] アセンブラ覚えたての消防がやってる。
913 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 12:29:15 ] 特定の並びの特権命令をトラップしてエミュレーターに移行するんだろ よくある実装だ
914 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 20:41:18 ] 「初めて読む8086」読んでるんだけど、 linuxなんでdebugコマンドが無くて試せず辛い。 同じようなコマンドにはどのようなものがあるでしょうか。
915 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 23:05:52 ] >>914 たぶん期待する物はない。 gdbはそういう用途では使いものにならんからのう。 adbとかたまに欲しくなりますな。
916 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 00:21:17 ] 言われて初めてadbが無いことを知った。 昔のunixには標準で入ってたんだがなぁ。ccが消えた頃から無くなったんかねぇ。
917 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 02:13:06 ] >>915 うーん、そうなのですかぁ。 なんとも残念無念。
918 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 21:40:54 ] フリーのDOSはいろいろあるけど、その中には1つくらいDEBUGを持ったものもないか?
919 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 21:51:01 ] つ ttp://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/debug/
920 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 22:07:35 ] つーかDOS上で動くdebug互換(?)デバッガなら結構ある。
921 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:12:45 ] こんばんはこんばんは! 初級Javaプログラマだけど アセンブラを勉強するための環境って最近はなにが多いの? アセンブラってCPUによって違うんだよね? x86系がほとんどなの? 64bitのはまた書き方違ってくる? ? ? ?
922 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:46:02 ] 俺はアセンブリの勉強はCASLだったな 初心者向けの書籍がこれほど多いアセンブリ言語も無かろう
923 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:11:16 ] >情報処理技術者試験の教材用のアセンブリ言語。 >正式名称は,CASL II(きゃすうるつー)。 へぇー でも実用的じゃないアセンブリよりも、Intel系のアセンブリをやったほうが いい気がするんだけど、どっちでも勉強になるからかわんねって感じなのかな
924 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:25:55 ] CASL II は午後のテストの点稼ぎになるからある意味実用的。 x86のアセンブラは今や一部の人を除いて利用される頻度は少ないのである意味あまり実用的でない。
925 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:27:26 ] どっちも大した役に立たないという点では似たようなもんだな。
926 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:33:26 ] んじゃあ、いま一番人気のアセンブラはなに?
927 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:40:58 ] CELL。 つーか、誰かやってくれ。今なら給料出すから。
928 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/14(水) 01:44:08 ] フィックスター社員乙 x86アセンブラだろ常識的に考えて。
929 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:44:25 ] あぁPS3にものってるやつか でも、初心者には敷居がたかそうだなぁ
930 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:56:34 ] まあでもx86あたりもMMXやSSE使いたい程度ならemmintrin.hで済むしなぁ。
931 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:00:01 ] x86は人気つーより手近なPCで出来るから数が多いだけだろ。
932 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:03:56 ] これからゲームプログラマになるならCELL?
933 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:14:40 ] >>932 普通はコンパイラでやるだろ。 PowerPC系のアセンブラも覚えておいて損はないだろうけど、 これから未来永劫CELLが使われ続ける訳でもなし。
934 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/14(水) 02:20:32 ] まあ最初はCOMET2/CASL2でいいですね
935 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:24:01 ] まあ、バイナリエディタで機械語直書きからアセンブラ、コンパイラ組み込み関数までいろいろ書き方はあるけど、 自分が使うCPUにどういう命令があって、その実行にどれだけのコストがかかるかという知識がいらなくなる時代はまだ当分こないだろうな。 重要なのはそういう知識であって、アセンブラの文法とか機能はわりとどうでもいい。
936 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:25:59 ] そういう時代がきちゃったら、プログラマは廃れちゃうな 実力が
937 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 10:06:54 ] CASL2のバイブル的な本ってどれですか。 入門書とかじゃなくて。 詳しく買いてるやつ。
938 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 13:03:47 ] 最近やたらめったらいろんなアーキテクチャの仕事があるんで インストラクションセットを覚える暇すらない みんな8bitとか16bitとかだけど 命令表を斜め読みして 「げ、左シフトねーじゃんこのCPU」とか 「符号反転ねーよ」とか 「乗算命令じゅーよー」だの 「わは。レジスタ4つ、こっちは32個ー」とか言いつつテンパってる
939 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 13:55:11 ] >>938 でも一つもアセンブリ齧ってないとそれも判らないんだよね
940 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:04:08 ] >>938 たぶんそう思ったヤツが高級言語作ろうと思ったんだろうな
941 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:28:30 ] >>938 4つのせりふのうち3つは何だかわかった。 orz
942 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:22:05 ] しかもハーバード型、ノイマン型も満遍なく取り揃えられておりますorz
943 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:04:01 ] そだ |------、`⌒ー--、 れが |ハ{{ }} )))ヽ、l l ハ が |、{ ハリノノノノノノ)、 l l い |ヽヽー、彡彡ノノノ} に い |ヾヾヾヾヾヽ彡彡} や !! /:.:.:.ヾヾヾヾヽ彡彡} l っ \__/{ l ii | l|} ハ、ヾ} ミ彡ト 彡シ ,ェ、、、ヾ{{ヽ} l|l ィェ=リ、シ} |l lミ{ ゙イシモ'テ、ミヽ}シィ=ラ'ァ、 }ミ}} l ヾミ  ̄~'ィ''': |゙:ー. ̄ lノ/l | | ヾヾ " : : !、 ` lイノ l| | >l゙、 ー、,'ソ /.|}、 l| | :.lヽ ヽ ー_ ‐-‐ァ' /::ノl ト、 :.:.:.:\ヽ 二" /::// /:.:.l:.:. :.:.:.:.:.::ヽ:\ /::://:.:,':.:..:l:.:. ;.;.;.;.;;.:.:.:.\`ー-- '" //:.:.:;l:.:.:.:l:.: 難しい問題ほど、解けると達成感あるのよね。
944 名前:デフォルトの名無しさん [2007/02/17(土) 21:49:42 ] extern unsigned int crcTable[]; unsigned int updateCRC32( unsigned char *src, unsigned int size, unsigned int crc ) { while ( size-- ) crc = ( crc << 8 ) ^ crcTable[ ( crc >> 24 ) ^ *src++ ]; return crc; } 誰かこれを高速化して下され。 Cの範囲じゃやはりこれが限度っぽい。 後はアセンブラしかなさそうなのです。
945 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/17(土) 22:05:55 ] せめてここまでコード最適化してからだね。 アルゴリズムの改良を試みずにアセンブラに頼るのは知性の敗北 www.intel.co.jp/jp/developer/technology/magazine/communications/slicing-by-8-0306.htm コードはこちらからどーぞ sourceforge.net/projects/slicing-by-8
946 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 22:26:40 ] 移植性のないポインタ変換とエンディアンの決め打ちがあるから どちらかというとアセンブラで書くべきアルゴリズムだけどな
947 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 22:35:18 ] >>937 CASLなんて通過した後は一切触らないから 毎年IPAが配ってる案内書に付属してる仕様書だけで十分。 命令が読めりゃ後は何も困ることないでしょ。
948 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 05:22:21 ] >>944 のコードのままでも、do whileにしただけで1命令は速くなるね。
949 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 06:47:01 ] mov eax, crc mov ecx, size mov esi, src rep crc32
950 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 08:06:08 ] >>948 処がだ、最近のコンパイラはforに特化した最適化をすることが多いから一概には言えない。
951 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:09:14 ] 最近のコンパイラは賢いからなぁ ていうかCPUの内部が複雑杉
952 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/18(日) 14:33:51 ] >>949 Nehalemキター
953 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:50:04 ] コンパイラ何よ?
954 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 07:54:37 ] ファミ通にアセンブラ経験者の求人が乗っててひいた
955 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 18:22:15 ] アセンブラですか・・・漫画は読んだんだけどOKですかね? とか? Z80でいいなら・・・(・∀・)
956 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 20:26:41 ] いまさらZ80みたいな変態CPUは無いだろう。
957 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/20(火) 00:44:35 ] どうみてもCell一択です Wiiでもやるんかな、性能稼ぐために
958 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 02:09:12 ] Wiiは既に死に体だからアセンブラ駆使してまでゲーム作んないぞ。
959 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2007/02/20(火) 02:54:02 ] >Wiiは既に死に体だから それはひょっとしてギャグで言ってるのか?
960 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 04:53:08 ] >>956 川崎の石は現役ですよ。日立の64180はさすがに作ってないみたいだけど。
961 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 06:07:13 ] >川崎の石 あの変態なZ80に、更に変態なメモリ管理命令増やした奴だっけ? #いや、割りと好きですがw >>957 この前は漏れがそう書いたら社員乙とか書かれた気がするが……
962 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 06:52:22 ] >>957 今時アセで組む必要があるなんて 余程余裕のない組み込みか Cellみたいな変な石使う時だろうしそうかもね
963 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 08:31:10 ] 質問です。ml.exeのインラインアセンブラを使って汎用レジスタと セグメントレジスタの値を表示したいのですが、次のようなコードで おkですか? int eaxv, ebxv, ecxv, edxv, esiv, ediv, ebpv, espv; wchar_t csv, dsv, ssv, esv, fsv, gsv; eaxv = ebxv = ecxv = edxv = esiv = ediv = ebpv = espv = 0; csv = dsv = ssv = esv = fsv = gsv = 0; __asm { mov eaxv, eax; mov ebxv, ebx; mov ecxv, ecx; mov edxv, edx; mov esiv, esi; mov ediv, edi; mov ebpv, ebp; mov espv, esp; mov csv, cs; mov dsv, ds; mov ssv, ss; mov esv, es; mov fsv, fs; mov gsv, gs; } printf( "EAX=%08X EBX=%08X ECX=%08X EDX=%08X\n", eaxv, ebxv, ecxv, edxv ); printf( "ESI=%08X EDI=%08X EBP=%08X ESP=%08X\n", esiv, ediv, ebpv, espv ); printf( "CS=%04X DS=%04X SS=%04X ES=%04X FS=%04X GS=%04X\n", csv, dsv, ssv, esv, fsv, gsv );
964 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 10:36:56 ] 片っ端から変数に代入しようとすると、結局レジスタを消費してしまって正しく表示できないと思われ。 全部纏めてでなく、一個ずつやらないとダメなんでない? #つーか、デバッガで見ることはできないのか?
965 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 15:47:34 ] >944 速いかどうかは、解らないが、とりあえず国産CISCCPU(32bit?)の場合 #pragma PARAMETER update32(A0,R3R1,R2R0) ---- _updateCRC32: $updateCRC32: PUSHM A1 __loop: MOV.W R2,A1 SHL.W #-8,A1 XOR.B [A0],A1 SHL.L #2,A1 ; Long Index SHL.L #8,R2R0 XOR.L _crcTable[A1],R2R0 ADDX #1,A0 SUBX #1,R3R1 JNZ __loop POPM A1 RTS
966 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 18:50:36 ] >>964 スタックに突っ込めばいいんじゃないかな。 でもってespを適当な構造体のポインタに格納したりして。
967 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 19:54:37 ] >>963 ml.exeのインラインアセンブラってなんだよ。 等の細かいツッコミは置いといて。 表示するだけならそれで良い。 アセンブリ出力(VC++なら/FAs)を出して確認すれ。
968 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:42:56 ] インラインasm使う必要すらないじゃん
969 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 02:43:28 ] >>964 ,>>966 ,>>967 ,>>968 みなさん、貴重なアドバイスをありがとうございます。 .asmファイルを見てみると、インラインアセンブラに対応するコードは 下のようになっていました。 余分な処理はないようなので、一応問題なくレジスタの内容を ストア(?)できているようです。 mov DWORD PTR _eaxv$[ebp], eax mov DWORD PTR _ebxv$[ebp], ebx mov DWORD PTR _ecxv$[ebp], ecx mov DWORD PTR _edxv$[ebp], edx mov DWORD PTR _esiv$[ebp], esi mov DWORD PTR _ediv$[ebp], edi mov DWORD PTR _ebpv$[ebp], ebp mov DWORD PTR _espv$[ebp], esp mov WORD PTR _csv$[ebp], cs mov WORD PTR _dsv$[ebp], ds mov WORD PTR _ssv$[ebp], ss mov WORD PTR _esv$[ebp], es mov WORD PTR _fsv$[ebp], fs mov WORD PTR _gsv$[ebp], gs
970 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 14:15:18 ] WindowsだったらGetThreadContextで一発というオチ。
971 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 14:40:27 ] GetThreadContextを自スレッドに呼び出すと呼び出しは成功するけど中身の保証は無し
972 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:05:17 ] 最近勉強中でちょっと悩みがあります。 メモリのアドレスを特定のルーチンだけで利用するんですが、 スタックに入れてpush,popするべきなのか、 メモリから読んでまた書き戻すべきなのか、 どっちがいいんでしょう? 値を更新するので所謂Cのポインタなのですが。 やはりスタックの方が若干速そうなのですがその内バグりそうです。 慣れるまではメモリを使うべきでしょうか?
973 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:10:01 ] >>972 レジスタ
974 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 01:12:27 ] 65816アセンブラの勉強中で詰まってしまいました。 例えば AD E0 11 LDA で11E0の値が260以上ならXにジャンプ 260以下ならYにジャンプという命令はどのようにしたらいいですか? AD E0 11 CD 60 02 F0 04 5C XX XX XX 5c YY YY YY とやりましたがゼロフラグを使っての分岐なので 260だったときでした。 「260以上はXにジャンプ、260以下はYにジャンプ」の分岐の方法を 何方かご教授下さい。
975 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 01:34:34 ] >>974 65816は知らんが、ニモニック表をよく見てみ。 条件分岐命令にゼロフラグチェック以外にもキャリーフラグチェックのがあるはずだから。
976 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 03:01:21 ] >>974 おまい、OKWaveでも同じこときいてたな。>>975 の説明でも 理解できなさそうだ。 なあ、206以下と260以上で分けるていってるけどさ、「260」のときは どっちに分岐させんだいw
977 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 08:47:17 ] >>975 65816ではこうやって覚えとけばいい。 同じ(A = CMP xxxx):BEQ F0 以外(A ≠ CMP xxxx):BNE D0 未満(A < CMP xxxx):BCC(BLT) 90 以上(A ≧ CMP xxxx):BCS(BGE) B0 あと、CD 60 02だとCMP $260、つまり$260番地の内容との比較になる。 即値と比較がしたかったらC9 60 02とやるべき。
978 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 09:25:36 ] >>975 フラグの意味がわかってませんでした。 >>976 260以下と260未満でした。 すみません。 >>977 ありがとうございます! 無事260以上の命令が出来ました。 皆様お忙しい中有難うございました。
979 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 00:03:34 ] > 260以下と260未満
980 名前:デフォルトの名無しさん [2007/03/17(土) 23:56:27 ] あげ
981 名前:デフォルトの名無しさん [2007/03/21(水) 00:07:46 ] age
982 名前:デフォルトの名無しさん [2007/03/21(水) 17:34:48 ] NASMでSSE3やそれ以上は使えるのですか。
983 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:52:27 ] マクロアセンブラならどんなニモニックだろうと(自分で追加すれば)使える。
984 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 20:25:57 ] まず勉強