インラインアセンブラで非対応の命令を使う方法
わたしのプログラムはインラインアセンブラがかなりの割合を占めるので。 _asm を多用するのですが、仕事では Visual Studio 2005を使ってるのですが、自宅にあるのは Visual Studio 6 なので非対応命令にたまに苦しむことがあります。
そんな時に使えるのが、_emit 疑似命令。
形式は
_asm _emit(8bit値)
例文を見せましょう。
#define emitparam(a) _asm _emit((a &0xff)) _asm _emit(((a>>8) &0xff)) _asm _emit(((a>>16) &0xff)) _asm _emit(((a>>24) &0xff))
#define mov_ebx_cs(a) _asm _emit(0x66) _asm _emit(0x8C) _asm _emit(0x8B) emitparam(a) #define mov_ebx_ds(a) _asm _emit(0x66) _asm _emit(0x8C) _asm _emit(0x9B) emitparam(a) #define mov_ebx_es(a) _asm _emit(0x66) _asm _emit(0x8C) _asm _emit(0x83) emitparam(a) #define mov_ebx_fs(a) _asm _emit(0x66) _asm _emit(0x8C) _asm _emit(0xa3) emitparam(a) #define mov_ebx_gs(a) _asm _emit(0x66) _asm _emit(0x8C) _asm _emit(0xab) emitparam(a) #define mov_ebx_ss(a) _asm _emit(0x66) _asm _emit(0x8C) _asm _emit(0x93) emitparam(a) #define cvttsd2si_eax_esp _asm _emit(0xf2) _asm _emit(0x0f) _asm _emit(0x2c) _asm _emit(0x04) _asm _emit(0x24); |
こんな具合で使えます。
覚えておくと便利かもですね。
はじめまして
Visual Studio 2005 Express Edition
まだダウンロード出来るみたいですね。