Código auto modificable: ¿cómo funcionó eso para ahorrar espacio?

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

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.

More Interesting

¿Cuánto tiempo lleva la autodidacta de codificación y ser lo suficientemente bueno para ser ingeniero de software?

¿Cuáles son los pecados más comunes de los programadores perezosos?

Cómo hacer que mi viaje en autobús sea más productivo

¿Cómo puede un estudiante paquistaní de ingeniería de software obtener admisión en universidades japonesas o australianas?

¿Cuáles son los 10 principales países exportadores de software?

¿El mercado del software es realmente malo?

¿En qué se diferencian los algoritmos estudiados en los libros de texto de los del mundo real que utilizan las compañías de software como Google, Amazon, Uber, etc.?

¿Nuestra capacidad para estimar de manera confiable un proyecto está relacionada con la cantidad de trabajo repetitivo y bien entendido involucrado?

¿Los fundadores de Google son ingenieros certificados en muchos lugares?

¿Cuál es el mejor software para la gestión de mis servicios, mis conversaciones regulares con mis clientes y, lo más importante, mis revisiones y progresos?

Cómo crear una aplicación de prueba gratuita menos pirateable

¿Cuál es la forma más creativa de manejar defectos / errores provocados por un probador en el software que desarrolló, que técnicamente no son errores?

¿Cuáles son los lenguajes de programación necesarios para construir software y otras cosas esenciales?

¿La programación del juego no está relacionada con la programación normal?

¿Qué empresas tecnológicas tienen el equipo de ingeniería más fuerte?