1 名前:デフォルトの名無しさん [2006/05/24(水) 01:43:34 ] アセンブラ全般に関するスレッドです。 【前スレ】 アセンブラ… ヽ(゚∀゚)ノフォーウ! pc8.2ch.net/test/read.cgi/tech/1132761638/ 過去ログは>>2 辺り
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 ] まず勉強