我正在尝试在我的 C 代码中内联一些汇编代码:
__asm { mov reg,val };
问题:我想动态定义寄存器和值。我知道'val'可以是用C代码编写的变量,但我不知道如何动态选择寄存器(即根据用户输入决定-寄存器'dh'或'dl')。
有什么建议么?
我正在尝试在我的 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 { }
构造全部发生在编译时,因此您以后不能影响其内容。
当然,自修改代码并不是现代操作系统最容易做到的,所以你将不得不跳过几个环节(缓存刷新,代码在不可写段中,等等)。
更新:当然,您可以switch
在一组预编译版本之间使用 slashmais 的技术,但我害怕在那个级别混合代码(想到寄存器破坏)。