小编Iro*_*Pug的帖子

16 位 x86 MS-DOS 实模式下的分段远指针分配

我正在尝试用 C 语言对实模式 MS-DOS 进行编程。使用一些关于游戏编程的旧书作为起点。书中的源代码是为 Microsoft C 编写的,但我试图让它在 OpenWatcom v2 下编译。当我尝试访问指向 VGA 视频内存开头的指针时,我很早就遇到了问题。

#include <stdio.h>
#include <dos.h>

void Set_Video_Mode(int mode) {
    
    union REGS inregs, outregs;

    inregs.h.ah = 0; 
    inregs.h.al = (unsigned char) mode;

    int86(0x10, &inregs, &outregs);
}


int main(void)
{
    Set_Video_Mode(0x13);

    //the following line throws an error, without it the code compiles and runs
    char far *video_buffer = (char far *)0xA0000000L;

    while (!kbhit()) { };

    Set_Video_Mode(0x03);

    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

这是远指针赋值引发以下错误:

VGA.C(33):错误!E1077:缺少 '}'
VGA.C(33):警告!W107:缺少函数“main”的返回值
VGA.C(36):错误!E1099: 语句必须位于函数内部。可能的原因:缺少{

这有点令人困惑,似乎宏定义出了问题,或者是什么......

当我使用相同的编译器尝试维基百科关于远指针的文章中的代码时:

#include …
Run Code Online (Sandbox Code Playgroud)

c dos real-mode watcom x86-16

9
推荐指数
1
解决办法
867
查看次数

标签 统计

c ×1

dos ×1

real-mode ×1

watcom ×1

x86-16 ×1