Ejemplos de registros reales - ITESCAM

Ejemplos de registros reales - ITESCAM Ejemplos de registros reales - ITESCAM

serdis.dis.ulpgc.es
from serdis.dis.ulpgc.es More from this publisher
17.04.2015 Views

Tema 2: Arquitectura del repertorio de instrucciones Visión del computador que tiene el programador en bajo nivel. Lo que el programador en lenguaje ensamblador (bajo nivel) debe conocer para escribir programas: - Tipos y formatos de las instrucciones. - Los registros del procesador. - Los tipos de operandos. - Los modos de direccionamiento. (Última modificación el 05/03/07) 1 2. Arquitectura del repertorio de instrucciones (ISA) 2.1 Introducción (diseño del ISA; cómo es una instrucción) 2.2 Los registros (del procesador) 2.2 Tipos de instrucciones (qué operaciones) 2.3 Tipos de operandos 2.4 Modos de direccionamiento (especificación de los operandos) 2.5 Formato de las instrucciones (codificación binaria) 2.6 Resumen de la ISA de la MIPS 2

Tema 2: Arquitectura <strong>de</strong>l repertorio <strong>de</strong> instrucciones<br />

Visión <strong>de</strong>l computador que tiene el programador en bajo nivel.<br />

Lo que el programador en lenguaje ensamblador (bajo nivel) <strong>de</strong>be<br />

conocer para escribir programas:<br />

- Tipos y formatos <strong>de</strong> las instrucciones.<br />

- Los <strong>registros</strong> <strong>de</strong>l procesador.<br />

- Los tipos <strong>de</strong> operandos.<br />

- Los modos <strong>de</strong> direccionamiento.<br />

(Última modificación el 05/03/07)<br />

1<br />

2. Arquitectura <strong>de</strong>l repertorio <strong>de</strong> instrucciones (ISA)<br />

2.1 Introducción (diseño <strong>de</strong>l ISA; cómo es una instrucción)<br />

2.2 Los <strong>registros</strong> (<strong>de</strong>l procesador)<br />

2.2 Tipos <strong>de</strong> instrucciones (qué operaciones)<br />

2.3 Tipos <strong>de</strong> operandos<br />

2.4 Modos <strong>de</strong> direccionamiento (especificación <strong>de</strong> los operandos)<br />

2.5 Formato <strong>de</strong> las instrucciones (codificación binaria)<br />

2.6 Resumen <strong>de</strong> la ISA <strong>de</strong> la MIPS<br />

2


2.1 Introducción<br />

Diseño <strong>de</strong>l ISA<br />

Es un nivel complicado <strong>de</strong> diseñar, ya que hay que tener en cuenta:<br />

El software (LANs) que tiene que soportar.<br />

La estructura <strong>de</strong>l hardware que lo soportará.<br />

Es la conexión entre ambos niveles: lenguaje que ambos tienen que<br />

enten<strong>de</strong>r.<br />

3<br />

Es un punto <strong>de</strong> encuentro <strong>de</strong>l diseñador <strong>de</strong> la estructura y el<br />

programador a bajo nivel <strong>de</strong>l computador (o el escritor <strong>de</strong>l compilador):<br />

- El diseñador <strong>de</strong> la estructura ve el nivel ISA como la<br />

funcionalidad que ésta <strong>de</strong>be dar al programador.<br />

- El programador se hace consciente <strong>de</strong> la estructura <strong>de</strong>finida por el<br />

diseñador: cómo usar los <strong>registros</strong>, qué operaciones tiene la ALU,<br />

cómo acce<strong>de</strong> a memoria y qué tipos <strong>de</strong> datos tiene.<br />

Objetivo común <strong>de</strong> los diseñadores <strong>de</strong> computadores:<br />

– Encontrar un lenguaje que haga fácil la construcción <strong>de</strong>l<br />

hardware y <strong>de</strong>l software (el compilador).<br />

– Maximizar el rendimiento y minimizar el coste.<br />

4


Características <strong>de</strong> las instrucciones <strong>de</strong> bajo nivel<br />

Los programas en este nivel se expresan en lenguaje ensamblador,<br />

swap:muli $2, $5,4<br />

add $2, $4,$2<br />

