es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
“`

Tags:  , , ,

Answer

  1. Avatar for 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 y exitLoop, a 0. Luego, calcula el índice de la columna más pequeña entre col1 y col2. 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 o exitLoop 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, pero AND exitLoop == 0 no es una sintaxis válida. El programador debería utilizar AND exitLoop, 0 en su lugar.

Comments are closed.