Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arquitectura Computadores
Arquitectura Computadores
ARQUITECTURA DE COMPUTADORES
Programa
1. Introduccin
Lenguajes de Programacin: Alto y Bajo nivel Lenguaje Ensamblador Lenguaje Mquina Repertorio de Instrucciones Propiedades Procesadores MIPS
2. Instrucciones
5. Tipos de Instrucciones
6. Ejemplos 7. Conclusiones
2
1. Introduccin
Los computadores ejecutan programas. Programa: secuencia de operaciones conducentes a resolver un problema determinado. Caractersticas de los programas Estn compuestos por secuencias de instrucciones o sentencias. Se escriben utilizando una notacin formal conveniente. Pueden ser escritos por personas (programadores), o bien pueden ser generados automticamente mediante una herramienta adecuada. Un programa en ejecucin se encuentra cargado en memoria principal. Lenguaje de programacin: una notacin formal para describir algoritmos o funciones que sern ejecutadas por un computador.
Los lenguajes de alto nivel facilitan la tarea de los programadores, ya que se encuentran ms prximos a la forma de pensar de los humanos.
Control estructurado de flujo. Comprobacin de tipos.
La programacin en lenguajes de alto nivel es ms productiva, ya que los programas son ms cortos (en cuanto a lneas de cdigo). Hoy en da la prctica totalidad de los programadores trabaja utilizando lenguajes de alto nivel.
4
Lenguaje mquina: el nico que la circuitera de la mquina es capaz de interpretar. Sus instrucciones se encuentran codificadas en binario.
Lenguajes simblicos: no son directamente interpretables por la circuitera de la mquina. Se codifican mediante smbolos alfanumricos, de puntuacin, parntesis, separadores, etc.
Los lenguajes de alto nivel son lenguajes simblicos no comprensibles directamente por la circuitera del computador. 6
Lenguaje ensamblador.
7
Lenguaje ensamblador
El lenguaje ensamblador (o lenguaje de ensamble, assembly language) es la representacin simblica de la codificacin binaria de un computador.
Cdigos de operacin representados mediante cdigos nemotcnicos. Datos y referencias codificadas mediante nombres simblicos (smbolos o etiquetas).
Existe una correspondencia biunvoca entre las instrucciones de mquina y las instrucciones de un lenguaje ensamblador.
Cada instruccin ensamblador es una codificacin simblica de una instruccin de mquina. Excepcin: ensambladores que proporcionan una mquina virtual con pseudoinstrucciones.
El lenguaje ensamblador debe ser traducido a lenguaje mquina para poder ser interpretado y ejecutado directamente por el computador.
C c o m p ile r
A ss e m b ly la n g u a g e p ro g ra m (fo r M IP S )
A ss e m b le r
B in a ry m a ch in e la n g u a g e p ro g ra m (fo r M IP S )
0 00 000 0 0 10 10 00 01 00 0 00 00 00 00 11 00 0 0 00 0 00 00 10 00 11 10 00 0 11 00 00 01 00 00 1 1 00 0 11 00 01 10 00 10 00 0 00 00 00 00 00 00 0 1 00 0 11 00 11 11 00 10 00 0 00 00 00 00 00 10 0 1 01 0 11 00 11 11 00 10 00 0 00 00 00 00 00 00 0 1 01 0 11 00 01 10 00 10 00 0 00 00 00 00 00 10 0 0 00 0 00 11 11 10 00 00 00 0 00 00 00 00 01 00 0
10
Program
Compiler
Assembler
Linker
Computer
11
Terminologa
Cdigo (programa) fuente: cdigo escrito por el programador.
Puede estar escrito en cualquier lenguaje: alto nivel, ensamblador, cdigo mquina (inusual). Puede contener errores sintcticos porque el programador haya escrito mal el programa.
12
Tradicionalmente los compiladores generaban cdigo mquina de inferior calidad que el que podan escribir programadores humanos.
Las memorias son mucho mayores hoy en da: el tamao ha dejado de ser crtico.
Los compiladores proporcionan hoy en da un cdigo mquina de alta calidad pequeo y rpido, haciendo poco atractiva la programacin en ensamblador.
Los programadores de ensamblador siguen teniendo ventaja en cuanto a que disponen de un mayor conocimiento global del programa que les permite realizar determinadas optimizaciones del cdigo que resultan muy difciles para los compiladores.
Puede ser recomendable programar en ensamblador cuando la velocidad del programa y su tamao sean crticos.
Caso especial: computadores empotrados (embedded computers).
Solucin mixta:
Programar en alto nivel la mayor parte del cdigo. Programar en ensamblador las partes crticas en cuanto a velocidad. Programar en ensamblador los sistemas con un tamao de memoria muy reducido.
13
Jerarqua de traduccin
C program Compiler
Assembler
Linker
Loader
Memory
14
15
Edicin
Ensamblaje
Errores sintcticos
Verificacin
16
Compilador
Traductor de lenguaje de alto nivel a ensamblador. Hoy todos los compiladores traducen directamente a lenguaje mquina. En tal caso generan un fichero con el cdigo objeto equivalente al cdigo fuente completo, junto con informacin necesaria para el montaje.
Si el cdigo fuente contiene errores sintcticos, no se genera cdigo objeto. Intrprete: traductor de lenguaje de alto nivel a lenguaje mquina.
Un intrprete traduce y ejecuta las instrucciones del programa fuente una por una, sin generar fichero alguno con cdigo objeto. Los intrpretes son propios de los llamados lenguajes interpretados (BASIC, 17 LISP, etc).
18
2. Instrucciones
Repertorio o juego de instrucciones: conjunto de instrucciones de mquina que es capaz de ejecutar el computador. Debe ser:
Completo: debe permitir resolver cualquier problema. Eficaz: los programas deben ser ejecutados en un tiempo razonable.
Operaciones soportadas: lgicas, aritmticas, etc. Mecanismos de bifurcacin: instrucciones de salto, subrutinas, etc., que modifican el flujo normal de ejecucin.
Esquema de bus nico para memoria y E/S. Modos de funcionamiento: usuario, ncleo (kernel), supervisor y depuracin. 21
CPU Registers $0
$31
Lo
Hi
Arithmetic unit
22
23
Mquina virtual: el programador puede utilizar instrucciones y direccionamientos que no estn incorporados en el hardware: pseudoinstrucciones.
Las pseudoinstrucciones son proporcionadas por el ensamblador, que se encarga de traducirlas a cdigo mquina. 24
COP
MD
OP1
OP2
RES
25
Un computador contendr instrucciones con diferentes formatos (= no todas las instrucciones del repertorio de un computador tienen el mismo formato).
Un computador dispone de pocos formatos de instruccin diferentes para simplificar su decodificacin. Los formatos son sistemticos: campos del mismo tipo suelen ocupar la misma longitud y la misma posicin.
El cdigo de operacin:
Permite distinguir entre los distintos formatos de instruccin de un computador. Indica la longitud y formato de los operandos (a veces en campos modificadores asociados al mismo).
Las longitudes de los formatos son fraccin o mltiplo del tamao de la palabra del computador.
Para acortar la longitud de los formatos se utiliza direccionamiento implcito: ninguna instruccin, salvo las de salto o bifurcacin, contiene la direccin de la siguiente instruccin que se va a ejecutar.
26
Formato de Instrucciones
MIPS presenta tres formatos bsicos de instruccin (32 bits): o o o Tipo R, o instrucciones de registro. Tipo I, instrucciones de transferencia de datos o ramificacin condicional. Tipo J, o de salto incondicional.
El compromiso elegido por los diseadores del MIPS es guardar todas las instrucciones con la misma longitud, por eso se requieren diferentes clases de formatos de instruccin para diferentes clases de instrucciones.
27
4. Modos de direccionamiento
Los operandos no estn contenidos en la instruccin de forma directa por:
Ahorro de espacio. Empleo de cdigo reubicable y reentrante. Hay datos formando estructuras ms o menos complejas.
Direccin efectiva de un operando: ubicacin exacta del mismo. Los operandos pueden ser referenciados desde la instruccin de mltiples formas, dando lugar a los modos de direccionamiento.
28
Modo de direccionamiento: mecanismo que permite conocer la ubicacin de un objeto (dato o instruccin). Un computador debe disponer de varios modos de direccionamiento. No todos los modos de direccionamiento estn implementados en todos los computadores. Los modos de direccionamiento disponibles estn determinados por la arquitectura interna de la mquina y por el repertorio de instrucciones.
29
30
Notacin: $n Los registros tienen alias, indicando la funcin para la que estn dedicados segn los convenios adoptados por programadores y compiladores. Ejemplo: add $16, $17, $18 suma el contenido del registro 17 con el registro 18 y lo almacena en el registro 16.
31
Register
Byte
Halfword
Word
Notacin: desplazamiento($n) Ejemplo: lw $16, 20($17) carga (load) en el registro 16 la palabra contenida 20 bytes ms all de la direccin almacenada en el registro 17.
32
El desplazamiento se alinea a mltiplo de 4 bits y se extiende en signo a 32 bits para calcular la direccin efectiva. Se utiliza para direcciones en bifurcaciones.
PC-relative addressing op rs rt Address Memory
PC
Word
Notacin: oculto en etiqueta. Ejemplo: bne $16, $17, Fin Si el contenido del registro 16 es del 17, entonces salta a la direccin indicada por la etiqueta Fin. 33
Direccionamiento inmediato
Campos: Inmediato de 16 bits. Los datos inmediatos se extienden a 32 bits. En ciertas instrucciones se hace extensin de signo. En otras instrucciones se hace extensin con ceros. Tambin se usa para indicar la longitud de un desplazamiento. En este caso el inmediato es de 5 bits. Permitido slo para operandos fuente.
Immediate addressing
op rs
rt
Immediate
Notacin: dato (sin prefijo). Ejemplo: addi $16, $17, 1 suma una unidad al contenido del registro 17 y el resultado lo almacena en el registro 16.
34
Direccionamiento pseudodirecto
Campos: Direccin de 26 bits. La direccin se desplaza dos bits a la izquierda, y se concatena a los cuatro primeros bits del contador de programa. Se utiliza en instrucciones de salto.
Pseudodirect addressing op Address Memory
PC
Word
Notacin: direccion (sin prefijo) Ejemplo: j 2500 salta a la direccin de memoria correspondiente a la palabra 2500 (direccin 10000).
35
Direccionamiento implcito
Un operando tiene direccionamiento implcito cuando est determinado por el cdigo de operacin. En MIPS hay pocos casos. Ejemplo: jal 2500 almacena la direccin de la siguiente instruccin del programa (PC + 4) en el registro de retorno $ra y salta a la direccin de memoria correspondiente a la palabra 2500 (direccin 10000), donde empieza una subrutina.
36
5. Tipos de Instrucciones
Transferencia de datos: mover, cargar, almacenar. Aritmticas para enteros: sumar, restar, multiplicar, dividir, etc. Aritmticas para coma flotante: sumar, restar, multiplicar, dividir, etc. Operaciones lgicas: and, or, not, xor, etc. Activacin condicional: si es r1 igual r2 entonces, saltar; si r1 es menor que r2, entonces saltar, etc. Instrucciones de rotacin y desplazamiento: desplazar hacia la izquierda/derecha, etc. Instrucciones de control de programa: saltar, saltar si menor, saltar y enlazar direccin, etc. Instrucciones de control de sistema: provocar excepcin, llamar al sistema operativo, etc.
37
Tipo R
Cd. Op.
Tipo R
(shamt: shift amount en instrucciones de desplazamiento) xxxxxx 6
31-26
Registro fuente 1 rs 5
25-21
Registro fuente 2 rt 5
20-16
Registro destino rd 5
15-11
Funct shamt 5
10-6
funct 6
5-0
Operacin
Registro operando 2
Operando 1 Operando 2
17 10001 18 10010
Destino
8 01000
Shamt
0 00000
Funcin
32 100000
Tipo I
Tipo I (carga o
almacenamiento, ramificacin condicional)
Cd. Op. xxxxxx 6
31-26
Registro base rs 5
25-21
Registro destino rt 5
20-16
Desplazamiento Inmediato 16
15-0
lw $t0, 32($s2)
Operacin
Registro base
Base
18 10010
Destino
8 01000
Desplazamiento
32 0000000000010000
Tipo J
Cd. Op. Direccin destino direccin 26
25-0
Tipo J
(salto incondicional)
xxxxxx 6
31-26
Cdigo operacin
2 000010
PC
4000
00000000000000000000111110100000
Destino
2500
00000000000000000010011100010000
40
41
42
Restaurar desde excepcin (Restaura el registro Status) Llamada a un servicio del sistema ($v0: nmero del servicio) Provoca una excepcin (cdigo 1 reservado para el depurador) No operacin
43
MIPS:
# Suponiendo que los datos a, b, c # estn asignados a los registros # $s0, $s1, $s2 respectivamente: add $s2, $s0, $s1 # $s2 = $s0 + $s1
44
Si slo podemos sumar dos registros en cada instruccin, cmo hacemos operaciones ms complicadas? Ejemplo: El mnemotcnico para la resta es sub.
C:
int a, b, c, d, e; a = ( b + c ) ( d + e );
MIPS:
# Suponiendo que los datos a, b, c, d, e # estn asignados a los registros # $s0, $s1, $s2, $s3 y $s4, respectivamente: add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1 # $t0 = $s1 + $s2 # $t1 = $s3 + $s4 # $s0 = $t0 - $t1
45
46
Los mnemotcnicos lw (load word) y sw (store word) permiten realizar transferencias entre memoria y registros de palabras enteras, utilizando la direccin de memoria almacenada en un registro base. Sintaxis:
lw registro_destino, desplazamiento(registro_origen) sw registro_origen, desplazamiento(registro_destino)
La posicin de memoria exacta se indica mediante un desplazamiento en bytes relativo a la direccin de memoria contenida en el registro origen (lw) o destino (sw).
47
48
Sentencias de Control
Destacamos las siguientes instrucciones: beq r1, r2, etiqueta (branch if equal)
Compara los valores contenidos en ambos registros. Si son iguales, el flujo de programa salta a la instruccin que corresponde a la etiqueta. Si no lo son, la instruccin que se ejecuta es la siguiente a sta.
Ejemplos
C:
if (i==j) goto L1; f = g + h; L1: f = f i;
MIPS:
# Suponiendo que a las 5 variables de f a j les # corresponden los registros de $s0 a $s4 beq $s3, $s4, L1 add $s0, $s1, $s2 L1: sub $s0, $s0, $s3 # if ($s3 == $s4) goto L1 # f = g + h # L1: f = f - i
50
COND?
FALSA
CIERTA
BLOQUE_THEN
51
Condicin IF-THEN-ELSE
C (variables enteras):
CIERTA COND?
MIPS:
IF: lw lw bge addiu addiu sw sw j addiu addiu sw sw $s0,X $s1,Y $s0,$s1,THEN $s0,$s0,-2 $s1,$s1,2 $s0,X $s1,Y END $s0,$s0,2 $s1,$s1,-2 $s0,X $s1,Y
FALSA
ELSE:
BLOQUE_ELSE
THEN:
BLOQUE_THEN
END:
52
Condicin REPEAT-UNTIL
MIPS:
# # # # Variable Variable Variable Variable A: $s0 B: $s1 MCD: $s2 RESTO: $s3
C (variables enteras):
BLOQUE_REPEAT
COND?
FALSA
CIERTA
li $s0,81 li $s1,18 REPEAT: move $s2,$s1 div $s0,$s1 mfhi $s3 move $s0,$s1 move $s1,$s3 UNTIL: bnez $s3,REPEAT # Habra que salvar # las variables A, B, MCD # y RESTO en memoria
53
Algoritmo ejemplo: clculo del mximo comn divisor, con gestin de variables mediante registros.
Condicin WHILE-DO
MIPS
C (variables enteras):
n = 5; fant = 1; f = 1; i = 2; while (i <= n) { faux = f; f = f + fant; fant = faux; i = i+1; }
COND?
FALSA
# # # # #
CIERTA
BLOQUE_WHILE
Variable N: $s0 Variable F: $s1 Variable FANT: $s2 Variable I: $s3 Variable FAUX: $s4 li $s0,5 li $s2,1 li $s1,1 li $s3,2 WHILE: bgt $s3,$s0,END move $s4,$s1 addu $s1,$s1,$s2 move $s2,$s4 addiu $s3,$s3,1 j WHILE END: # Salvar variables # en memoria
Condicin FOR
MIPS (versin PASCAL): C (variables enteras):
i:= valor_inicial
BLOQUE_FOR
# # # # #
i := i+1
Variable N: $s0 Variable F: $s1 Variable FANT: $s2 Variable I: $s3 Variable FAUX: $s4 li $s0,5 li $s2,1 li $s1,1 FOR: move $t0,$s0 li $s3,2 bgt $s3,$t0,END j BODY INC: addiu $s3,$s3,1 BODY: move $s4,$s1 addu $s1,$s1,$s2 move $s2,$s4 COND: bne $s3,$t0,INC END: # Salvar variables en memoria
55
Ejemplo
C:
int a, V[100]; int i, j, k; while (V[i] == k) { i = i + j; }
MIPS:
# Suponiendo que a corresponde a $s0, V[0] a $s1, # y las variables i, j, k a $s2 - $s4: Bucle: add $t1, $s2, $s2 # t1 = 2*i add $t1, $t1, $t1 # t1 = 4*i add $t1, $t1, $s1 # t1 = dir. de V[i] lw $t0, 0($t1) # t0 = V[i] bne $t0, $s4, Fin # si i!=k salta add $s2, $s2, $s3 # i = i + j j Bucle Fin:
56
Ejemplo
C:
int a, b, c, i, j; if (i == j) { a = b + c; } else { a = b - c; }
MIPS:
# Suponiendo que a, b, c corresponde a $s0 - $s2 # y las variables i, bne $s3, $s4, add $s0, $s1, j Fin SiNo: sub $s0, $s1, Fin: j a $s3 - $s4: SiNo # Si i!=j ir a SiNo $s2 # se evita si i!=j # Salta a Fin $s2 # se ejecuta si i!=j
57
7. Conclusiones
Programa y Lenguaje de Programacin: Alto y bajo nivel. Lenguaje Ensamblador y su correspondencia con el Lenguaje Mquina. Aplicaciones de la programacin en Ensamblador. Repertorio de Instrucciones del Lenguaje Mquina (caractersticas). Formato de Instrucciones. Modos de Direccionamiento. Ejemplos en los procesadores MIPS.
58