在汇编程序中访问数组

时间:2012-01-06 13:38:08

标签: arrays assembly x86-16 dosbox

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

  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 [索引]。 这样我需要将值放入al寄存器中,因此我得到当前块的值0的白色像素,值为1时为黄色,值为2时为红色。

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

汇编程序对我来说是新手并在网上搜索但尚未找到答案。任何帮助我非常感谢。

亲切的问候, 添

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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