int main(int argc, char* argv[])
{
int n1 = 1,n2 =3;
int n3 = n1+n2;
__asm
{
mov ax,1000H
mov ds,ax
mov ax,[0]
}
printf("Hello World!\n");
return 0;
}
死在mov ds,ax,请问怎么处理啊

------解决思路----------------------
__asm{} 里的指令说明这是个 dos16 类的程序,你选择错了程序类型?而且,即便是 dos16 类的程序,随意给 ds 复制 1000h 也是不妥当的,那里并不一定是自己程序的空间。
------解决思路----------------------
win32 类的程序当然是不允许这样随意给 ds 赋值的,因为 ds 的含义和 dos16 情景下的已经完全不同。
vc6 不支持 dos16 类型的程序了吧,我没怎么用过它,在其 bin 目录下也没看到有相应的链接程序。
怎么做,取决于你是想学习汇编还是 c/c++, 是做 dos16 类的还是 win32 类的。如果是汇编,就不要在 vc6 里了,masm6 或更高版本的都可以,好像还有些简单集成的环境,如 winasm 或 radasm 什么的,我没用过这些不好评价。如果是 c/c++,dos16 类的以前好像 TC2.0 最广泛,win32 类的话,vc2008 或 vs2010 用得比较多吧。
------解决思路----------------------
保护模式程序如果在ring0不允许给段寄存器赋值,你懂的...