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