Estructura de computadores: operaciones y direccionamiento en microprocesadores Atmel

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ás

19 páginas

Estructura de
computadores
Tema 8. Operaciones básicas y
direccionamiento
Estructura de computadores
Tema 8. Operaciones básicas y direccionamiento
2
© Copyright Universidad Europea. Todos los derechos reservados.
Índice
Objetivos de aprendizaje ............................................................... 3
1. Presentación ........................................................................... 3
2. Flags. El SREG: registro de estado .................................................. 3
3. Suma/resta ............................................................................. 5
4. Instrucciones de suma: ADD/ADC ................................................... 6
5. Instrucciones de resta: SUB/SBC .................................................... 7
5.1. Instrucciones de resta con Inmediatos. SUBI/SBCI ................................... 8
6. Instrucciones de comparación: CP/CPC/IPC ...................................... 9
7. Instrucciones lógicas: AND/ANDI/EOR/OR/ORI/TST ........................... 10
8. Otras instrucciones de importancia .............................................. 12
9.1. Establecer bit o reiniciar bit en el registro de estado SREG manualmente ..... 14
9.2. Uso del Bit T del registro de estado SREG ........................................... 14
10. Desplazamiento y rotación de bits .............................................. 14
11. Instrucciones de multiplicación y división ..................................... 16
11.1. División ................................................................................... 17
12. Resumen ............................................................................ 17
Referencias bibliográficas ............................................................. 18

Visualiza gratis el PDF completo

Regístrate para acceder al documento completo y transformarlo con la IA.

Vista previa

Estructura de computadores: Operaciones básicas y direccionamiento

Objetivos de aprendizaje

Los objetivos que se pretenden alcanzar en este recurso son los siguientes:

  • Diferenciar las operaciones aritméticas en ensamblador.
  • Aprender a alterar la ejecución secuencial de un programa mediante las instrucciones de comparación.

1. Presentación

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.

  • Los datos de entrada con los que procesa la ALU suelen estar almacenados, por lo general, en registros.

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):

  • La información que se puede guardar en este registro de Status, son cosas del estilo "el resultado ha sido cero", "positivo", "negativo", "ha habido desbordamiento", "carry", etc.

2. Flags. El SREG: registro de estado

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:

  • C: carry. Indica que se ha producido acarreo en una operación aritmética o lógica.
  • Z: cero. Indica un resultado de cero en una operación aritmética o lógica.
  • N: negativo. Indica un resultado negativo en una operación aritmética o lógica.
  • V: complemento a 2 de desbordamiento. Indica un desbordamiento en las operaciones de complemento a 2.
  • S: bit de signo. Indica señal resultado de la operación. Siempre ha calculado como N V.
  • H: medio carry. Útil para las operaciones BCD (decimal codificado en binario).
  • T: bit de almacenamiento de copia. Es una memoria de 1 bit utilizado por las instrucciones a nivel de bits.
  • I: activación de interrupciones globales. No ocurren interrupciones si es 0, en caso de valor 1, las interrupciones están activas.

Dos instrucciones importantes de manejo de registros, que veremos a continuación, son las instrucciones encargadas de inicializar registros. Estas instrucciones son las siguientes:

  1. CLR (Clear Register). CLR (CLear Register) inicializa a ceros el registro. 0010 01d4d4 d3d2d1d0 d3d2d1d0 Su formato es el siguiente: CLR Rd-> ;Rd+-0 o Donde Rd debe ser un registro de RO ... R31. o Como información curiosa, decir que esta instrucción realmente no existe. Ensamblador lo permite, pero la reemplaza por la instrucción EOR (Exclusive OR) con el formato EOR Rd, Rd (-> Rd=Rd Rd).

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.

3. Suma/resta

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:

  • O si a = b.
  • Positivo si a > b.
  • Negativo si a < b.

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.

4. Instrucciones de suma: ADD/ADC

La suma estándar se realiza usando las instrucciones ADD o ADC:

  • ADD (ADDition). Suma sin entrada de acarreo. 0000 11r4d4 d3d2d1d0 r3r2riro Su formato es el siguiente: ADD Rd, Rr ;Rd +- Rd + Rr o Suma los registros Rd y Rr y pone el resultado en el registro Rd.
  • ADC (ADition with Carry). Suma con carry de entrada. Considera el carry almacenado en el registro SREG del resultado de la operación anterior: 0001 11r4d4 d3d2d1d0 r3r2riro Su formato es el que se muestra a continuación: ADC Rd, Rr ; Rd +- Rd + Rr + C o Suma dos registros y el flag C anterior, guarda resultado en el registro Rd.

