Que estructura conforman un sistema operativo


¿Cuál es la diferencia entre estructura y arquitectura de un computador?


La diferencia está en el punto de vista desde el que se describe el computador. La arquitectura define los atributos visibles al programador: el conjunto de instrucciones, el tamaño de los registros y el modo de direccionamiento de memoria.
La estructura, en cambio, describe los detalles internos del hardware que el programador no necesita conocer para programar: las señales de control, la tecnología de memoria empleada o las interfaces con los periféricos. Un ejemplo claro de esta distinción es la familia ATmega: todos sus modelos comparten la misma arquitectura AVR —el mismo conjunto de instrucciones, los mismos registros R0–R31— pero tienen estructuras diferentes en cuanto a velocidad, cantidad de memoria y periféricos disponibles. Dicho de otro modo: la arquitectura define qué puede hacer el computador; la estructura define cómo lo hace internamente.

2 Diap. 11 ¿Cuáles son los atributos de la estructura de un computador?

Los atributos de la estructura son aquellos detalles del hardware que no afectan directamente a la programación pero determinan las prestaciones físicas del sistema. Son: Las señales de control internas que coordinan los elementos de la CPU; las interfaces entre el computador y sus periféricos; la tecnología de memoria utilizada (SRAM, FLASH, DRAM…); y el tipo de operadores aritméticos seleccionados para implementar la ALU. Las decisiones de diseño estructural se basan en tres criterios: la velocidad de ejecución, el tamaño físico del sistema y el consumo de potencia.

3 Diap. 13 ¿Cuáles son los atributos de la arquitectura de un computador?

Los atributos de la arquitectura son los que el programador sí percibe y debe conocer para escribir sus programas. Incluyen el conjunto de instrucciones disponibles (qué operaciones puede ejecutar el procesador), el número de bits de los operandos y los registros, los mecanismos de direccionamiento de memoria (cómo se accede a los datos), el número y tipo de registros del procesador, y el modo de representación de los datos (complemento a dos, punto flotante, etc.). Son los atributos que permanecen constantes en toda una familia de procesadores, garantizando la compatibilidad de software entre modelos.

4 Diap. 14-19 ¿Cuál es la clasificación de arquitecturas según hardware? Cita carácterísticas de cada una. Existen tres tipos de arquitecturas hardware según cómo organizan las memorias y los buses:

La arquitectura Von Neumann es secuencial y utiliza un único bus compartido para datos e instrucciones. Al compartir el bus, datos e instrucciones compiten por el mismo canal, lo que genera el denominado cuello de botella de Von Neumann y limita su velocidad. Se combina habitualmente con software CISC. La arquitectura Harvard separa completamente los buses de datos e instrucciones, haciéndolos independientes. Esto permite leer la siguiente instrucción mientras se ejecuta la actual, aumentando significativamente la velocidad. Puede direccionar mayores cantidades de memoria y se combina con RISC. Es la arquitectura del AVR (en su variante modificada). La arquitectura Segmentada o Pipeline mantiene el bus compartido de Von Neumann pero incorpora un diseño multietapa: divide la ejecución en etapas (fetch, decode, execute) de modo que varias instrucciones se procesan simultáneamente en distintas etapas. Es más rápida que Von Neumann pero sin llegar a la eficiencia de Harvard. Se combina principalmente con CISC. Por software, la clasificación es: CISC  


(instrucciones complejas de longitud variable, pueden operar directamente sobre memoria, código compacto); RISC (instrucciones simples de longitud fija, solo operan entre registros, 1 ciclo por instrucción); y C-RISC (combinación de ambos, lo que es el AVR con sus 131 instrucciones)

¿Cuáles son los elementos mínimos de una CPU?

