アセンブラではC言語の配列の参照できない!?
http://www.nk.rim.or.jp/~jun/lxasm/asm02.html
より。
例えば次の例ではラベルの宣言が異なりますが, foo equ 1 bar dw 2 mov ax, foo mov ax, bar この場合は ax には定数値が代入され, move ax, [foo] move ax, [bar] この例では,ax には メモリの内容が代入されます. ....
なーる。だから、いつも私のほしかった値とは違った値が代入されていたわけか。なーる。おrz
あれれ?でもVCでのインラインアセンブラの場合はcount[0]のようにしてもレジスタに代入できるんですけど・・・ウーン。なーる。
あれれ?
あ!なーる。MASM形式でだとこうなるわけか。インラインアセンブラとは違うのか。アナルホド。
まぁ、いいや、支離滅裂意味不明御免。
いや、ちょっとまて、
とするとmm1以降がすべて違う値が代入されるのだが・・・(ワタシのデバッガの場合・・・)
_asm movq mm0,abcd[0]
_asm movq mm1,abcd[1]
_asm movq mm2,abcd[2]
_asm movq mm3,abcd[3]
何でだろぉ〜なんでだろぉ〜 おrz!!!!
やっぱりアドレッシングがなんとやらになるのかな?。。。アセンブラよく分からないなり!ムキィ!
解決:やっぱりワタシのあたむぁが残念なだけでした。
uint64 tinpo[16];
という配列があったとして
この配列の
tinpo[3];を参照したい時は
とやっては上手く参照できない。
_asm movq mm4,tinpo[3]
なので、
のように参照する。以上也!
uint64 *ptinpo = tinpo;
_asm{
mov esi,ptinpo
movq mm4,[esi+3*8]
}