Barajas Carpio Enrique 23210547
Desarrollar un programa en ARM64 Assembly que procese códigos HTTP desde stdin y detecte la ocurrencia de tres errores consecutivos (4xx o 5xx).
Se implementa un contador que:
- Incrementa cuando el código HTTP es ≥ 400
- Se reinicia cuando el código es < 400
- Genera una alerta cuando el contador alcanza 3
int count = 0;
while (leer_codigo()) {
if (codigo >= 400) {
count++;
if (count == 3) {
printf("ALERTA\n");
break;
}
} else {
count = 0;
}
}/*
========================================
Autor: Tu Nombre
Práctica: Mini Cloud Log Analyzer
Variante: D - Detectar 3 errores consecutivos
Solución en C incluida arriba
========================================
*/
.global _start
.section .bss
buffer: .skip 16
.section .data
msg_alerta: .asciz "ALERTA: 3 errores consecutivos\n"
len_alerta = . - msg_alerta
.section .text
_start:
mov x19, #0 // contador de errores consecutivos
loop_read:
// read(stdin)
mov x0, #0
ldr x1, =buffer
mov x2, #16
mov x8, #63
svc #0
cmp x0, #0
ble exit
// convertir ASCII → número
ldr x2, =buffer
ldrb w3, [x2]
sub w3, w3, #'0'
mov w4, #100
mul w3, w3, w4
ldrb w5, [x2, #1]
sub w5, w5, #'0'
mov w4, #10
mul w5, w5, w4
add w3, w3, w5
ldrb w6, [x2, #2]
sub w6, w6, #'0'
add w3, w3, w6
// lógica de errores
cmp w3, #400
blt reset_counter
add x19, x19, #1
cmp x19, #3
bne loop_read
// imprimir alerta
mov x0, #1
ldr x1, =msg_alerta
mov x2, #len_alerta
mov x8, #64
svc #0
b exit
reset_counter:
mov x19, #0
b loop_read
exit:
mov x0, #0
mov x8, #93
svc #0makecat logs.txt | ./analyzer200
500
404
200
500
500
404
200
200
500
404
200
500
500
200
404
200
500
200
404
500
500
200
404
200
500
404
200
500
200
404
500
200
200
500
404
200
500
500
404
200
200
500
404
200
500
200
404
500
200
500
404
200
200
500
404
200
500
500
200
404
200
500
404
200
500
200
404
500
200
500
404
200
200
500
404
200
500
500
200
404
200
500
404
200
500
200
404
500
200
500
404
200
200
500
404
200
500
500
200
404
...
ALERTA: 3 errores consecutivos
-
Se utiliza la syscall
readpara obtener datos desdestdin -
Conversión manual de ASCII a entero (sin libc)
-
Uso de:
cmppara comparaciónblt,bnepara control de flujo
-
Contador implementado en registro
x19
| Caso | Resultado |
|---|---|
| Sin errores | No imprime |
| Errores aislados | No imprime |
| 3 errores consecutivos | ✅ ALERTA |
| Más de 3 errores | ✅ ALERTA |
Esta práctica demuestra cómo implementar lógica de alto nivel directamente en arquitectura ARM64, utilizando registros, saltos condicionales y syscalls sin apoyo de lenguajes de alto nivel.
- Detectar N errores consecutivos (configurable)
- Soporte para múltiples líneas reales (parseo robusto)
- Integración con C (
scanf) - Logging más detallado