gpt4 book ai didi

c - C 中的内联汇编 : INT command and C variables

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:41 25 4
gpt4 key购买 nike

我正在尝试使用 C 变量在 C 代码中使用汇编。我的代码如下所示:

__asm { INT interruptValue };

其中“interruptValue”是我从用户那里获得的变量(例如 15 或 15h)。当我尝试编译时,我得到:

Assembler error: 'Invalid instruction operands'

我不知道 interruptValue 的正确类型是什么。我尝试了 long\int\short\char\char* 但它们都不起作用。

最佳答案

INT 操作码不允许将变量(寄存器或内存)指定为参数。您必须使用像 INT 13h

这样的常量表达式

如果您真的想调用可变中断(我无法想象这样做的任何情况),请使用类似 switch 语句的东西来决定使用哪个中断。

像这样:

switch (interruptValue)
{
case 3:
__asm { INT 3 };
break;
case 4:
__asm { INT 4 };
break;
...
}

编辑:

这是一个简单的动态方法:

void call_interrupt_vector(unsigned char interruptValue)
{
//the dynamic code to call a specific interrupt vector
unsigned char* assembly = (unsigned char*)malloc(5 * sizeof(unsigned char));
assembly[0] = 0xCC; //INT 3
assembly[1] = 0x90; //NOP
assembly[2] = 0xC2; //RET
assembly[3] = 0x00;
assembly[4] = 0x00;

//if it is not the INT 3 (debug break)
//change the opcode accordingly
if (interruptValue != 3)
{
assembly[0] = 0xCD; //default INT opcode
assembly[1] = interruptValue; //second byte is actual interrupt vector
}

//call the "dynamic" code
__asm
{
call [assembly]
}

free(assembly);
}

关于c - C 中的内联汇编 : INT command and C variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com