lw $16, 4($2)<br />

sw $16, 0($2)<br />

jr $31<br />

, y son traducidos a lenguaje máquina.<br />

00000000101000010000000000011000<br />

00000000100011100001100000100001<br />

10001100011000100000000000000000<br />

10101100011000100000000000000100<br />

00000011111000000000000000001000<br />

5<br />

El lenguaje máquina, lo interpreta y ejecuta directamente el hardware<br />

<strong>de</strong>l computador:<br />

Está formado por instrucciones simples: ór<strong>de</strong>nes que el procesador<br />

pue<strong>de</strong> interpretar y ejecutar.<br />

6


Una instrucción <strong>de</strong> bajo nivel <strong>de</strong>be contener toda la información<br />

necesaria para ser ejecutada.<br />

Tipos <strong>de</strong> instrucciones: una instrucción <strong>de</strong> este nivel especifica una<br />

or<strong>de</strong>n individual al procesador para:<br />

(1) procesar datos, o<br />

(2) controlar la secuencia <strong>de</strong> ejecución <strong>de</strong> las instrucciones.<br />

(1) Una instrucción <strong>de</strong> este tipo <strong>de</strong>be especificar:<br />

(i) El proceso <strong>de</strong> datos a realizar.<br />

(ii) Los datos a procesar.<br />

(2) Una instrucción <strong>de</strong> este tipo <strong>de</strong>be especificar:<br />

(i) La dirección <strong>de</strong> la siguiente instrucción a ejecutar (<strong>de</strong>stino <strong>de</strong>l<br />

salto).<br />

(ii) La condición, si la hay, para el cambio <strong>de</strong> secuencia.<br />

7<br />

(1) Las instrucciones para procesar datos <strong>de</strong>ben especificar el proceso<br />

<strong>de</strong> datos a realizar y los datos a procesar:<br />

(i) El proceso <strong>de</strong> datos es básico, el que pue<strong>de</strong> llevar a cabo la<br />

estructura <strong>de</strong>l procesador:<br />

(a) Una operación aritmética o lógica (<strong>de</strong> la ALU): suma, resta,<br />

AND, OR, <strong>de</strong>splazamiento…<br />

(b) Un movimiento <strong>de</strong> datos entre <strong>registros</strong> y/o memoria.<br />

(ii) Los datos, estarán en registro o en memoria:<br />

(a) Se <strong>de</strong>nominan operandos: habrá que especificar los dos<br />

operandos fuente (con los que se opera) y el <strong>de</strong>stino (resultado<br />

<strong>de</strong> la operación).<br />

(b) Habrá que especificar la fuente y el <strong>de</strong>stino <strong>de</strong>l movimiento <strong>de</strong><br />

los datos.<br />

8


Veamos una instrucción <strong>de</strong> cada tipo <strong>de</strong>l procesador MIPS:<br />

(1) Proceso <strong>de</strong> datos:<br />

(i) Operación aritmética o lógica:<br />

Suma<br />

add rd, rs, rt<br />

Poner la suma <strong>de</strong> los <strong>registros</strong> rs y rt en el registro rd.<br />

AND<br />

and rd, rs, rt<br />

Poner el Y lógico <strong>de</strong> los <strong>registros</strong> rs y rt en el registro rd.<br />

(ii) Movimiento <strong>de</strong> datos.<br />

Carga palabra<br />

lw rt, address<br />

Carga la palabra (32 bits) en la dirección <strong>de</strong> memoria address en el<br />

registro rt.<br />

Almacena palabra<br />

sw rt, address<br />

Almacena la palabra en el registro rt en la dirección <strong>de</strong> memoria<br />

address.<br />

9<br />

(2) Control <strong>de</strong> secuencia:<br />

Bifurcación si igual<br />

beq rs, rt, label<br />

Salta condicionalmente a la instrucción especificada por label si el<br />

registro rs es igual al registro rt.<br />

Salto<br />

j target<br />

Salta incondicionalmente a la instrucción en target.<br />

10


Sintaxis típica <strong>de</strong> una instrucción en lenguaje ensamblador<br />

Ejemplo: Lenguaje ensamblador <strong>de</strong>l procesador MIPS R2000/3000<br />