Para ambas instrucciones:

  • Flags que actualiza: afectar a las señales H, S, V, N, Z, C.
  • Rd y Rr pueden ser un registro de RO ... R31.
  • Se puede sumar un registro consigo mismo.

.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.

5. Instrucciones de resta: SUB/SBC

La resta estándar se realiza utilizando las instrucciones SUB/SBC:

  • SUB (SUBstraction). Resta sin entrada de acarreo. 0001 10r4d4 d3d2d1d0 r3r2riro Su formato es el siguiente: SUB Rd, Rr ;Rd +- Rd - Rr o Resta dos registros y pone el resultado en el registro Rd.
  • SBC (Subtraction whith Carry). Resta con acarreo "C" de la operación anterior. 0000 10r4d4 d3d2d1d0 r3r2riro Su formato es el que se muestra a continuación: SBC Rd, Rr ; Rd +- Rd - Rr - C o Resta dos registros Rd y Rr y al resultado le resta carry, pone el resultado en el registro Rd.

Para ambas instrucciones:

  • Flags que actualiza: a las señales H, S, V, N, Z, C.
  • Rd y Rr pueden ser un registro de RO ... R31.
  • Se puede sumar un registro consigo mismo.

5.1. Instrucciones de resta con Inmediatos. SUBI/SBCI.

Las instrucciones de resta también pueden funcionar con datos constantes:

  • SUBI (SUBstract Immediate). Resta un valor constante sin carry. Su formato es el siguiente: SUBI Rd, k ;Rd +- Rd - k o Resta la constante k (valor inmediato) al registro Rd, pone el resultado en Rd.
  • SBCI (Subtract Immediate with Carry). Resta un valor constante, considerando el carry anterior. Su formato es el que se muestra a continuación: SBCI Rd, k ;Rd +- Rd - k - C: o Resta la constante k a Rd y después el flag Carry "C" pone el resultado en Rd.

Para ambas instrucciones:

  • Flags que actualiza: a las señales H, S, V, N, Z, C.
  • Rd pueden ser un registro de R16 ... R31.
  • K debe ser: 0 < k < 255.
  1. DSEG ;indicate we are going to use data memory addresses
  2. a: . BYTE 1 ; 1 byte var
  3. b: . BYTE 1 ; 1 byte var
  4. .CSEG
  5. start:
  6. LDI R16, 7 ;put the 7 into a register
  7. LDS RO, a ;copy 'a' to a register
  8. SUB RO, R16 ;calculates 'a'-7, result in RO
  9. STS b, RO ;copy result to 'b'

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:

  1. DSEG ;indicate we are going to use data memory addresses
  2. var1: . BYTE 2 ; memory address and reserve 2 bytes
  3. .CSEG
  4. start:
  5. LDI R16, 0xF2
  6. LDI R17, 0x3A ;1st number in R17:R16
  7. LDI R18,0x7D
  8. LDI R19,0x1C ;2nd number in R19:R18
  9. SUB R16, R18 ;subtracts low byte, result in R16
  10. SBC R17, R19 ;subtracts high byte plus low byte carry
  11. ;now the result is in R17:R16. Then copy it into var1
  12. STS var1, R16 ;copy low byte to var1
  13. STS var1+1, R17 ; copy high byte to var1

Figura 7. Resta 0x3AF2 - 0x1C7D (de 16 bits).

6. Instrucciones de comparación: CP/CPC/IPC

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.).

  • CP (ComPare). Compara dos registros mediante resta. 0001 01r4d4 d3d2d1d0 r3r2riro Su formato es el siguiente: CP Rd, Rr. ; Rd = Rr o Donde Rd, Rr puede ser RO ... R31.
  • CPC (ComPare with Carry). Compara dos registros con carry mediante resta. 0000 01r4d4 d3d2d1d0 r3r2riro Su formato es: CPC Rd, Rr -> ;Rd = Rr - C o Compara Rd con Rd y carry.

¿Non has encontrado lo que buscabas?

Explora otros temas en la Algor library o crea directamente tus materiales con la IA.