07/02/20 10:36:56
片っ端から変数に代入しようとすると、結局レジスタを消費してしまって正しく表示できないと思われ。
全部纏めてでなく、一個ずつやらないとダメなんでない?
#つーか、デバッガで見ることはできないのか?
965:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/02/20 18:50:36
>>964
スタックに突っ込めばいいんじゃないかな。
でもってespを適当な構造体のポインタに格納したりして。
967:デフォルトの名無しさん
07/02/20 19:54:37
>>963
ml.exeのインラインアセンブラってなんだよ。 等の細かいツッコミは置いといて。
表示するだけならそれで良い。
アセンブリ出力(VC++なら/FAs)を出して確認すれ。
968:デフォルトの名無しさん
07/02/20 23:42:56
インラインasm使う必要すらないじゃん
969:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/02/21 14:15:18
WindowsだったらGetThreadContextで一発というオチ。
971:デフォルトの名無しさん
07/02/21 14:40:27
GetThreadContextを自スレッドに呼び出すと呼び出しは成功するけど中身の保証は無し
972:デフォルトの名無しさん
07/02/23 00:05:17
最近勉強中でちょっと悩みがあります。
メモリのアドレスを特定のルーチンだけで利用するんですが、
スタックに入れてpush,popするべきなのか、
メモリから読んでまた書き戻すべきなのか、
どっちがいいんでしょう?
値を更新するので所謂Cのポインタなのですが。
やはりスタックの方が若干速そうなのですがその内バグりそうです。
慣れるまではメモリを使うべきでしょうか?
973:デフォルトの名無しさん
07/02/23 00:10:01
>>972
レジスタ
974:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/02/23 01:34:34
>>974
65816は知らんが、ニモニック表をよく見てみ。
条件分岐命令にゼロフラグチェック以外にもキャリーフラグチェックのがあるはずだから。
976:デフォルトの名無しさん
07/02/23 03:01:21
>>974
おまい、OKWaveでも同じこときいてたな。>>975の説明でも
理解できなさそうだ。
なあ、206以下と260以上で分けるていってるけどさ、「260」のときは
どっちに分岐させんだいw
977:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/02/23 09:25:36
>>975
フラグの意味がわかってませんでした。
>>976
260以下と260未満でした。
すみません。
>>977
ありがとうございます!
無事260以上の命令が出来ました。
皆様お忙しい中有難うございました。
979:デフォルトの名無しさん
07/02/28 00:03:34
> 260以下と260未満
980:デフォルトの名無しさん
07/03/17 23:56:27
あげ
981:デフォルトの名無しさん
07/03/21 00:07:46
age
982:デフォルトの名無しさん
07/03/21 17:34:48
NASMでSSE3やそれ以上は使えるのですか。
983:デフォルトの名無しさん
07/03/21 17:52:27
マクロアセンブラならどんなニモニックだろうと(自分で追加すれば)使える。
984:デフォルトの名無しさん
07/03/21 20:25:57
まず勉強