4 campos básicos: etiqueta, nemónico <strong>de</strong> la instrucción, operandos (2<br />

fuentes y 1 <strong>de</strong>stino) y comentarios (opcional)<br />

11<br />

Fíjate que el número <strong>de</strong> operandos fuente <strong>de</strong> una instrucción<br />

aritmética como la suma son dos.<br />

Esto permite tener una ALU más sencilla.<br />

Para evaluar expresiones aritméticas que aparecen en los lenguajes<br />

<strong>de</strong> alto nivel (LAN) habrá que ejecutar varias instrucciones aritméticas<br />

<strong>de</strong> bajo nivel.<br />

Ejemplo: la sentencia <strong>de</strong> alto nivel a=b+c+d+e se implementa con la<br />

secuencia <strong>de</strong> instrucciones <strong>de</strong> bajo nivel:<br />

add a, b, c<br />

add a, a, d<br />

add a, a, e<br />

Esto es un ejemplo <strong>de</strong> la diferencia <strong>de</strong> nivel <strong>de</strong> abstracción <strong>de</strong> un<br />

LAN y un lenguaje ensamblador ó máquina (1 instrucción <strong>de</strong> alto nivel<br />

equivale a 3 instrucciones <strong>de</strong> bajo nivel).<br />

12


2.2 Los <strong>registros</strong><br />

Pequeña memoria rápida en el procesador para almacenamiento<br />

temporal <strong>de</strong> información.<br />

Su número y función varían entre los distintos diseños <strong>de</strong><br />

arquitecturas <strong>de</strong>l repertorio <strong>de</strong> instrucciones.<br />

Hoy en día, casi todas las arquitecturas son <strong>de</strong> <strong>registros</strong> <strong>de</strong><br />

propósito general: conjunto <strong>de</strong> <strong>registros</strong> manejables por el<br />

programador, para contener operandos y especificar direcciones <strong>de</strong><br />

memoria.<br />

Históricamente existieron otras arquitecturas con otro tipo <strong>de</strong><br />

almacenamiento temporal:<br />

- De pila.<br />

- De acumulador.<br />

13<br />

Tipos <strong>de</strong> arquitecturas <strong>de</strong>l repertorio <strong>de</strong> instrucciones según el tipo <strong>de</strong><br />

almacenamiento temporal para los operandos:<br />

Almacenamiento <strong>Ejemplos</strong> Operandos Operando<br />

temporal<br />

explícitos <strong>de</strong>stino en …<br />

1. Pila HP 3000 0 Pila<br />

2. Acumulador PDP-8 1 Acumulador<br />

Motorola 6809<br />

3. Conjunto <strong>de</strong><br />

<strong>registros</strong><br />

IBM 360<br />

DEC<br />

VAX,MIPS<br />

2 ó 3 Registros o<br />

memoria<br />

Dón<strong>de</strong> están los operandos, en los distintos tipos <strong>de</strong> arquitectura:<br />

- <strong>de</strong> pila: implícitamente en la cima <strong>de</strong> la pila (memoria).<br />

- <strong>de</strong> acumulador: implícitamente uno <strong>de</strong> los fuente y el <strong>de</strong>stino en el<br />

registro acumulador y el otro fuente en memoria.<br />

- <strong>de</strong> <strong>registros</strong>: en <strong>registros</strong> o posiciones <strong>de</strong> memoria (2 ó 3<br />

operandos explícitos).<br />

14


Las arquitecturas <strong>de</strong> <strong>registros</strong> dominan hoy día.<br />

Ventajas:<br />

- Los <strong>registros</strong> son fáciles <strong>de</strong> usar por el compilador, pue<strong>de</strong>n ser<br />

asociados con las variables, con lo que se consigue:<br />

• una disminución <strong>de</strong>l tiempo <strong>de</strong> ejecución: reducción <strong>de</strong>l tráfico<br />

con memoria (los <strong>registros</strong> son más rápidos).<br />

• una mejor <strong>de</strong>nsidad <strong>de</strong> código: menos bits son necesarios para<br />

especificar un registro que una dirección <strong>de</strong> memoria.<br />

15<br />

Veamos una clasificación <strong>de</strong> las arquitecturas <strong>de</strong> <strong>registros</strong><br />

