Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

L3.05 Lenguaje Ensamblador de CODE-2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

28/10/2014

Estructura de Computadores
PROGRAMACIÓN DE CODE-2

Tema 3. Estructura de computadores

• L3.1 Elementos constitutivos de un procesador.


• L3.2 Funcionamiento del procesador: ejecución de instrucciones.
• L3.3 Diseño de la Unidad de Control. Procesadores integrados.
• L3.4 Lenguaje máquina del procesador CODE2.
• L3.5 Programación de CODE2.
• L3.6 Utilización de CODE2.
• L3.7 Lenguaje ensamblador para el CODE2.
• L3.8 Organización y jerarquía de memoria.
• L3.9 Memoria interna.
• L3.10 Memoria externa.
• L3.11 Conectando todo: estructura de un PC.

Programación de CODE-2
Alberto Prieto 1
28/10/2014

Proceso de creación de un programa (Tema 5)

• Planteamiento del problema.


– Conocimiento al detalle y minucioso de lo que hay que hacer.
• Análisis del problema.
– Se exploran distintas alternativas para solucionar el problema.
– Se determinan los datos de E/S que se necesitan y su formato más adecuado.
• Diseño del algoritmo que resuelve el problema.
• Implementación del algoritmo: Programación.
– Representar el algoritmo en un lenguaje de programación adecuado.
– Traducir el programa a código máquina.
– Ejecutarlo.
• Prueba y optimización:
– Comprobar si el programa es eficiente y que funciona correctamente.
– Búsqueda de otras opciones que resuelva mejor el problema o partes de él.

Programación: redacción de un algoritmo en términos de las


instrucciones del repertorio

• El procesador sólo “entiende” instrucciones máquina.


– Por ejemplo, en Code-2 si queremos copiar un dato de una posición de
memoria a otra, p.e. M(00BB) M(00AA) , no tenemos otra alternativa
que hacerlo a través de un registro:
rF  M(00AA),
M(00BB)  rF

• Además de que funcione el programa correctamente; por lo general se


buscan dos objetivos que suelen ser contrapuestos:
• Tiempo de ejecución el menor posible.
• Capacidad de memoria la menor posible.

Programación de CODE-2
Alberto Prieto 2
28/10/2014

En esta lección, vamos a

• Realizar algún ejercicio y un programa completo

Ejercicio

• Sumar el contenido de la posición de memoria


d1=0040 con el de la posición d2=0080 y
almacenar el resultado de la suma en d3=00C0; Inicio
es decir:
Hacer M(00C0)  M(0040) + M(0080)
r3  M(0040);
r4  M(0080);
r5  r3 + r4;
• Disponemos de una instrucción de suma, con la M( 00C0)  r5
que necesariamente los datos a sumar deben
estar en dos registros y el resultado se obtiene
también en un registro. Fin

– Decidimos utilizar los registros r3, r4 y r5.

D/6

Programación de CODE-2
Alberto Prieto 3
28/10/2014

Programación del ejercicio

• Elegimos arbitrariamente la dirección de inicio de las instrucciones (H’0015)


• Vamos a utiliza direccionamiento directo por medio del campo v de la instrucción (rD=0)
• Las 6 instrucciones habrá que cargarlas a partir de la dirección H’0015.
• Para ejecutar el programa habrá que poner H’0015 en el PC (con una instrucción de salto)

Dirección Nemónico Explicación


0015 LLI rD,00 Inicializar rD a 0
0016 LD r3,[40] r3  M(rD +0040)
0017 LD r4,[80] r4  M(rD+0080)
0018 ADDS r5,r3,r4 r5  r3+r4
0019 ST [C0],r5 M(rD+C0)  r5
001A HALT Parar (final de programa)

D/7

Programa en código máquina

Dirección Nemónico Inst. máq. Explicación


0015 LLI rD,00 2D00 Inicializar rD a 0
0016 LD r3,[40] 0340 r3  M(rD +0040)
0017 LD r4,[80] 0480 r4  M(rD+0080)
0018 ADDS r5,r3,r4 6534 r5  r3+r4
0019 ST [C0],r5 15C0 M(rD+C0)  r5
001A HALT F000 Parar (final de programa)

