Summary of Codes, Circuits, and Digital Foundations
Codes, Circuits, and Digital Foundations: An Essential Student Guide
Introducción
La programación de bajo nivel se refiere a escribir instrucciones cercanas al hardware del computador: en lenguaje ensamblador o directamente en código máquina. Este material explica conceptos clave, muestra ejemplos prácticos y compara ideas relacionadas para permitir una comprensión sólida y aplicable en cursos universitarios.
Definición: La programación de bajo nivel implica el uso de instrucciones específicas del procesador (ensamblador o código máquina) que controlan directamente registros, memoria y periféricos.
1. Lenguajes de bajo nivel: ¿qué son?
- Código máquina: Secuencia de bytes que la CPU ejecuta directamente.
- Lenguaje ensamblador: Notación simbólica que representa las instrucciones de la CPU con mnemónicos (por ejemplo, MOV, ADD, CALL, RET).
Definición: Un ensamblador es un programa que convierte código en ensamblador (archivo fuente) en un archivo ejecutable de código máquina.
Ventajas y desventajas (comparativa)
| Aspecto | Ventaja | Desventaja |
|---|---|---|
| Control | Máximo control sobre el hardware | Más propenso a errores humanos |
| Eficiencia | Código muy optimizado y compacto | Desarrollo lento y laborioso |
| Portabilidad | Puede aprovechar instrucciones específicas del CPU | No portable entre arquitecturas |
| Abstracción | Permite manipular registros, flags y punteros | Requiere conocer arquitectura interna |
2. Herramientas: ensamblador y cross-assembler
- Ensamblador local: Traduce fuente .ASM a ejecutable (.COM, .BIN). Ejemplo: en CP/M, ASM.COM toma PROGRAM1.ASM y produce PROGRAM1.COM.
- Cross-assembler: Se ejecuta en una máquina A pero genera código para otra máquina B.
Definición: Cross-assembler es un ensamblador que genera código ejecutable para una arquitectura distinta a la de la máquina donde corre.
Ejemplo práctico (resumen): Un archivo fuente con ORG, instrucciones LXI, MVI, CALL y DB puede ensamblarse en bytes de máquina que el sistema ejecuta para mostrar una cadena.
3. Estructuras de memoria y uso práctico: la pila (stack)
- La pila es una región de RAM usada como LIFO (Last In First Out).
- Operaciones básicas: PUSH (empujar) y POP (sacar).
Definición: Stack Pointer (SP) es el registro que apunta al tope de la pila y se ajusta (incrementa/decrementa) con PUSH/POP.
Comportamiento general (ejemplo conceptual):
- Si SP = $8000_{16}$ y ejecutas PUSH de un par de registros (16 bits), SP se decrementa y las dos bytes se escriben en memoria en orden definido por la ISA.
- Posteriormente, POP recupera las bytes y ajusta SP en sentido inverso.
Problemas potenciales:
- Stack overflow: la pila crece y sobreescribe área usada por el programa.
- Stack underflow: demasiados POP provocan lectura de datos inválidos.
4. Llamadas a subrutinas: CALL y RET
- CALL guarda la dirección de retorno en la pila y salta a la subrutina.
- RET recupera la dirección desde la pila y continúa la ejecución donde se llamó.
Uso recomendado:
- Guardar registros modificados por la subrutina con PUSH.
- Ejecutar la lógica de la subrutina.
- Restaurar registros con POP y RET.
Ejemplo esquemático (ensamblador conceptual):
- PUSH PSW ; salvar estado
- PUSH BC ; salvar BC
- ; cálculos que usan BC y registros
- POP BC
- POP PSW
- RET ; volver al llamador
5. Manipulación de datos y instrucciones útiles
- PUSH/POP en el 8080 trabajan con pares de registros (16 bits): PUSH BC, POP DE, PUSH PSW (acumulador + flags).
- LXI carga registros de 16 bits con un inmediato: LXI SP,0000h para inicializar la pila.
- INX / DCX incrementan y decrementan pares de registros como valores de 16 bits.
- DAD suma un par de registros a HL; afecta la bandera Carry y es útil para cálculos de direcciones.
- SHLD / LHLD almacenan/cargan HL directamente desde/dentro de direcciones de memoria.
- PCHL / SPHL cargan PC o SP a partir de HL (PCHL actúa como salto indirecto).
- XTHL / XCHG permiten int
Already have an account? Sign in
Programación de bajo nivel
Klíčové pojmy: La programación de bajo nivel utiliza ensamblador y código máquina para control directo del hardware., Un ensamblador traduce mnemónicos a bytes de máquina y un cross-assembler genera código para otra arquitectura., La pila (stack) es memoria LIFO usada con PUSH y POP; SP (Stack Pointer) apunta al tope., CALL guarda la dirección de retorno en la pila; RET recupera esa dirección para volver., Instrucciones 16-bit como LXI, INX/DCX y DAD facilitan manipulación de direcciones y valores grandes., Rotaciones (RLC, RRC, RAL, RAR) mueven bits y afectan la bandera Carry; útiles para multiplicaciones por 2., Ensamlador vs compilador: ensamblador hace traducción 1:1; compilador genera múltiples instrucciones y optimiza., Buenas prácticas: comentar, preservar registros, inicializar SP y documentar convenciones de llamada.