【问题标题】:Accessing Array in Assembler在汇编程序中访问数组
【发布时间】:2012-01-06 13:38:07
【问题描述】:

我在用汇编程序编程时遇到问题。我正在用汇编程序制作“连续 4 次”游戏,并且已经设法编写代码来绘制 7x6 的比赛场地。 我正在使用数组来跟踪比赛场地并使用具有不同颜色代码的数组。

  PlayingField DB 42 DUP(0)   ;0 for empty, 1 for yellow, 2 for res
  CollorList DB 1111b, 1110b, 0100b (white, yellow, res)
  CurrentBlock DB 0

为了绘制我的比赛场地,我使用以下代码。

  mov al, CollorList[2]    ;collor register
  mov ch, 000000
  mov dh, 000000
  mov cl, Position[0]
  mov dl, Position[1]
  mov ah, 0ch
  int 10h                   ;set pixel

我现在的问题是使用变量 CurrentBlock 作为像 PlayingField[CurrentBlock] 这样的索引。我需要存储这个值,以便我可以在代码的绘图部分中将它用作 CollorList 的索引。像这个 CollorList[index]。 这样,我需要将值放入 al 寄存器中,因此我得到一个白色像素代表当前块的值 0,黄色代表值 1,红色代表值 2。

我现在还想知道如何更改 PlayingField 数组中某个索引的值。因为 " mov PlayingField[currentblock], 2 似乎不起作用。

Assembler 对我来说是新手,在网上搜索过,但还没有找到我的答案。我非常感谢任何帮助。

亲切的问候, 蒂姆

编辑: 我正在使用 DOS + MASM/LINK。如果它以这种方式工作,将尝试它。我尝试过这样的事情,但似乎没有用。

mov si,2    
mov bx, [PlayingField+si] 
mov al, CollorList[dx]

这给了我一个错误,因为 [PlayingField+si] 是 8 位,而 bx 是 16 位。如果我将寄存器更改为“bl”,它会在代码的最后一行抱怨,因为“bl”是一个 8 位寄存器

【问题讨论】:

  • 最后一行不应该是mov al, CollorList[bx]吗?

标签: arrays assembly x86-16 dosbox


【解决方案1】:

如果您使用的是 NASM,您可以将mov PlayingField[currentblock], 2 更改为:

mov si, [currentblock]
mov byte [playingfield+si], 2

【讨论】:

  • 我正在使用 DOS + MASM/LINK 如果它可以这样工作,将尝试它。我尝试过这样的事情,但似乎没有用。
     mov si,2 mov bx, [PlayingField+si] mov al, CollorList[dx] `  这给了我一个错误,因为 [PlayingField+si] 是 8 位,bx 是 16 位。如果我将我的寄存器更改为“bl”,它会在代码的最后一行抱怨,因为它是 16 位
  • 试试mov bl, byte ptr [PlayingField+si] 而不是mov bx, [PlayingField+si]
  • 解决了。使用寄存器斧头,用 00000 填充 ah,用我的号码填充 al。然后将 ax 移到 si 中,所以我没有收到 16 位错误。谢谢你的帮助
猜你喜欢
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 2011-10-07
相关资源
最近更新 更多