创建和寻址阵列NASM

时间:2013-08-15 12:27:03

标签: arrays assembly nasm x86-16

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

BOARDARR: TIMES 1896 DB 0

代码段

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

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

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

  1. mov [BOARDARR+BX], byte 1,会将01写入BOARDARR+BX,或
  2. mov [BOARDARR+BX], word 1,这将导致01 00(按特定顺序,因为x86是Little Endian)写入BOARDARR+BX
  3. 希望这可以解决问题。