atendiendo a:<br />

(1) El número <strong>de</strong> operandos (2 ó 3) que se especifican<br />

explícitamente las instrucciones aritmético-lógicas.<br />

Si se especifican dos operandos, uno <strong>de</strong> ellos es fuente y <strong>de</strong>stino.<br />

(2) El número <strong>de</strong> operandos que pue<strong>de</strong>n estar en memoria en las<br />

instrucciones aritmético-lógicas (<strong>de</strong> 0 a 3).<br />

16


Las posibles combinaciones <strong>de</strong> estas 2 características son:<br />

Máximo número <strong>de</strong><br />

operandos<br />

explícitos por<br />

instrucción ALU (1)<br />

Número <strong>de</strong> operandos<br />

que pue<strong>de</strong>n estar en<br />

memoria por<br />

instrucción ALU (2)<br />

<strong>Ejemplos</strong><br />

2 0 IBM RT-PC<br />

3 0 SPARC, MIPS<br />

2 1 PDP-10, Motorola<br />

68000, IBM 360<br />

2 2 PDP-11<br />

3 3 VAX<br />

17<br />

Registros <strong>de</strong>l procesador<br />

Son <strong>de</strong> dos tipos:<br />

(1) Visibles al programador en lenguaje ensamblador: pue<strong>de</strong> ser<br />

utilizados explícitamente en una instrucción.<br />

(2) De control y <strong>de</strong> estado, usados por:<br />

(a) La unidad <strong>de</strong> control para controlar el funcionamiento <strong>de</strong> la<br />

CPU: proceso <strong>de</strong> instrucciones y accesos a memoria.<br />

(b) El SO para controlar la ejecución <strong>de</strong> los programas.<br />

18


(1) Registros manejables por el programador:<br />

Junto con la ALU forman el camino <strong>de</strong> datos.<br />

Se utilizan para contener los operandos <strong>de</strong> las instrucciones máquina<br />

o para especificar una dirección <strong>de</strong> memoria.<br />

Pue<strong>de</strong>n ser referenciados explícitamente en las instrucciones<br />

máquina.<br />

Por ejemplo en la MIPS se referencian por un número:<br />

add $9, $17, $2 ó lw $16, 4($2)<br />

19<br />

Los compiladores pue<strong>de</strong>n usarlos para asociarlos con variables y<br />

disminuir el tráfico con memoria.<br />

El ejemplo anterior (a=b+c+d+e)<br />

add a, b, c<br />

add a, a, d<br />

add a, a, e<br />

en realidad se implementa asociando las variables con <strong>registros</strong>:<br />

a - $8, b - $9, c - $10, d - $11, e - $12,<br />

<strong>de</strong> forma que el compilador generaría:<br />

add $8, $t9, $10<br />

add $8, $8, $11<br />

add $8, $8, $12<br />

20


Cuestiones <strong>de</strong> diseño <strong>de</strong> los <strong>registros</strong> manejables por el programador:<br />

(a) Respecto al uso que le pue<strong>de</strong> dar el programador:<br />

(1) De propósito general: pue<strong>de</strong>n contener datos y especificar<br />

direcciones (MIPS).<br />

(2) De datos: sólo pue<strong>de</strong>n contener datos.<br />

(3) De dirección: sólo para especificar direcciones (modos <strong>de</strong><br />

direccionamiento indirecto ó base+<strong>de</strong>splazamiento).<br />

(b) Número <strong>de</strong> <strong>registros</strong>:<br />

La experiencia dice que entre 8 – 32<br />

Menos no suficientes para contener variables muchas<br />

referencias a memoria.<br />

Más no reduce notablemente las referencias a memoria y aumenta<br />

la longitud <strong>de</strong> las instrucciones (más número <strong>de</strong> bits para especificar<br />

los <strong>registros</strong>).<br />

21<br />

(c) Tamaño <strong>de</strong> los <strong>registros</strong>:<br />

Habrá que <strong>de</strong>cidir si todos los <strong>registros</strong> tienen el mismo tamaño<br />

(MIPS) o no.<br />

(1) Los que han <strong>de</strong> contener direcciones, lo suficientemente largos<br />

para contener direcciones completas.<br />

