MASM32(程序集)使用2D坐标访问1D数组的元素

时间:2013-09-09 11:32:59

标签: assembly masm

我正在组装蛇形游戏,我将蛇身体的坐标(用于碰撞目的)存储在一维阵列中。我将x和y坐标存储在一个字节中。我每次移动时都会存储蛇头的坐标。这是我的代码:

;(ROW * WIDTH) + COL
MOV AL, 80 ; 80 IS THE WIDTH
MUL ROW
ADD AL, COL
MOV SI, AX
CMP TRAIL[SI], 0
JE @GAME_OVER

我创建了一个名为TRAIL的1维数组来保存数据。

TRAIL DB 2000 dup (1)

我的问题是,有时候,即使它没有与身体发生碰撞,蛇也会死亡。我认为问题在于将ROW乘以AL(有时大于AL),然后添加COL会给出错误的答案。我无法将ROW和COL更改为dw,因此我唯一的选择是使计算工作。请帮忙。

1 个答案:

答案 0 :(得分:0)

您可以对单词进行操作,而不是添加字节:

mov ax,80
mul byte [ROW]
movzx bx,byte [COL]  ; zero-extend COL into BX
add ax,bx            ; ax = ROW*80 + COL

或者如果您不想使用movzx

mov ax,80
mul byte [ROW]
add al,[COL]
adc ah,0       ; add 1 to AH if the previous addition resulted in a carry

ADC(Add with Carry)在逻辑上等同于以下C语句:

    ah += (((uint16_t)al + col) > 0xFF) ? 1 : 0;