Describe el diagrama. Los elementos mínimos de una CPU son: la Unidad de Control, que lee y decodifica las instrucciones y coordina el resto de elementos generando las señales de control; la ALU (Unidad Aritmético-Lógica), que realiza las operaciones aritméticas y lógicas sobre los datos; los registros de propósito general, que son la memoria interna ultrarrápida de la CPU y los únicos con los que opera la ALU; el Contador de Programa (PC), que apunta a la siguiente instrucción a ejecutar; el Registro de Instrucción, que almacena la instrucción en proceso de decodificación; y el Registro de Estado (SREG), que guarda los flags del resultado de las operaciones. En el diagrama, la Unidad de Control se conecta bidirecccionalmente con la ALU intercambiando señales de control. La ALU opera con los datos que provienen de los registros de propósito general y deposita el resultado de nuevo en ellos, actualizando simultáneamente el Registro de Banderas. La BIU (Bus Interface Unit) actúa como puerta de salida de toda la CPU hacia el exterior a través de los tres buses ¿Qué necesita mínimamente una CPU para funcionar?
Una CPU, además de sus elementos internos, necesita cuatro recursos externos mínimos para poder funcionar: una memoria de programa donde estén almacenadas las instrucciones a ejecutar (en el AVR, la FLASH); una memoria de datos donde almacenar las variables del programa (en el AVR, la SRAM); una señal de reloj que sincronice y coordine todos sus elementos internos; y alimentación eléctrica (VCC y GND). El microcontrolador ATmega328P integra todos estos recursos en un único chip, lo que lo convierte en un sistema completo sin necesidad de componentes externos adicionales.

¿Cuáles son las funciones de una CPU?

2/11 Las funciones principales de una CPU son tres y se ejecutan de forma continua y cíclica: leer la instrucción apuntada por el Contador de Programa desde la memoria de programa; decodificarla, es decir, interpretarla para determinar qué operación debe realizarse y sobre qué operandos; y ejecutarla, llevando a cabo la operación indicada (aritmética, lógica, transferencia de datos, salto…) y actualizando el estado del sistema. A este ciclo repetitivo se le denomina ciclo Fetch-Decode-Execute. En el AVR, el pipeline de un nivel permite solapar la fase de fetch de la siguiente instrucción con la fase de ejecución de la actual, lo que posibilita ejecutar casi una instrucción por ciclo de reloj.

¿Qué buses existen en un microprocesador? ¿Cuál es la función de cada uno? ¿En qué afecta el número de líneas de cada bus?

Existen tres buses: el bus de direcciones, el bus de datos y el bus de control. El bus de direcciones es unidireccional y su función es indicar qué posición de memoria o periférico se está accediendo. El número de líneas determina el espacio de memoria máximo direccionable: con M líneas se pueden direccionar 2M posiciones. En el ATmega328P tiene 16 líneas para el espacio de datos, lo que permite acceder a 216 = 65.536 posiciones. El bus de datos es bidireccional y transporta los datos que se transfieren. El número de líneas determina cuántos bits se mueven simultáneamente en cada ciclo: con N líneas se transmiten N bits en paralelo. En el ATmega328P tiene 8 líneas, moviendo 1 byte por ciclo. El bus de control es heterogéneo y transporta las señales de sincronización: lectura/escritura, habilitación de dispositivos, interrupciones y reloj.


Su número de líneas depende de cada microprocesador y no determina capacidad de memoria ni ancho de datos, sino las funciones de control disponibles. 

¿Qué es el concepto de familia de computadores?

Una familia de computadores es un conjunto de modelos que comparten la misma arquitectura pero tienen estructuras internas distintas. Al compartir arquitectura, todos los modelos de la familia son compatibles en software: un programa escrito para un modelo funciona en cualquier otro de la misma familia sin modificaciones, aunque con diferentes prestaciones. La familia ATmega es un ejemplo: ATmega48, ATmega88, ATmega168 y ATmega328P comparten el mismo conjunto de instrucciones AVR y los mismos registros, pero difieren en cantidad de FLASH (4/8/16/32 KB), SRAM y EEPROM. El número del modelo indica directamente los kilobytes de FLASH disponibles.

¿Cuál es la diferencia entre un Microcontrolador (MCU) y un Microprocesador (CPU)?