(2) Los que han <strong>de</strong> contener datos, lo suficientemente largos para<br />

contener la mayoría <strong>de</strong> los tipos <strong>de</strong> datos: una palabra (tamaño<br />

habitual <strong>de</strong> los datos a procesar).<br />

22


(2) Registros <strong>de</strong> control y estado <strong>de</strong>l funcionamiento <strong>de</strong> la CPU:<br />

En la mayoría <strong>de</strong> las máquinas, no son manejables por el<br />

programador.<br />

Algunos lo serán mediante instrucciones ejecutadas en modo<br />

supervisor (control <strong>de</strong>l SO).<br />

(a) Registros <strong>de</strong> control:<br />

(1) Contador <strong>de</strong> programa: contiene la dirección <strong>de</strong> la instrucción a<br />

ejecutar.<br />

(2) Registro <strong>de</strong> instrucción: contiene la instrucción a ejecutar.<br />

(3) Registro <strong>de</strong> dirección <strong>de</strong> memoria: contiene la dirección <strong>de</strong> una<br />

posición <strong>de</strong> memoria a ser leída o escrita.<br />

(4) Registro <strong>de</strong> buffer <strong>de</strong> memoria: contiene la palabra <strong>de</strong> datos a<br />

escribir en memoria o que ha sido leída.<br />

23<br />

En esta figura vemos los <strong>registros</strong> <strong>de</strong> control.<br />

24


(b) Registro <strong>de</strong> estado (<strong>de</strong>l programa en ejecución)<br />

Contiene los códigos <strong>de</strong> condición y otra información <strong>de</strong> estado.<br />

(i) Los códigos <strong>de</strong> condición (indicadores o ‘flags’) son valores<br />

binarios (bits) que especifican si se ha producido una <strong>de</strong>terminada<br />

circunstancia en una operación ALU.<br />

Pue<strong>de</strong>n ser <strong>de</strong> signo, cero, acarreo, overflow…<br />

Son utilizados implícitamente en las instrucciones <strong>de</strong> salto condicional.<br />

(ii) A<strong>de</strong>más <strong>de</strong> los códigos <strong>de</strong> condición la palabra <strong>de</strong> estado pue<strong>de</strong><br />

contener bits para:<br />

(1) Habilitación/<strong>de</strong>shabilitación <strong>de</strong> interrupciones.<br />

(2) Modo supervisor/usuario (<strong>de</strong> funcionamiento <strong>de</strong> la CPU).<br />

25<br />

<strong>Ejemplos</strong> <strong>de</strong> organización <strong>de</strong> <strong>registros</strong>: 2 microprocesadores<br />

contemporáneos (1978):Motorola MC68000, Intel 8086.<br />

26


Motorola MC68000:<br />

Registros <strong>de</strong> 32 bits: 8 <strong>de</strong> datos y 9 <strong>de</strong> dirección:<br />

(1) Los <strong>de</strong> datos:<br />

También se usan como <strong>registros</strong> índice (un modo <strong>de</strong><br />

direccionamiento).<br />

Permiten operaciones con 8,16 y 32 bits según <strong>de</strong>termine el código <strong>de</strong><br />

operación (MIPS).<br />

(2) Los <strong>de</strong> direcciones:<br />

A7 y A7’ punteros <strong>de</strong> pila para usuarios y para SO respectivamente.<br />

(3) Contador <strong>de</strong> programa <strong>de</strong> 32 bits y registro <strong>de</strong> estado <strong>de</strong> 16.<br />

Decisiones <strong>de</strong> diseño:<br />

(1) Repertorio <strong>de</strong> instrucciones regular sin <strong>registros</strong> <strong>de</strong> uso especial.<br />

(2) División en dos grupos, ahorro <strong>de</strong> 1 bit (compromiso razonable<br />

entre generalidad total y código más compacto).<br />

27<br />

Intel 8086<br />

Enfoque diferente en la organización <strong>de</strong> los <strong>registros</strong>: cada registro<br />

tiene un uso particular aunque algunos pue<strong>de</strong>n tener uso general.<br />

4 <strong>registros</strong> <strong>de</strong> datos <strong>de</strong> 16 bits, direccionables también como bytes.<br />

