Nivel ISA Nivel de Arquitectura del Conjunto de Instrucciones (Macro-arquitectura)

Nivel de Arquitectura Nivel 6

Nivel de lenguaje orientado hacia problemas Traducción (compilador)

Nivel 5

Nivel de lenguaje ensamblador Traducción (ensamblador)

Nivel 4

Nivel de sistema operativo Interpretación parcial (sistema operativo)

Nivel 3

Nivel de arquitectura de conjunto de instrucciones Interpretación (microprograma) o ejecución directa

Nivel 2

Nivel de micro arquitectura Hardware

Nivel 1 Nivel 0

Nivel de lógica digital Nivel de dispositivos (diseño de transistores)

Conjunto de Instrucciones

Conjunto de instrucciones

Ej: Conjunto de instrucciones (PIC16F84) Etiqueta

Comando (opcode)

START:

MOVLW

Operando(s) 0xF2

Comentarios ;Load F2H in W

• El PIC16F84 tiene 35 instrucciones o comandos (RISC) • Existen 3 subconjuntos: – Instrucciones orientadas a los registros o bytes – Instrucciones orientadas a los bits – Operaciones con literales y de control

Nivel ISA Software

Nivel ISA

Hardware B

A

6

ULA

N Z

Almacén de control 512x36 bits (microprograma)

Teoría vs Practica Nivel ISA

Teoría Suma y multiplicación en un ciclo Ramificación compleja

Diseñador del compilador

ULA con 35 funciones Memoria, direcciones primos, superrápidas

Diseñador de Hardware

REG1 REG2 Registros de control de memoria

Señales de control de Memoria (rd, wr, fetch)

MAR

Decodificador

MPC

MDR

9

PC 8

Almacén de control 1024x36 bits (microprograma)

MBR

BUS C

SP LV

8

CPP JMPC

TOC OPC

Bit Alto

BUS B

JAMN JAMZ

H Flip-Flop (1bis)

BUS A B

A

Control Control

ULA

6 2

Desplazador

N Z

Palabra de Control

Ej. Mejorar el Mic1 (en la práctica)

Ej. Nuevo diseño de hardware (Mic2)

Preguntas del cliente al ofrecer el nuevo diseño • ¿La nueva Mic2 es compatible con la Mic1? • ¿Puedo cargar mi programas anteriores? • ¿Tendré que hacer alguna modificación a los programas?

Mantener compatibilidad hacia atrás • Mantener el nivel ISA similar o al menos hacerlo compatible con el modelo anterior

Diseñadores bajo presión

Nivel ISA • Conjunto de instrucciones • Como interfaz entre el hardware y el software, debe complacer a los diseñadores de hardware (fácil de implementar) y software (fácil generación de código) Conjunto de Instrucciones if(var1>0) … else …

movl @5, %eax movl $0, %ebx L1: cmpl $0, %eax … L2: …

Micro Arquitectura MAR=SP=SP-1;rd H=TOS … Z=OPC;if(Z)goto T; else F

¿Arquitectura en la actualidad? ¿Qué tienen en común estas computadoras?

Procesador Intel

Arquitectura del procesador Intel

Nivel de Micro-arquitectura Nivel ISA: x86 [1] [1] http://es.wikipedia.org/wiki/X86

Intel ha mantenido compatibilidad hacia atrás

Intel 80286 1982 Intel 80186 Intel 80188

1993

2000 Intel Pentium 4

Intel 80386

Intel 80486

Intel PentiumIntel Pentium MMX

2003 32 bits

1989

Intel Pentium PRO

1996

Intel Pentium M

Intel Core 2

2008 Intel Core i7

Intel Atom

64 bits

1985

1995

32 bits

Intel 8088

16 bits

1978

Intel 8086

Nivel ISA (Ej. Mic1) Micro Arquitectura

Conjunto de Instrucciones i=j+k if(i==3) k=0; else j=j-1

ILOAD j ILOAD k IADD ISTORE i ILOAD i BIPUSH 3 IF_ICMPEQ L1 ILOAD j BIPUSH 1 ISUB ISTORE j GOTO L2 L1: BIPUSH 0 ISTORE k L2:

Main1: PC=PC+1;fecth;goto (MBR) …

… iload1: iload2: iload3: iload4: iload5: …

H = LV MAR=MBRU+H; rd MAR=SP=SP+1 PC=PC+1; fetch; wr TOS=MDR; goto Main1

… ireturn1: ireturn2: ireturn3: ireturn4: ireturn5: ireturn6: ireturn7: ireturn8:

MAR=SP=LV;rd LV=MAR=MDR;rd MAR=LV+1 PC=MDR;rd;fetch MAR=SP LV=MDR MDR=TOS;wr;goto Main1