La diferencia fundamental es el grado de integración. Un microprocesador contiene únicamente el núcleo de procesamiento (CPU) y requiere chips externos para memoria, periféricos y comunicaciones. Un microcontrolador integra todo en un único chip: la CPU, la memoria de programa (FLASH), la memoria de datos (SRAM), la EEPROM y un conjunto de periféricos como ADC, timers, UART, SPI e I2C.  Esta integración hace al MCU más compacto, barato y eficiente energéticamente, a cambio de ofrecer menores prestaciones de cómputo.

Memorias: tecnologías de fabricación, tipos, subtipos y carácterísticas

Las memorias se dividen en dos grandes grupos según si mantienen o no su contenido al retirar la alimentación: Las memorias volátiles pierden su contenido sin alimentación. La RAM (Random Access Memory) es el tipo principal y tiene dos subtipos: la SRAM (estática), que almacena cada bit mediante un biestable, no necesita refresco, es más rápida y cara, y es la que usa el AVR para datos; y la DRAM (dinámica), que almacena los bits como carga en condensadores y necesita refresco periódico, siendo más lenta y barata, usada en los PCs. Las memorias no volátiles conservan su contenido sin alimentación. Dentro de ellas, la PROM solo puede escribirse una vez (fusibles físicos). La EPROM puede borrarse con luz ultravioleta y reprogramarse eléctricamente. La EEPROM se borra y escribe eléctricamente byte a byte, soportando hasta 100.000 ciclos, y en el ATmega328P almacena configuraciones persistentes (1 KB). La FLASH funciona como la EEPROM pero se borra en bloques completos y a mayor velocidad, soportando hasta 10.000 ciclos; en el ATmega328P almacena el programa (32 KB)

¿Qué es un sistema embebido o empotrado?

Un sistema embebido es un sistema computacional diseñado para realizar una tarea específica en tiempo real, integrado dentro de un dispositivo más amplio. A diferencia de un ordenador de propósito general, sus recursos están ajustados exactamente a esa tarea concreta. Sus componentes suelen estar integrados en una única placa y el sistema no tiene apariencia de ordenador convencional. Se programan en ensamblador, C/C++ o Java, y los más complejos pueden incorporar un sistema operativo de tiempo real.

¿Cuáles son los posibles periféricos de un MCU?

Un MCU puede integrar una gran variedad de periféricos según sus necesidades. Los más comunes son:
Puertos de E/S digitales para conectar sensores y actuadores.
Timers/Counters para temporización y generación de señales PWM.
ADC para convertir señales analógicas a digital.
Comparador analógico para comparar dos tensiones de entrada.


Interfaces de comunicación serie como USART, SPI o TWI/I2C.
Watchdog Timer para reiniciar el sistema si el programa se queda colgado.
Oscilador RC interno para funcionar sin necesidad de cristal externo.
Modos Sleep para reducir el consumo cuando el sistema está inactivo. 

Describe el ejemplo de MCU (ATmega328P)

El ATmega328P es un microcontrolador de 8 bits de la familia AVR de Atmel, con arquitectura RISC Harvard modificada, 131 instrucciones y hasta 20 MIPS a 20 MHz. Integra en un encapsulado de 28 pines: 32 KB de FLASH (programa, 10.000 reprogramaciones), 2 KB de SRAM (datos), 1 KB de EEPROM (configuraciones, 100.000 ciclos), un ADC de 10 bits con 8 canales, tres timers (Timer0 y Timer2 de 8 bits, Timer1 de 16 bits), USART, SPI, TWI (I2C), tres puertos de E/S digitales con 23 pines, seis modos Sleep, Watchdog Timer y oscilador RC interno. Opera entre 1,8 V y 5,5 V.

Describe la función de: CPU, ALU, PC, Pila, memorias y periféricos del AVR

