インラインアセンブラで非対応の命令を使う方法

わたしのプログラムはインラインアセンブラがかなりの割合を占めるので。 _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);

emit

こんな具合で使えます。
覚えておくと便利かもですね。

関連記事:
_ _asm ブロックでのアセンブリ言語の使用

おすすめ

1件の返信

  1. rom より:

    はじめまして
    Visual Studio 2005 Express Edition
    まだダウンロード出来るみたいですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です