Generalidades del Nivel ISA • El nivel ISA es lo que produce un compilador (antes se codificaba a mano y en algunas semanas también) • Modelo de memoria 0x00 0x00 Byte Byte 0x01 0x01 Byte Byte • Registros – Visibilidad – Especiales (PC y SP) – Generales

• Instrucciones – – – –

Memoria X registros Aritméticas Comparación Booleanas

0x02 0x03 0x04 0x05 0x06

Byte Byte Byte Byte Byte

0x02 0x03 0x04 0x05 0x06

Byte Byte Byte Byte Byte

Byte Byte Byte Byte Byte Byte Byte

Mic1: Modelo de Memoria Dirección en bytes

• Física: – 4.294.967.296 bytes (4GB) – 1.073.471.824 palabras (1GB)

• Áreas: – Constantes (valores que no cambian y cargan al inicio del programa)

– Variables locales – Pila – Métodos

Pila de operandos actual 3

SP

Dirección en palabras

Marco de variables locales actual 3

LV Marco de variables locales 2 Reserva de constantes CPP

Marco de variables locales 1

Área de métodos PC

Mic1: Registros Registros de control de memoria

MAR MDR

Especiales PC MBR

SP LV

Especiales

CPP

BUS C

BUS B

TOS OPC

Generales

H

BUS A B

A

Control Control

6

2

ULA Desplazador

N Z

Mic1: Conjunto de Instrucciones Hex (op-code)

0x10 0x59 0xA7 0x60 0x7E 0x99 0x9B 0x9F 0x84 0x15 0xB6 0x80 0xAC 0x36 0x64 0x13 0x00 0x57 0x5F 0xC4

Mnemónico BIPUSH byte DUP GOTO distancia IADD IAND IFEQ distancia IFLT distancia IF_ICMPEQ distancia IINC numvar const ILOAD numvar INVOKEVIRTUAL despl IOR IRETURN ISTORE numvar ISUB LDC_W indice NOP POP SWAP WIDE

Significado Almacenar en la pila Copiar la palabra en el tope de la pila Ramificación incondicional Sacar dos palabras de la pila; meter su suma Sacar dos palabras de la pila; meter su AND booleano Sacar palabra de la pila y saltar sí es cero Sacar palabra de la pila y saltar sí es menor que cero Sacar dos palabras de la pila; saltar sí son iguales Sumar una constante a una variable local Almacenar variable local en pila Invocar un método Sacar dos palabras de la pila; almacenar su OR booleano Regresar de método con valor entero Sacar palabra de la pila y guardar en variable local Sacar dos palabras de la pila; almacenar su diferencia Mater en pila constante de la reserva de constantes No hacer nada Quitar palabra del tope de la pila Intercambiar las dos palabras en el tope de la pila Prefijo de instrucciones; la siguiente instrucción tiene un índice de 16 bits

Mic1: Ejemplo en tres niveles a1=a2+a3

Variables locales Inicio

Op-Code

Conjunto de Instrucciones

Micro Arquitectura

0x15 0x15 0x60 0x36

ILOAD a2 ILOAD a3 IADD ISTORE a1

Main1: PC=PC+1;fecth;goto (MBR) … iload1: H = LV iload2: MAR=MBRU+H; rd iload3: MAR=SP=SP+1 iload4: PC=PC+1;fetch; wr iload5: TOS=MDR; goto Main1 … iadd1: MAR=SP=SP-1;rd iadd2: H=TOS iadd3: MDR=TOS=MDR+H;wr;goto Main1 … istore1: H=LV istore2: MAR=MBRU+H Istore3: MDR=TOS;wr istore4: SP=MAR=SP-1;rd istore5: PC=PC+1;fetch istore6: TOS=MDR;goto Main1 …

Memoria

32 bits



SP LV

a3 a2 a1

Bytes

Palabras

0x0108 0x0102 0x0104 0x0101 0x0100 0x0100

… ILOAD a2

ILOAD a3 SP

SP

LV

a2 a3 a2 a1 …

LV

a3 a2 a3 a2 a1 …

IADD SP

LV

a2+a3 a3 a2 a1 …

ISTORE a1

SP LV

a3 a2 a2+a3 …

Ejercicio/Laboratorio • Implementar una instrucción ISA – Definición de op-code y operandos – Código de las microinstrucciones

Mic1: Ejercicio en tres niveles Op-Code

a1 = a2

a3 0x7A

Variables locales Inicio

Hex (op-code)



0x7A

a3 a2 a1

SP LV

… …

Main1: PC=PC+1;fecth;goto (MBR) … iload1: H = LV iload2: MAR=MBRU+H; rd iload3: MAR=SP=SP+1 iload4: PC=PC+1;fetch; wr iload5: TOS=MDR; goto Main1 …

… … IMUL …

Mnemónico INEW

LV

imul1: … imul2: … … imulN: … …

Significado Sacar dos palabras de la pila (