【发布时间】:2011-12-03 10:31:39
【问题描述】:
我正在尝试重新编程指令向量表。这是我使用的代码:
#include <stdio.h>
int a=1;
void func();
void keyboard()
{
printf("\n\nkeyboard!!!\n");
a=0;
asm{iret}
}
int main ()
{
printf("starting...");
func();
return 0;
}
int vectorcs = 0;
int vectorip = 0;
void func()
{
printf("\n*****\n");
asm{
cli
mov ax,0
mov es,ax
mov bx,36
mov ax,word ptr es:[bx]
mov vectorip,ax
push ax
mov ax,word ptr es:[bx+2]
mov vectorcs,ax
push ax
mov ax,cs
mov word ptr es:[bx],offset keyboard
mov es:[bx+2],ax
sti
}
printf("\n%d %d\n",vectorip,vectorcs);
while (a) {
}
asm {
cli
mov es,bx
mov bx,36
pop ax
mov word ptr es:[bx+2],ax
}
asm{
pop ax
mov word ptr es:[bx],ax
sti
}
}
我正在使用 Turbo C++ 3.0 当我尝试运行此程序时,“16 位 MS-DOS 子系统:NTVDM CPU 遇到非法指令。”出现。然后显示 CS、OP 和 IP 寄存器的内容。我无法继续该程序。有什么建议吗?
【问题讨论】:
标签: c assembly dos inline-assembly