Comentarios y respuestas

Mostrar una funcion en arm que mueva un vector de asteroides en una matriz de 20*50 y lo imprima en pantalla

Aquí tienes un ejemplo de una función en ARM Assembly que mueve un vector de asteroides en una matriz de 20x50 y lo imprime en pantalla: ```assembly .data .align
27/6/2023 12:22
Mostrar una funcion en arm que mueva un vector de asteroides en una matriz de 20*50
y lo imprima



Consulta:

Mostrar una funcion en arm que mueva un vector de asteroides en una matriz de 20*50
y lo imprima en pantalla

Respuesta:

Aquí tienes un ejemplo de una función en ARM Assembly que mueve un vector de asteroides en una matriz de 20x50 y lo imprime en pantalla:

```assembly
.data
.align 2
asteroides: .word 0x00000000, 0x00000000, 0x00000000, 0x00000000
.word 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
.word 0x00000000, 0x00000000, 0x00000000, 0x00000000

matriz: .space 400

.text
.global main

main:
mov r0, #20 @ Cantidad de filas de la matriz
mov r1, #50 @ Cantidad de columnas de la matriz
ldr r2, =asteroides @ Dirección del vector de asteroides
ldr r3, =matriz @ Dirección de la matriz

bl mover_asteroides @ Llamar a la función para mover los asteroides

bl imprimir_matriz @ Llamar a la función para imprimir la matriz

mov r7, #1 @ Salir del programa
swi 0

mover_asteroides:
push {r4-r8} @ Guardar registros

mov r4, #0 @ Índice del vector de asteroides (inicializado en cero)

loop_fila:
cmp r4, #12 @ Comparar con el tamaño del vector de asteroides (en palabras)
beq end_mover_asteroides @ Si se llega al final del vector, salir del loop

ldr r5, [r2, r4, LSL #2] @ Cargar un elemento del vector de asteroides

mov r6, #0 @ Índice de columna (inicializado en cero)

loop_columna:
cmp r6, #50 @ Comparar con la cantidad de columnas de la matriz
beq next_fila @ Si se llega al final de la fila, pasar a la siguiente fila

str r5, [r3, r6, LSL #2] @ Almacenar el elemento en la matriz

add r6, #1 @ Incrementar el índice de columna
b loop_columna

next_fila:
add r4, #1 @ Incrementar el índice del vector de asteroides
add r3, #200 @ Mover a la siguiente fila de la matriz
b loop_fila

end_mover_asteroides:
pop {r4-r8} @ Restaurar registros
bx lr

imprimir_matriz:
push {r4-r7} @ Guardar registros

mov r4, #0 @ Índice de fila (inicializado en cero)

loop_print_fila:
cmp r4, #20 @ Comparar con la cantidad de filas de la matriz
beq end_imprimir_matriz @ Si se llega al final de la matriz, salir del loop

ldr r5, =matriz @ Dirección base de la matriz
add r5, #200 @ Sumar un offset para llegar a la siguiente fila
ldr r5, [r5, r4, LSL #2] @ Cargar un elemento de la fila

mov r6, #0 @ Índice de columna (inicializado en cero)

loop_print_columna:
cmp r6, #50 @ Comparar con la cantidad de columnas de la matriz
beq next_print_fila @ Si se llega al final de la fila, pasar a la siguiente fila

ldr r7, [r5, r6, LSL #2] @ Cargar un elemento de la fila

mov r0, r7 @ Pasar el elemento a imprimir en pantalla
bl printf @ Llamar a la función printf para imprimir el elemento

add r6, #1 @ Incrementar el índice de columna
b loop_print_columna

next_print_fila:
add r4, #1 @ Incrementar el índice de fila
b loop_print_fila

end_imprimir_matriz:
pop {r4-r7} @ Restaurar registros
bx lr
```

Ten en cuenta que este código asume que estás utilizando el ensamblador ARM para una arquitectura específica. Además, necesitarás tener una función `printf` implementada o enlazada correctamente para poder imprimir los elementos de la matriz en pantalla.



 


Artículos relacionados