La CPU es el núcleo del microcontrolador: se encarga de leer, decodificar y ejecutar las instrucciones del programa una a una.La ALU es la parte de la CPU que realiza todas las operaciones aritméticas (suma, resta) y lógicas (AND, OR, XOR). Opera exclusivamente sobre los registros de propósito general. El PC (Contador de Programa) es un registro que indica qué instrucción se ejecutará a continuación. Se incrementa automáticamente tras cada instrucción y puede modificarse con saltos para crear bucles o llamadas a funciones. La Pila es una zona de la SRAM con estructura LIFO que guarda la dirección de retorno cuando se llama a una función o se atiende una interrupción, permitiendo volver exactamente al punto donde se estaba. En cuanto a las memorias, cada una tiene un propósito distinto: la FLASH almacena el programa de forma permanente, la SRAM guarda las variables durante la ejecución de forma volátil, y la EEPROM conserva datos que deben sobrevivir a los reinicios. Por último, los periféricos son módulos que trabajan de forma autónoma para tareas concretas: el Timer gestiona temporizaciones, el ADC convierte señales analógicas a digital, la USART gestiona la comunicación serie, y los puertos de E/S (PORTB, PORTC, PORTD) son las líneas físicas que conectan el microcontrolador con el exterior.  

¿Cuál es el mapa de memorias del AVR y cómo se mapean los registros en el espacio de datos?

El AVR tiene dos espacios de memoria físicamente separados: el espacio de programa (FLASH) y el espacio de datos. El mapeo de registros en el espacio de datos es lo que hace al AVR «Harvard modificada»: los registros de la CPU y los periféricos están accesibles como si fueran posiciones de la SRAM, en un mapa lineal y continuo 0x0000–0x001F → 32 Registros de Propósito General (R0–R31) 0x0020–0x005F → 64 Registros de E/S (PORTB, SREG, SPH, SPL…) 0x0060–0x00FF → 160 Registros de E/S Extendidos (ADC, Timer1, TWI, UART…) 0x0100–0x08FF → SRAM interna: variables + pila (2 KB) Gracias a este mapeo, se pueden usar las instrucciones LDS/STS tanto para acceder a registros como a la SRAM, simplificando la programación. El espacio de programa (FLASH) se organiza en sección de aplicación (código del usuario) y sección de bootloader al final, cuyo tamaño se configura con los fuses BOOTSZ1:BOOTSZ0 ¿Cuál es la arquitectura interna del MCU AVR y qué buses utiliza? 
El AVR usa una arquitectura Harvard modificada:
Tiene dos buses separados, uno para el programa (14 bits) y otro para los datos (8 bits), lo que le permite acceder a ambos simultáneamente.Incorpora un pipeline de 1 nivel con dos etapas:


mientras ejecuta una instrucción, ya está cargando la siguiente. Esto le permite completar una instrucción por ciclo de reloj, alcanzando hasta 20 MIPS a 20 MHz.
Su arquitectura es de tipo RISC Load/Store, lo que significa que la ALU solo puede operar con los 32 registros de propósito general. Para trabajar con un dato en memoria, el proceso siempre es el mismo: cargarlo en un registro (LOAD), operar, y guardarlo de vuelta (STORE). En resumen, el AVR combina Harvard, pipeline y RISC para ser simple, rápido y eficiente.  

¿

P. 

Qué son los registros de propósito general, los de E/S y la RAM/Pila? ¿Qué los diferencia?

 Los registros de propósito general (R0–R31) son 32 registros de 8 bits que están dentro de la propia CPU. Son los más rápidos y los únicos con los que trabaja directamente la ALU, completando la mayoría de operaciones en un solo ciclo. No todos son iguales: la instrucción LDI, por ejemplo, solo puede usarse con R16–R31, y los tres últimos pares (X, Y, Z) sirven también como punteros de 16 bits para el direccionamiento indirecto.Los registros de E/S están fuera de la CPU y se usan para controlar los periféricos del microcontrolador. Se acceden con instrucciones específicas (IN/OUT) usando su dirección relativa, o con LDS/STS usando la dirección absoluta. Los llamados registros de E/S extendidos hacen lo mismo pero ya no admiten IN/OUT, solo LDS/STS o acceso indirecto mediante los punteros X, Y, Z.La RAM general es donde se guardan las variables del programa durante la ejecución. Se accede igual que los registros de E/S extendidos. Al final de esta zona vive la pila, que crece hacia direcciones menores y está gestionada por el puntero SP. La diferencia clave entre los tres es dónde están y para qué sirven:
