我刚刚在程序集 8086 中制作了一个蛇游戏,并尝试用 NASM 编译它。我发现我必须“适应”我的程序。首先,如果有人能提取所有 NASM 的改编,我会很高兴。其次,终端给我下一条消息:“逗号、冒号或行尾”。数据段
BOARDARR: TIMES 1896 DB 0
代码段
mov bx, 3d7h
mov BOARDARR[BX], 1
有人可以帮帮我吗?谢谢。
comma, colon or end of line expected
在这种情况下是由代码本身的不正确语法引起的,即mov BOARDARR[BX], 1
. 在 NASM 中,所有的内存引用都需要放在括号中,在括号中计算操作数的有效地址。因此,您想要的是(我假设)mov [BOARDARR+BX], 1
,这将导致 a1
被写入 address BOARDARR + 3d7h
。
但是,仅进行该更正将导致另一个与未指定操作数大小相关的错误。由于NASM 不关心变量类型,所以它不关心你BOARDARR
是用 a 声明的db
,并将其视为普通的、无类型的内存块,而不是字节大小的元素数组。
为了解决这个问题,您需要明确说明要写入指定地址的操作数的大小,因为 - 即使在我假设您正在使用的实模式下 -MOV
内存操作数也有两种风格:字节大小和字大小。在这种情况下,您有两种选择来编写该指令:
mov [BOARDARR+BX], byte 1
, 这将导致01
被写入BOARDARR+BX
, 或mov [BOARDARR+BX], word 1
,这将导致01 00
(按特定顺序,因为 x86 是 Little Endian)被写入BOARDARR+BX
.希望这可以解决问题。