D/8

Programación de CODE-2
Alberto Prieto 4
28/10/2014

Planteamiento del problema

• Realizar un programa en CODE-2 que sume uno a uno los elementos de


dos tablas (vectores), T1 y T2, y deje los resultados en otra tabla T3, es
decir:
T3(i) = T1(i) + T2(i); i= 0, 1, …., 31

• Suponer que:
– T1 comienza en d1=0040,
– T2 en d2=0080, y
– T3 en d3=00C0.
– La longitud de las tablas es de 32 elementos, nT=H’20.

D/9

MEMORIA
Análisis del problema dirección  16 bits 
o o
o o
o o

d1= 0040 
• En realidad es repetir 32 veces
32 elementos
las instrucciones del ejercicio de T1
suma dos datos en memoria r3  M(d1)
r4  M(d2)
llevando el resultado a 32 r5  r3+r4 d2= 0080 

posiciones sucesivas de M(d3)  r5


T2
memoria, a partir de d3=00C2.

d3= 00C0 
– En vez de repetir 32 veces, T3
las instrucciones del ejercicio
se debe hacer un bucle. o o
o o
o o

D / 10

Programación de CODE-2
Alberto Prieto 5
28/10/2014

Inicio
Descripción del algoritmo:
Pseudocódigo u organigrama. Parámetros iniciales:
r0 0, r11, nT=0020, i=0
a
– Dar valores iniciales Leer dato de T1
r3 ← M(d1+i)
(a) – Leer el dato de T1 y llevarlo a r3
– Leer el dato de T2 y llevarlo a r4 Leer dato de T2
r4 ← M(d2+i)
– Sumar los dos elementos
Suma de datos
– Llevar el resultado a T3 r5 ← r3 + r4

– Incrementar i Memorizar suma en T3


M(d3+i) ← r5
– Ver si hemos terminado ¿nT-i = 0?
no: leemos el siguiente elemento (a) Incrementar i
i←i+1
si: hemos terminado
Comparar nT con i
nT - i
b si no
Fin Z=1

D / 11

Comentarios

• Utilizamos direccionamiento indexado:


– rD va a actuar como registro índice (valor i) y la
dirección efectiva va a ser v+rD; donde
v=d1=0040 (Tabla 1), v=d2 = 0080 (Tabla 2) y
v=d3=00C0 (Tabla T3).

• Conforme se va ejecutando cada iteración del


bucle el valor del índice va cambiando: i = 0, 1, 2,
… , H’20, y las direcciones efectivas de las tablas
van siendo:
– dET1= v+rD= 0040, 0041, 0042, …
– dET2= v+rD= 0080, 0081, 0082, …
– dET1= v+rD= 00C0, 00C1, 00C2, …

D / 12

Programación de CODE-2
Alberto Prieto 6
28/10/2014

Implementación (codificación) del algoritmo

• Asignación de registros y de memoria


Parámetro o
Rtro. Dcc. memoria Comentario
variable
0000 r0 Para pasar el contenido de un registro a otro
0001 r1 Para incrementar el índice i
nT r2 Nº de elementos de la tabla
T1(i) r3 Elemento de la tabla T1
T2(i) r4 Elemento de la tabla T2
T3(i) r5 Suma, a almacenar en la tabla T3
i rC Registro de indexación (0, 1,…, nT)
Programa 0010 Dirección de carga del progra

D / 13

Dirección Nemónico Explicación

Codificación en nemónicos 0010


0011
LLI r0,00
LLI r1,01
Inicializar r0 a 0
Inicializar r1 a 1
0012 LLI r2,20 Tamaño de tabla: nT=H’20
0013 LLI rC,00 Inicialización del índice: i=0
0014 LLI rD,00 Inicialización de rD
a 0015 ADDS rD,rC,r0 Pasar el índice al registro de dirección
0016 LD r3,[40] Llevar a r3 el elemento de T1
0017 LD r4,[80] Llevar a r4 el elemento de T2
0018 ADDS r5,r3,r4 Suma de elementos de T1 y T2 en r5
0019 ST [C0],r5 Almacenar nuevo elemento de T3
001A ADDS rC,rC,r1 Incrementar el índice
001B LLI rD,20 Cargar en rD dirección de salto (final)
001C SUBS rF,r2,rC Comparar nT con i
001D BZ Si Z=1 el programa concluye, salta a (b)
001E LLI rD,15 Cargar en rD dirección de salto (continuar)
001F BR Salto a (a)
b 0020 HALT Final del programa