Los registros de propósito general están dentro de la CPU y son los más rápidos; los de E/S controlan el hardware externo; y la RAM es la memoria general del programa, donde también se apoya la pila.

Qué información guarda el registro de estado (SREG) y cuál es su utilidad?

El SREG es un registro de 8 bits que se actualiza automáticamente después de cada operación aritmético-lógica, guardando información sobre cómo salíó ese resultado. Cada uno de sus bits es un flag con un significado concreto:
C indica si hubo acarreo, Z si el resultado fue cero, N si fue negativo, V si hubo desbordamiento en operaciones con signo, S refleja el signo real del resultado (S = N XOR V), H detecta acarreo en el nibble bajo (útil para trabajar en BCD), T es un bit de propósito general usado por las instrucciones BST y BLD, e I habilita o deshabilita las interrupciones globales. Su utilidad es principalmente doble. Por un lado, permite controlar el flujo del programa de forma condicional: instrucciones como BREQ o BRNE consultan los flags para decidir si saltar o no según el resultado de la operación anterior. Por otro lado, el bit I actúa como interruptor global de interrupciones, siendo imprescindible para gestionar eventos externos en el programa.

¿Qué es la memoria de programa y cómo está organizada?

La memoria de programa es la zona FLASH no volátil donde se almacenan las instrucciones del programa. En el ATmega328P tiene 32 KB y puede reprogramarse hasta 10.000 veces. Al ser arquitectura Harvard, está en un espacio de direcciones independiente al de datos. Se organiza en dos secciones: la sección de aplicación, donde reside el código del usuario, y la sección de bootloader al final, que permite reprogramar el micro sin programador externo (así funciona Arduino). El tamaño del bootloader se configura con los fuses BOOTSZ1:BOOTSZ0.
Al inicio de la FLASH, desde 0x0000, se encuentra la tabla de vectores de interrupción. 


El acceso por puntero a esta memoria solo es posible mediante el registro Z con la instrucción LPM.

¿Qué es el contador de programa y cómo controla el flujo

El contador de programa (PC) es un registro interno que apunta en todo momento a la siguiente instrucción a ejecutar. Tras cada instrucción se incrementa automáticamente:
+1 para instrucciones de 16 bits y +2 para instrucciones de 32 bits. Para alterar ese flujo secuencial existen cuatro tipos de instrucciones: los saltos incondicionales (JMP, RJMP, IJMP) que modifican el PC siempre; los saltos condicionales BRANCH (BREQ, BRNE…) que solo saltan si se cumple un flag del SREG; los SKIP (SBRC, SBRS, SBIC, SBIS) que saltan únicamente la instrucción siguiente según el valor de un bit; y las llamadas a subrutina (CALL, RCALL) que, a diferencia de los saltos, guardan el PC en la pila antes de saltar para poder volver con RET.
Los JMP no guardan nada y no tienen vuelta.

¿Qué tipos de direccionamiento de datos existen en el AVR?

El AVR dispone de cinco modos de direccionamiento:

Registro directo (MOV/MOVW):

transfiere datos entre registros de propósito general sin acceder a memoria.  

E/S directo (IN/OUT):

transfiere entre registros de E/S y registros de propósito general usando la dirección relativa de E/S. .

Directo genérico (LDS/STS):

accede a cualquier posición del espacio de datos por su dirección absoluta. 

Indirecto (LD/ST):

accede a la posición apuntada por un puntero X, Y o Z.

Inmediato (LDI):

carga un valor constante directamente en un registro, sin acceder a memoria.  Existe además el acceso a la memoria de programa mediante LPM con el puntero Z, único modo de leer la FLASH por puntero.

