GNU/Linux xterm-256color bash 142 views

El código implementa una cola (queue) con operaciones básicas como insertar (enqueue), eliminar (dequeue), ver el frente (peek) y mostrar todo el contenido.


🧠 Resumen general

Este programa de ARM64 corre en un loop mostrando un menú al usuario para interactuar con una cola implementada como arreglo en memoria. Usa llamadas a printf y scanf para entrada/salida y gestiona la cola usando dos índices: front y rear.


📦 Sección .data

Aquí se declaran:

  • Mensajes (msg_menu, msg_enq, etc.)
  • Arreglo queue: espacio reservado para 10 enteros (.skip 40)
  • Variables: queue_size, front, rear, opcion, valor

🧭 Flujo del Programa en .text

🔹 main (función principal)

stp x29, x30, [sp, -16]!
mov x29, sp

Guarda el frame pointer (x29) y el link register (x30) en la pila para comenzar la función.


🔁 menu_loop

Muestra el menú y espera que el usuario ingrese una opción.

adr x0, msg_menu
bl printf
adr x0, formato_int
adr x1, opcion
bl scanf

Después carga el valor de la opción para decidir qué hacer:

ldr w0, [x0]
cmp w0, #5
b.eq fin_programa   // salir
cmp w0, #1
b.eq enqueue        // insertar
cmp w0, #2
b.eq dequeue        // eliminar
cmp w0, #3
b.eq peek_elemento  // ver frente
cmp w0, #4
b.eq mostrar_cola   // mostrar contenido

🟢 enqueue (Insertar elemento)

1. Verifica si la cola está llena:

ldr w21, [rear]
ldr w22, [queue_size]
sub w22, w22, #1
cmp w21, w22
b.ge cola_llena

2. Si no está llena, pide un número y lo guarda:

bl scanf

Si front == -1, lo pone a 0 (cola estaba vacía). Luego incrementa rear y guarda el valor en queue[rear].

str w22, [queue, rear * 4]

🔴 dequeue (Eliminar elemento)

  1. Verifica si la cola está vacía (front == -1)
  2. Muestra el valor de queue[front]
  3. Si front == rear, reinicia cola (front = rear = -1)
  4. Si no, incrementa front

👁️ peek_elemento

Muestra queue[front] sin eliminarlo.


📃 mostrar_cola

Itera desde front hasta rear, imprime cada elemento.


⚠️ cola_vacia y cola_llena

Subrutinas que imprimen mensaje si la cola no puede operar.


🛑 fin_programa

Restablece x29 y x30, y hace ret.


📝 Comentario final

Este código es excelente para practicar:

  • Manejo de arrays y punteros
  • Comparaciones y saltos condicionales (b.eq, cmp)
  • Acceso indirecto a memoria ([x20, w21, SXTW #2] usa el índice como offset multiplicado por 4)