内联汇编器:无效的引用语法

1 assembly pascal freepascal i386

两天前,我在 Free Pascal 编译器 2.2.0 中遇到以下错误:

Error: Invalid reference syntax
Run Code Online (Sandbox Code Playgroud)

史前史:

我想编译一个 pascal 源代码,其中包含一些适用于平台“i386-linux”的汇编指令

procedure drawpixel(x,y,color: word); assembler;
asm
  mov ax, y
  mov bx, x
  mov dl, color

  mov cx, 320
  mul cx
  add ax, bx
  mov di, ax
  mov [es:di], dl /// Right at [es:di] the inline assembler gives this annoying exception
  ret
end;
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?

Mar*_*ort 5

正如评论者已经指出的那样,这是 16 位汇编程序,如果不进行修改,就无法在 32 位中运行。

除此之外,使用 16 位寄存器作为间接目标([di])很奇怪,32 位应用程序中的 ES 段与 DS 段相同,所以可能不是您想要的(我认为这应该是一些mode-X 屏幕缓冲区),但会将其 RAM 到应用程序内存的前 64kb 中的某个位置,该内存至少部分受到保护,防止写入以捕获零指针引用。

您需要重新考虑这一点,在 Linux 中不可能像在 dos 中那样访问图形屏幕。