[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/24 11:23 / Filesize : 211 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

アセンブラ… (゜□゜) ↑アッー!↓



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 ]
まず勉強






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<211KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef