【发布时间】:2021-12-01 14:57:25
【问题描述】:
两天前我收到Free Pascal Compiler 2.2.0的以下错误:
Error: Invalid reference syntax
史前史:
我想为“i386-linux”平台编译一个包含一些汇编指令的 pascal 源代码
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;
请有人帮助我。
【问题讨论】:
-
嗯,你是在linux中吗?此代码用于 16 位实模式,即使您将其组装也无法在 linux 中运行。 (事实上,它甚至无法在实模式下工作,因为未设置
es。) -
mul cx之后,DX寄存器为0。mov [es:di], dl指令不会显示颜色!请记住,DL是DX的一部分。改变这个:mov cx, colormov dx, 320mul dxadd bx, axmov [es:bx], cl。 -
可能是你的汇编器上的语法是
mov es:[di], dl。 -
@SepRoland:或者由于目标平台是“i386-linux”,
imul bx, y, 320/add bx, x,如果您仍然想使用 16 位操作数大小。 (或者用 LEA 乘以 5,用移位乘以 64,320 = 5 * 64)。但是,是的,用mul覆盖 DL 是一个错误。
标签: assembly pascal freepascal i386