【问题标题】:Creating and addressing array NASM创建和寻址阵列 NASM
【发布时间】:2013-08-17 15:18:49
【问题描述】:

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

BOARDARR: TIMES 1896 DB 0

代码段

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

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

【问题讨论】:

  • 汇编器在哪一行给出错误信息?
  • mov boardarr[bx], 1

标签: arrays assembly nasm x86-16


【解决方案1】:

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

希望这能解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 2020-06-18
    • 2013-11-25
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多