¿Qué tipos de salto existen? ¿Cómo afectan al PC y a la pila?

Existen cuatro tipos de salto:

JUMP incondicionales:

modifican el PC siempre. JMP usa dirección absoluta, RJMP suma ±2048 e IJMP carga el registro Z. No tocan la pila.

BRANCH condicionales:

solo modifican el PC si se cumple un flag del SREG, con alcance ±64 palabras. Si no se cumple, el PC avanza normal. No tocan la pila.

SKIP:

si se cumple la condición sobre un bit concreto, saltan la instrucción siguiente. No tocan la pila.

CALL :

como los JUMP pero guardan el PC en la pila antes de saltar. Se retorna conRET (SP += 2) oRETI (igual que RET pero además reactiva el bit I del SREG, para retorno de interrupciones).

¿Qué es una interrupción y cuál es su utilidad?

Una interrupción es un mecanismo hardware que pausa el programa principal cuando ocurre un evento, ejecuta el código asociado (ISR) y retoma el programa exactamente donde lo dejó. Su utilidad frente al polling es que el programa principal trabaja libremente sin comprobar constantemente si ha ocurrido el evento: es el hardware quien avisa. Se usa para detectar flancos externos (INT0, INT1), ejecutar código a intervalos precisos con timers, recibir datos por UART o ser notificado cuando el ADC termina una conversión. El proceso es: la CPU termina la instrucción actual → guarda el PC en la pila (SP -= 2) → pone el bit I del SREG a 0 → salta al vector de interrupción → ejecuta la ISR → RETI recupera el PC de la pila y pone I = 1 de nuevo. ¿Qué es la tabla de interrupciones y dónde está en memoria? 
La tabla de interrupciones es una estructura almacenada al inicio de la FLASH, desde la dirección 0x0000.
Contiene una entrada por cada fuente de interrupción; cada entrada (vector) ocupa 2 palabras y almacena una instrucción JMP o RJMP. A menor dirección, mayor prioridad. El vector 0 en 0x0000 es siempre el RESET, la primera instrucción que ejecuta el micro al encenderse. 