Programación de CODE-2
Alberto Prieto 7
28/10/2014

Dirección Nemónico Máquina Explicación

Programa en código 0010 LLI r0,00 2000 Inicializar r0 a 0


0011 LLI r1,01 2101 Inicializar r1 a 1
(lenguaje) máquina
0012 LLI r2,20 2220 Tamaño de tabla: nT=H’20
0013 LLI rC,00 2C00 Inicialización del índice: i=0
0014 LLI rD,00 2D00 Inicialización de rD
a 0015 ADDS rD,rC,r0 6DC0 Pasar el índice al registro de dirección
0016 LD r3,[40] 0340 Llevar a r3 el elemento de T1
0017 LD r4,[80] 0480 Llevar a r4 el elemento de T2
0018 ADDS r5,r3,r4 6534 Suma de elementos de T1 y T2 en r5
0019 ST [C0],r5 15C0 Almacenar nuevo elemento de T3
001A ADDS rC,rC,r1 6CC1 Incrementar el índice
001B LLI rD,20 2D20 Cargar en rD dirección de salto (final)
001C SUBS rF,r2,rC 7F2C Comparar nT con i
001D BS C200 Si S=1 el programa concluye, salta a (b)
001E LLI rD,15 2D15 Cargar en rD dirección de salto (continuar)
001F BR C000 Salto a (a)
b 0020 HALT F000 Final del programa

15

Comentarios para uso del programa

Programa de suma de dos vectores (tablas)


Posición inicial del programa  H’0010
El programa suma las tablas (de H’20 elementos) ubicadas a partir de las
posiciones H’40 y H’80, elemento a elemento, almacenado la tabla
resultante a partir de la posición H’C0

D/
16

Programación de CODE-2
Alberto Prieto 8
28/10/2014

Metodología para hacer un programas en LM

• Describir el algoritmo a implementar por medio de un organigrama o con


pseudocódigo.
• Asignación de memoria:
• de registros y de posiciones de memoria para los parámetros y variables
utilizadas en el programa
• de la dirección de inicio del programa.
• Redactar el programa en nemónico.
• Codificar las instrucciones en código máquina (hexadecimal o binario)
• Documentar el programa (comentarios para su uso)

D / 17

Símbolos de un organigrama

Inicio/Fin: Asignaciones: E/S: Saltos/Bifurcaciones: Conexiones:

Inicio r5 ← r3 + r4 No Si
r2  IP01 Z=1 a
r4 ← M(d2+i)

Fin
OPA7  r5

D / 18

Programación de CODE-2
Alberto Prieto 9
28/10/2014

Resumen y conclusiones

• En esta videoclase hemos realizado un programa completo en código máquina de Code-2, siguiendo los
siguientes pasos:
– Descripción del algoritmo a implementar con un organigrama.
– Asignación de memoria y de registros.
– Redacción del programa en nemónicos.
– Transcripción a código máquina, y
– Documentación del programa (comentarios en los nemónicos e instrucciones de uso).

• También hemos explicado los principales símbolos que se utilizan para confeccionar organigramas.

• Hemos puesto en práctica los siguientes principios:


– El “arte de programar” incluye la capacidad de descomponer las funciones descritas en el algoritmo en
términos de las instrucciones del repertorio.
– La utilización de direccionamiento indexado (con ayuda del registro rD) permite acceder fácilmente a
posiciones consecutivas de memoria, o, en general, que las direcciones de acceso sean variables dentro del
propio programa.
– Un organigrama permite visualizar de forma precisa y muy clara las funciones a realizar para implementar un
algoritmo. En programas complejos es de mucha utilidad pues facilita la optimización del programa,
reduciendo la capacidad que ocupe o el tiempo de ejecución.

19

Programación de CODE-2
Alberto Prieto 10

También podría gustarte