0

我刚刚在程序集 8086 中制作了一个蛇游戏,并尝试用 NASM 编译它。我发现我必须“适应”我的程序。首先,如果有人能提取所有 NASM 的改编,我会很高兴。其次,终端给我下一条消息:“逗号、冒号或行尾”。数据段

BOARDARR: TIMES 1896 DB 0

代码段

mov bx, 3d7h
mov BOARDARR[BX], 1

有人可以帮帮我吗?谢谢。

4

1 回答 1

3

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内存操作数也有两种风格:字节大小和字大小。在这种情况下,您有两种选择来编写该指令:

  1. mov [BOARDARR+BX], byte 1, 这将导致01被写入BOARDARR+BX, 或
  2. mov [BOARDARR+BX], word 1,这将导致01 00(按特定顺序,因为 x86 是 Little Endian)被写入BOARDARR+BX.

希望这可以解决问题。

于 2013-08-15T14:15:56.887 回答