Aquí está el ejemplo más simple posible.
Digamos que tiene el siguiente código:
VALOR: DEFB 07
RUTINA:
LD A, (VALOR)
INC A
LD (VALOR), A
- ¿Qué lenguaje de programación sería el más adecuado para crear un software de ingeniería (para Windows y aplicaciones telefónicas)?
- ¿Cuál es la mejor pieza de software jamás escrita y en qué idioma?
- ¿Qué herramienta de prueba de software está en tendencia o mejor? ¿Por qué? ¿Los ingenieros de software pueden explicarlo?
- ¿Cuáles son los pros y los contras de usar historias de usuario para una aplicación de software de tamaño mediano a grande?
- ¿Crees que los programadores o codificadores serían reemplazados por un software?
Eso es un total de 8 bytes: 1 para el valor y 7 para leerlo desde la dirección VALOR, incrementarlo y volver a colocarlo en VALOR.
¿Qué pasaría si, en cambio, tuvieras el siguiente código:
RUTINA: LD A, 7
INC A
LD (RUTINA + 1), A
Esto ocupa 6 bytes. También es más rápido; está codificando datos dentro del código de operación LD A, n en lugar de cargar A desde una dirección. No necesita leer la dirección del valor la primera vez, y lo almacena de nuevo en el código de operación cuando lo haya actualizado.
(Esto se pone aún mejor si tiene que probar el valor antes de modificarlo, y la prueba falla la mayoría de las veces, ahora se ha ahorrado ciclos en la ruta de código común).
Una forma alternativa de hacer esto podría ser escribir:
VALOR: DEFB 07
RUTINA: LD HL, VALOR
INC (HL)
… que es de 5 bytes y un poco más rápido, pero no obtienes la carga rápida en el acumulador de esa manera, y basura HL.
Un ejemplo más útil podría ser un ringbuffer:
ALINEAR 256
RINGBUFFER: DEFS 256
RINGBUFFERTAIL: LD HL, RINGBUFFER
LD A, (HL)
; Haz algo con A
INC L
LD A, L
LD (RINGBUFFERLD + 1), A
De cualquier manera, son muchas pequeñas pequeñas optimizaciones. La mayor parte del ahorro de espacio proviene del almacenamiento de datos dentro de un código de operación de carga inmediata; de esa manera, guarda 2 bytes, uno para almacenamiento y otro para la dirección desde donde leerlo.