Para usar interrupciones correctamente son necesarios tres pasos: habilitar el bit individual del módulo en su registro de máscara (por ejemplo,, habilitar las interrupciones globales con SEI (bit I del SREG = 1) y colocar la instrucción de salto (RJMP a la ISR) en la posición correcta de la tabla.  

¿Qué es un Timer, para qué sirve y cuál es la diferencia entre Timer y Counter

Un Timer/Counter es un módulo con un registro interno que se incrementa automáticamente con cada pulso de reloj. Al desbordarse vuelve a cero, pudiendo generar una interrupción. La diferencia está en la fuente de la señal: un Timer usa el reloj interno del sistema (pudiendo dividirse con un prescaler), por lo que mide tiempo. Un Counter usa una señal externa en un pin físico (T0 o T1), por lo que cuenta eventos del entorno. Sus aplicaciones son ejecutar código a intervalos precisos, generar señales PWM para controlar motores o servos, medir tiempos entre eventos externos y contar pulsos externos.

¿Qué es la resolución de un Timer y cómo se ajusta el período?

 La resolución de un timer es la cantidad de valores distintos que puede contar antes de desbordarse: un timer de n bits cuenta hasta 2ⁿ valores.
Un timer de 8 bits cuenta de 0 a 255; uno de 16 bits, de 0 a 65535. Para reducir la frecuencia de incremento y aumentar el tiempo entre desbordamientos se usa el prescaler, que divide el reloj del sistema. Los valores disponibles son 1, 8, 64, 256 y 1024.Para ajustar el período a un valor exacto se usa el modo CTC:
El contador se reinicia al llegar al valor del registro OCR0A en lugar de esperar al desbordamiento 1 ¿Qué es el ADC y para qué sirve?  
El ADC es un módulo de E/S que convierte una tensión analógica en un valor numérico digital que puede procesar la CPU, mediante un proceso llamado cuantificación.
Su utilidad es permitir al microcontrolador medir magnitudes físicas del mundo real: temperatura, luz, presión, posición de un potenciómetro, etc.

¿Qué es la resolución del ADC y la cuantificación?

 La cuantificación es el proceso de convertir una señal analógica continua en un valor perteneciente a un conjunto finito de valores discretos. Un ADC de n bits tiene 2ⁿ posibles valores de salida. La resolución determina la precisión: cuantos más bits, menor es el paso mínimo (LSB) entre dos valores consecutivos y más fácil es distinguir tensiones cercanas.

¿En qué consiste el método de aproximaciones sucesivas del ADC?

El método SAR determina el valor digital bit a bit, de mayor a menor peso, comparando la tensión de entrada con tensiones generadas internamente por un DAC. Funciona así: pone a 1 el bit más significativo (bit 9) y genera la tensión equivalente con el DAC interno. Un comparador la compara con V_in: si el DAC genera más tensión que V_in el bit se pone a 0; si genera menos o igual, el bit se mantiene a 1. Se pasa al siguiente bit y se repite acumulando el resultado. Tras 10 iteraciones la conversión está completa. El proceso tarda 13 ciclos del reloj ADC (25 la primera conversión). El reloj del ADC debe estar entre 50–200 kHz para garantizar la precisión de 10 bits. Con f = 16 MHz y prescaler 128 se obtiene f_ADC = 125 kHz, configurado con los bits ADPS2:1:0 = 111 en el registro ADCSRA.

¿Qué es la RAM de uso general y cómo se accede?

La RAM general (2 KB) es donde viven las variables del programa durante su ejecución. Se accede mediante instrucciones de carga y guardado: de forma directa con LDS/STS usando la dirección absoluta, o de forma indirecta con los punteros X, Y o Z.
Al final de este espacio se encuentra la pila, que crece desde 0x08FF hacia direcciones menores conforme se usa. 


¿Qué es la pila y el puntero a pila (SP)? ¿Cómo funciona?


La pila es una zona de la SRAM que funciona como estructura LIFO (el último en entrar es el primero en salir). Su uso principal es guardar el PC al llamar a una subrutina o atender una interrupción, para poder volver exactamente al punto donde se estaba. El puntero SP indica la siguiente posición libre en la cima de la pila. Está formado por dos registros de 8 bits (SPH y SPL) y debe inicializarse manualmente al arrancar apuntando a RAMEND (0x08FF).
Su funcionamiento:
PUSH guarda el valor en la posición actual y decrementa SP (post-decremento).
POP primero incrementa SP y luego recupera el valor (pre-incremento).
CALL/RCALL decrementan SP en 2 para guardar el PC de 16 bits, y RET/RETI lo incrementan en 2 para recuperarlo. 

Qué suele implicar en el método de trabajo con los datos que un procesador sea de tipo RISC (Load-Store)?

Que un procesador sea RISC implica que su ALU solo puede operar con datos que estén almacenados en registros de propósito general. La ALU nunca puede acceder directamente a la memoria para realizar operaciones. Esto obliga a trabajar siempre en tres pasos obligatorios y secuenciales, conocidos como el método Load-Store: Primero, LOAD: el dato debe cargarse desde su posición en memoria (SRAM, registro de E/S…) a un registro de propósito general mediante instrucciones de carga como LDS, LD o IN. Hasta que el dato no está en un registro, la ALU no puede procesarlo. Segundo, operación: una vez en registros, la ALU realiza la operación deseada (ADD, AND, SUB, EOR…) entre dos registros, depositando el resultado en otro registro. Tercero, STORE: el resultado almacenado en el registro debe escribirse de vuelta a la posición de memoria correspondiente mediante instrucciones como STS, ST u OUT. La consecuencia directa es que el código RISC requiere más instrucciones para realizar la misma tarea que en CISC, ya que en CISC una sola instrucción compleja puede operar directamente sobre memoria. Sin embargo, la ventaja es que cada instrucción RISC es tan simple que se ejecuta en un único ciclo de reloj. 

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *