Diapositivas de la Universidad Europea sobre la estructura de computadores. El Pdf, un recurso de Informática para Universidad, detalla las operaciones básicas y el direccionamiento en microprocesadores Atmel, incluyendo instrucciones de suma, resta, lógicas, desplazamiento y rotación de bits, y multiplicación.
Ver más19 páginas


Visualiza gratis el PDF completo
Regístrate para acceder al documento completo y transformarlo con la IA.
Los objetivos que se pretenden alcanzar en este recurso son los siguientes:
El movimiento de datos es la operación más asidua en cualquier programa, seguido muy de cerca por la de manipulación de datos. De ahí la importancia de que estas instrucciones sean muy óptimas en tiempo de ejecución y consumo de memoria.
La manipulación de datos se realiza en la ALU (Arithmetic and Logic Unit) de la CPU: . La ALU es, principalmente, un montón de circuitos electrónicos combinacionales que realizan todas las operaciones que necesita el procesador.
Cada vez que se realiza una operación en la ALU, esta registra el resultado del proceso (no el valor resultado de la operación, sino el resultado de cómo ha terminado y cuáles han sido las características de la operación) en un registro especial por medio de los bits (flags=banderas) en la PSW (Process Status Word):
El registro de estado "SREG" para Atmega328 incluye esas señales de:
7 6 5 4 3 2 1 0 Bit 0x3F (0x5F) I T H S V N Z c SREG Figura 1. Esquema del registro de estado "SREG" para Atmega328
Por defecto, todas las señales se inicializan a 0 (=cero). Por lo que un "0" corresponde a que el bit no está activo o la condición no se cumple.
El significado de cada bit de bandera es el siguiente:
Dos instrucciones importantes de manejo de registros, que veremos a continuación, son las instrucciones encargadas de inicializar registros. Estas instrucciones son las siguientes:
o Flags que actualiza: S = 0, N = 0, V = 0, Z = 1. 2. SER (Set Register). Carga un 0xFF en el registro Rd, es decir, lo inicializa todo a unos. 1110 1111 d3d2d1d0 1111 Su formato es el siguiente: SER Rd; Rd+-0xFF Donde Rd debe ser un registro de R16 ... R31 (no utilizable para RO ... R15). o o Flags que actualiza: no afectados.
La operación aritmética más básica es la suma. Para implementar esta operación se utiliza el sumador completo de un bit, unidos en cascada para conseguir sumadores (/restadores) de N bits.
A1 B1 A2 B2 A3 B3 A4 B4 A B A B A B A B FULL CI ADDER CO FULL CI ADDER CO FULL CI ADDER CO FULL CI ADDER CO S S S S I S1 S2 S3 S4 Co Figura 2. Sumador completo.
A menudo las operaciones de comparación se realizan mediante una resta, teniendo en cuenta que el resultado de a-b es:
Por lo general, la resta se implementa como una adición del número negativo correspondiente. Así "a - b" se implementa como "a + (-b)".
Nótese que lo que se hace es el Ca2 de "b" y luego se suma.
A3 B3 A2 B2 A1 B1 Ao Bo 1 0 1 0 1 0 1 0 -D C4 1-bit Full Adder C3 1-bit Full Adder C2 1-bit Full Adder C1 1-bit Full Adder Co S3 S2 S1 So Figura 3. Esquema sumador completo.
La suma estándar se realiza usando las instrucciones ADD o ADC:
Para ambas instrucciones:
.CSEG start: LDI R16, 7 ;put the 7 into a register LDS RØ, a ;copy 'a' to a register ADD RO, R16 ;adds 'a'+7, result in RØ STS b, RØ ; copy result to 'b' Figura 4. Código ensamblador para la expresión "b = a + 7".
Sumar el número 0x3AF2 y 0x1C7D (ambos 16 bits) y almacenar el resultado en la variable var1:
.DSEG ;indicate we are going to use data memory addresses var1: . BYTE 2 ;memory address and reserve 2 bytes . CSEG start: LDI R16, 0xF2 LDI R17, 0x3A ;1st number in R17:R16 LDI R18,0x7D LDI R19,0x1C ; 2nd number in R19:R18 ADD R16, R18 ;adds low byte, result in R16 ADC R17, R19 ;adds high byte plus low byte carry, result in R17 ;now the result is in R17:R16. Then copy it into var_1 STS var_1, R16 ; copy low byte to var_1 STS var_1+1, R17 ; copy high byte to var_1 Figura 5. Sumar el número 0x3AF2 y 0x1C7D.
La resta estándar se realiza utilizando las instrucciones SUB/SBC:
Para ambas instrucciones:
Las instrucciones de resta también pueden funcionar con datos constantes:
Para ambas instrucciones:
Figura 6. Código ensamblador para la expresión "b = a + 7".
Calcula la resta 0x3AF2 - 0x1C7D (de 16 bits) y almacena el resultado en la variable var1:
Figura 7. Resta 0x3AF2 - 0x1C7D (de 16 bits).
Las comparaciones son una instrucción fundamental para organizar la secuencia de ejecución de un programa. Estas instrucciones permitirán alterar la ejecución secuencial de un programa. Las condiciones son instrucciones primitivas para implementar instrucciones de alto nivel como bucles o condiciones (for, while-do, do-while, if, switch, etc.).