MASM 32-bit Arrays 2D accesando con directivas de flujo de control condicional error A2029: no se permiten múltiples registros base.
PROC updateBoard array:PTR DWORD, row1: DWORD, col1:DWORD, row2:DWORD, col2:DWORD
LOCAL isSame:DWORD, exitLoop:DWORD, value1:DWORD
mov isSame, 0 ;isSame = false
mov exitLoop, 0
;computing smaller column, we’ll start from the column which has smaller position for rowwise forward computation
mov eax, col2
.if( col1 < eax )
mov ecx, col1
.elseif
mov ecx, col2
.endif
;rowWise forward combos
mov eax, ecx; starting column index
mov edi,row1 ; row index
mov esi, eax
mov edx, 10
sub edx, ecx; computing loop counter -> (10 – col index with greater value )
.while ( edx < 9d AND exitLoop == 0)
mov ecx, array[edi + eax*TYPE array]
add eax, 1d
mov ebx, array[edi + eax*TYPE array]
.if ( ecx == ebx )
mov isSame, 1 ; isSame = true
.endif
.if ( ecx != ebx )
mov exitLoop, 1
.endif
inc esi
mov eax, esi
inc edx
.endw
dec eax
displayString offset prompt7
call writeDec
ret
ENDP
“`
davy.ai
El código proporcionado es un procedimiento en lenguaje ensamblador para actualizar un juego de tablero 2D llamado Number Crush. El procedimiento se llama
updateBoard
y tiene cinco parámetros: un array de DWORDs (array
), las posiciones de fila y columna de dos celdas en el tablero (row1
,col1
,row2
,col2
).El procedimiento comienza inicializando dos variables locales,
isSame
yexitLoop
, a 0. Luego, calcula el índice de la columna más pequeña entrecol1
ycol2
. Esto se utiliza para el cálculo hacia adelante orientado por fila.A continuación, el procedimiento entra en un bucle que recorre las celdas en la fila entre las dos celdas (
row1
,col1
) y (row2
,col2
) y verifica si alguna celda adyacente tiene el mismo valor. Si se encuentra una coincidencia,isSame
se establece en 1, y si no hay ninguna coincidencia,exitLoop
se establece en 1. El bucle continúa hasta que alcanza el final de la fila oexitLoop
se establece en 1.Finalmente, el procedimiento muestra una cadena (
prompt7
) y retorna.El error de sintaxis que el programador encontró
A2154 error de sintaxis en la directiva de flujo de control ..AND exitLoop ==0
se produce porque la directiva de flujo de control del bucle.while
espera una expresión condicional, peroAND exitLoop == 0
no es una sintaxis válida. El programador debería utilizarAND exitLoop, 0
en su lugar.