Uso general en algunas instrucciones e implícito en otras, p.e. la<br />

multiplicación usa siempre el acumulador.<br />

Registros <strong>de</strong> segmento uso <strong>de</strong>dicado e implícito, apuntan a los<br />

segmentos <strong>de</strong> datos, código y pila (base + <strong>de</strong>splazamiento).<br />

Los índice implícitos en algunas operaciones: contienen<br />

<strong>de</strong>splazamientos <strong>de</strong>ntro <strong>de</strong> cada segmento(base + <strong>de</strong>splazamiento).<br />

Decisiones <strong>de</strong> diseño: codificación compacta flexibilidad reducida.<br />

28


Intel 80386<br />

Microprocesador <strong>de</strong> 32 bits, diseñado como una ampliación <strong>de</strong>l 8086<br />

(16 bits).<br />

Conserva la organización <strong>de</strong> <strong>registros</strong> original integrada en la nueva<br />

organización proporciona compatibilidad ascen<strong>de</strong>nte para los<br />

programas <strong>de</strong>l 8086.<br />

Tuvieron que limitar la flexibilidad al diseñar la organización <strong>de</strong> los<br />

<strong>registros</strong>.<br />

El Pentium tiene la misma organización <strong>de</strong> <strong>registros</strong> que el 386.<br />

29<br />

Características <strong>de</strong>l banco <strong>de</strong> <strong>registros</strong> <strong>de</strong>l MIPS R2000<br />

30


(1) Banco <strong>de</strong> <strong>registros</strong> <strong>de</strong> propósito general:<br />

32 Registros <strong>de</strong> 32 bits (CPU).<br />

Se i<strong>de</strong>ntifican como $0 a $31. Ejemplo: add $2, $3, $4 ($2=$3+$4)<br />

El registro $0 tiene permanentemente el valor 0.<br />

(2) Dos <strong>registros</strong> especiales <strong>de</strong> 32 bits (CPU):<br />

HI y LO: almacenan los resultados <strong>de</strong> multiplicaciones y divisiones.<br />

(3) Banco <strong>de</strong> <strong>registros</strong> <strong>de</strong> <strong>reales</strong> (FPU)<br />

32 <strong>registros</strong> <strong>de</strong> 32 bits que pue<strong>de</strong> utilizarse como:<br />

- 32 <strong>registros</strong> <strong>de</strong> 32 bits con formato IEEE 754 <strong>de</strong> simple<br />

precisión. Se i<strong>de</strong>ntifican por $f0, $f2, $f4, …, $f30.<br />

- 16 <strong>registros</strong> <strong>de</strong> 64 bits con formato IEEE 754 <strong>de</strong> doble<br />

precisión. Se i<strong>de</strong>ntifican por $f0, $f2, $f4, …, $f30.<br />

31<br />

Convención en el uso <strong>de</strong> los <strong>registros</strong> en la MIPS.<br />

Nombre Número Uso<br />

<strong>de</strong>l<br />

registro<br />

zero 0 Constante 0<br />

at 1 Reservada para ensamblador<br />

v0 2 Para <strong>de</strong>volver resultados <strong>de</strong> funciones<br />

v1 3 “<br />

a0 4 Argumento 1 a una rutina<br />

a1 5 Argumento 2 “<br />

a2 6 Argumento 3 “<br />

a3 7 Argumento 4 “<br />

t0..t7 8..15 Temporal (no se guarda valor entre llamadas)<br />

s0..s7 16..23 Temporal (el valor se guarda entre llamadas)<br />

t8, t9 24, 25 Temporal (no se guarda valor entre llamadas)<br />

k0, k1 26, 27 Reservado para el kernel <strong>de</strong>l sistema operativo<br />

gp 28 Puntero al área global (apunta al bloque <strong>de</strong> datos)<br />

sp 29 Puntero <strong>de</strong> pila<br />

fp 30 Puntero <strong>de</strong> marco <strong>de</strong> pila<br />

ra 31 Dirección <strong>de</strong> retorno, usado por llamadas a rutina<br />

32


Esta es la visión <strong>de</strong> los <strong>registros</strong> <strong>de</strong> la MIPS que nos da el PCSpim.<br />

33

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!