我想一些内嵌汇编代码在我的C代码:内联汇编在C:动态注册
__asm { mov reg,val };
的问题:我要动态地定义寄存器和价值。 我知道'val'可以是用C代码编写的变量,但我不知道如何动态选择寄存器(即根据用户输入寄存器'dh'或'dl'来决定)。
有什么建议吗?
我想一些内嵌汇编代码在我的C代码:内联汇编在C:动态注册
__asm { mov reg,val };
的问题:我要动态地定义寄存器和价值。 我知道'val'可以是用C代码编写的变量,但我不知道如何动态选择寄存器(即根据用户输入寄存器'dh'或'dl'来决定)。
有什么建议吗?
使用枚举和开关在C-代码:
typedef enum
{
R_AL,
R_AH,
R_AX,
R_EAX,
...
} REGS;
...
REGS nReg;
...
switch (nReg)
{
case R_AL: __asm { mov al,val } break;
case R_AH: __asm { mov ah,val } break;
case R_AX: __asm { mov ax,val } break;
...
}
嗯...这将要求您修改在运行时的代码。
__asm { }
构造发生在编译时,所以你以后不能影响它的内容。
当然,self-modifying code并不完全是现代操作系统设置的最简单的方式,所以您将不得不跳过一些环节(缓存刷新,代码位于非可写段中,等等上)。
更新:当然你也许可以在一组预编译的版本之间使用slashmais的技术和switch
,但是我会害怕在那个级别混合代码(注意到破坏注册表)。