Está en la página 1de 13

28/10/2014

Estructura de Computadores
LENGUAJE ENSAMBLADOR 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.

Lenguaje ensamblador de CODE-2


Alberto Prieto 1
28/10/2014

Contenidos

• Formato de las instrucciones de ensamblador.


• Directivas o pseudoinstrucciones.
• Ambigüedades.
• Ejemplo de programa en ensamblador.
• Entorno integrado de programación y emulación.
• Computadores RISC y CISC.
• Conclusiones.

D/3

Ventajas e inconvenientes de los lenguajes máquina

• VENTAJAS del lenguaje máquina:


• Directamente utilizable por el computador
• Mínimo volumen de memoria utilizado
• Máxima velocidad de ejecución (el programador se adapta a la arquitectura
hardware de que dispone)

• INCONVENIENTES del lenguaje máquina:


• Repertorio de instrucciones muy reducido e inflexible
• Redacción del programa muy laboriosa
– códigos numéricos
– asignación de memoria hecha por el programador, etc.
• Programas muy poco legibles

D/4

Lenguaje ensamblador de CODE-2


Alberto Prieto 2
28/10/2014

Concepto de lenguaje ensamblador

• La idea fundamental es facilitar el trabajo del usuario del computador


– Cuando programamos en LM hay tareas que son muy rutinarias:
• Asignación de registros y de memoria
• Pasar los nemónicos a código máquina.
• Podemos hacer un programa (traductor) que realice estas tareas

• El lenguaje ensamblador mantiene las ventajas y reduce los inconvenientes de los LM:
– Utiliza nombres simbólicos, en vez de números:
• nemónicos para el código de operación
• nombres de variables en lugar de direcciones de registros o de memoria.
– Programas más fáciles de entender y desarrollar
– No es ejecutable directamente por el procesador. Se necesita un programa
traductor (ensamblador) que transforme de LE a LM.

D/5

Formato en ensamblador para CODE-2

[ETIQUETA:] NEMÓNICO OPERANDOS [;COMENTARIO]


P1: ADDS P,P,uno ;incrementar P

• Etiqueta:
– campo alfanumérico opcional acabado en “:”, que se puede
utilizar para identificar la posición de las instrucciones. En las
instrucciones de salto es el identificativo o etiqueta de la
instrucción a la que se desea saltar (recuérdese que
previamente hay que cargar en rD la dirección de salto).

Lenguaje ensamblador de CODE-2


Alberto Prieto 3
28/10/2014

Formato de las instrucciones de ensamblador


[ETIQUETA:] NEMÓNICO OPERANDOS [;COMENTARIO]
P1: ADDS P,P,uno ;incrementar P
• Nemónico:
– Nombre simbólico (nemónico) que identifica la instrucción (LD, ST, LLI, LHI,...)
• Operandos:
– Parámetros asociados a la instrucción (registros, valores inmediatos, puertos de E/S
o nombres simbólicos de parámetros o variables).
• rx, rs, ra es un registro (r0 a rF o R0 a RF) o un nombre simbólico de registro (definido
con EQU) o una variable-registro (definida con DR).
• v es un número de 0 a 255, en base decimal (D’número), hexadecimal (H’número), octal
(Q’número) o binaria (B’número).
• IPv o OPv: código del puerto de entrada o salida
• Comentario:
– campo alfanumérico opcional, precedido por “;”, para hacer comentarios que
hagan más legible el programa.

D/7

Instrucciones de ensamblador
Nombre Ensamblador Ejemplo Significado del ejemplo
Cargar LD rx,[rD+v] LD r4,[H’01] r4 ←M(rD+H’01)
Almacenar ST [rD+v],rx ST [H’00],rE M(rD+H’00)←rE
Carga inmediata baja LLI rx,v LLI r7,H’07 r7(15:8)←H’00; r7(7:0)←H’07
Carga inmediata alta LHI rx,v LHI r7, H’AB r7(15:8)←H’AB
Entrada IN rx,IPv IN rD,IP1 rD←IP1
Salida OUT OPv,rx OUT OPA,r3 OP0D←rx
Suma ADDS rx,rs,ra ADDS rD,r3,r4 rD←r3+r4
Resta SUBS rx,rs,ra SUBS rF,r1,r0 rF←r1-r0
NAND NAND rx,rs,ra NAND r7,r3,r5 r7←(r3·r5)’
Desplaza izquierda SHL rx SHL r6 C←r6(15), r6(i)←r6(i-1), i=15,…,1; r6(0)←0
Desplaza derecha SHR rx SHR r5 C←r5(0), r5(i)←r5(i+1), i=0,…,14; r5(15)←0
Desplaza arit. dcha. SHRA rx SHRA r8 C←r8(0), r8(i)←r8(i+1), i=0,…,14
Salto incondicional BR BR rD←dir_P7; PC←rD
Salto si resultado cero BZ BZ Si Z=1 , rD←dir_alfa; PC←rD
Salto si resultado negativo BS BS Si S=1 , rD←dir_P3; PC←rD
Salto si resultado con acarreo BC BC Si C=1 , rD←dir_a; PC←rD
Salto si desbordamiento BV BV Si V=1 , rD←dir_b; PC←rD
Llamada incondicional a subrutina CALLR CALLR rD←dir_P1, rE←rE-1, M(rE)←PC, PC←rD
Llamada si resultado cero CALLZ CALLZ Si Z=1, rD←dir_a, rE←rE-1, M(rE)←PC, PC←rD
Llamada si resultado negativo CALLS CALLS Si S=1, rD←dir_b, rE←rE-1, M(rE)←PC, PC←rD
Llamada si resultado con acarreo CALLC CALLC Si C=1, rD←dir_f, rE←rE-1, M(rE)←PC, PC←rD
Llamada si desbordamiento CALLV CALLV Si V=1, rD←dir_c, rE←rE-1, M(rE)←PC, PC←rD
Retorno RET PC← M(rE); rE←rE+1
Parar HALT Parar
8

Lenguaje ensamblador de CODE-2


Alberto Prieto 4
28/10/2014

Directivas (pseudoinstrucciones)

• Órdenes para el traductor que no se corresponden con ningún código máquina:


– ORG (origen) para especificar la dirección de memoria de inicio del programa.
• ORG H’0020 ;inicio programa.
– END indica el final de las instrucciones en ensamblador.
– EQU (equiparar) para dar nombres simbólicos a registros, puertos y valores
inmediatos (v).
• haber EQU r2 ; podemos usar haber ó r2
– DW (define word) para definir una variable en la memoria
• debe DW D’466 ; definimos la variable “debe” con valor 466.
– DATA sirve también para introducir datos en memoria. Debe ir precedida de una
directiva ORG que indique la posición de memoria a partir de la que se quieren
introducir los datos.

D/9

Directivas o pseudoinstrucciones

– DR (define register) para definir una variable en un registro


• Debe DR H’AA71 ; reserva un registro para la variable Debe con valor inicial H’AA71

– INCLUDE (incluir) para insertar, en cualquier punto, un archivo en ensamblador.


• INCLUDE fichero.asm

– Directivas para indicar el lugar (dirección) de los saltos:


• LLI rD,lo(etiqueta instrucción a saltar)
• LHI rD,hi(etiqueta instrucción a saltar)

D / 10

Lenguaje ensamblador de CODE-2


Alberto Prieto 5
28/10/2014

Ambigüedades

No hay que caer en los siguientes errores que pueden producir


ambigüedades:

– Utilizar la misma etiqueta para distintas instrucciones.


– Usar como nombres para las variables-registro los nombres
originales de los registros (r0, r1, …, rF ó R0, R1,…, RF).
– Utilizar el mismo nombre simbólico para dos variables distintas.

D / 11

Ejemplo de programa en ensamblador

• Planteamiento del problema


– A partir de la posición A730 de la memoria de CODE-2 se tiene un texto (cadena de
caracteres) Unicode, que finaliza con el carácter de control ETX (fin de texto). Hacer un
programa que sustituya los caracteres punto y coma (;) por coma (,) y proporcione por el
puerto de salida OP2 el número de sustituciones que se efectúen.

• Parámetros y variables a utilizas


– ETX, carácter de control ETX (H’0003).
– PYC, carácter punto y coma “;” (H’003B).
– C, carácter coma “,” (H’002C).
– UNO, constante 1.
– P, puntero de la tabla. Su valor inicial debe ser H’A730.
– EC, elemento de la cadena en análisis.
– NC, número de cambios. Debe inicializarse a 0.

D / 12

Lenguaje ensamblador de CODE-2


Alberto Prieto 6
28/10/2014

Algoritmo. Descripción en pseudocódigo


y en organigrama
• Paso 1) Captar un elemento: EC←M(P)
• Paso 2) Comparar con ETX (EC-ETX)
• Paso 3) Si Z=1 ir al Paso 11, sino continuar
• Paso 4) Comparar con PYC (EC-PYC)
• Paso 5) Si Z=1 ir al Paso 8, sino continuar
• Paso 6) Incrementar puntero tabla: P←P+1
• Paso 7) Ir al Paso 1.
• Paso 8) Cambiar el carácter: M(P) ←C
• Paso 9) Incrementar la variable NC: NC←NC+1
• Paso 10) Ir al Paso 6
• Paso 11) Sacar por OP2 del valor de NC
• Paso 12) Fin del programa

Programa en ensamblador
ORG H'A000 ; el programa comienza en A000
ETX DR H'0003 ; carácter “ETX”
PYC DR H'003B ; carácter “;”
C DR H'002C ; carácter “,”
uno DR H'0001 ; constante 1
P DR H'A730 ; puntero de la cadena
NC DR H'0000 ; número de sustituciones
cero DR H'0000 ; constante 0
EC EQU R7

14

Lenguaje ensamblador de CODE-2


Alberto Prieto 7
28/10/2014

Programa en ensamblador
P1: ADDS rD,P,cero ; llevar a rD el puntero de la cadena
LD EC,[rD+H'00] ; captar carácter de la cadena a analizar
SUBS rF,EC,ETX ; comparar con carácter “ETX”
LLI rD,lo(P11) ; dirección de salto P11
LHI rD,hi(P11)
BZ ; saltar a Paso 11 si EC=”ETX”
SUBS rF,EC,PYC ; comprobar si EC es “;”
LLI rD,lo(P8) ; dirección de salto P8
LHI rD,hi(P8)
BZ ; si EC=”;” saltar a Paso 8
P6: ADDS P,P,uno ; actualizar el puntero de la cadena
LLI rD,lo(P1) ; dirección de salto P1
LHI rD,hi(P1)
BR ; salto incondicional a Paso 1
P8: ADDS rD,P,cero ; llevar a rD el puntero de la cadena
ST [rD+H'00],C ; sustituir en la cadena “;” por “,”
ADDS NC,NC,uno ; incrementar en 1 el número de cambios
LLI rD,lo(P6) ; dirección de salto P6
LHI rD,hi(P6)
BR ; salto incondicional a Paso 6
P11: OUT H'02,NC ; dar en salida el número de cambios
END ; fin de programa

15

Programa en ensamblador completo


ORG H'A000 ; el programa comienza en A000
ETX H'0003 ; carácter “ETX”
PYC DR H'003B ; carácter “;”
C DR H'002C ; carácter “,”
uno DR H'0001 ; constante 1
P DR H'A730 ; puntero de la cadena
NC DR H'0000 ; número de sustituciones
cero DR H'0000 ; constante 0
EC EQU R7
P1: ADDS rD,P,cero ; llevar a rD el puntero de la cadena
P6: LD EC,[rD+H'00] ; captar carácter de la cadena a analizar
P8: SUBS rF,EC,ETX ; comparar con carácter “ETX”
P11: LLI rD,LO(P11) ; dirección de salto P11
LHI rD,HI(P11)
BZ ; saltar a Paso 11 si EC=”ETX”
SUBS rF,EC,PYC ; comprobar si EC es “;”
LLI rD,LO(P8) ; dirección de salto P8
LHI rD,HI(P8)
BZ ; si EC=”;” saltar a Paso 8
ADDS P,P,uno ; actualizar el puntero de la cadena
LLI rD,LO(P1) ; dirección de salto P1
LHI rD,HI(P1)
BR ; salto incondicional a Paso 1
ADDS rD,P,cero ; llevar a rD el puntero de la cadena
ST [rD+H'00],C ; sustituir en la cadena “;” por “,”
ADDS NC,NC,uno ; incrementar en 1 el número de cambios
LLI rD,LO(P6) ; dirección de salto P6
LHI rD,HI(P6)
BR ; salto incondicional a Paso 6
OUT H'02,NC ; dar en salida el número de cambios
END ; fin de programa
D/
16

Lenguaje ensamblador de CODE-2


Alberto Prieto 8
28/10/2014

Comentarios para uso del programa

• El programa CPYC, cambia los puntos y comas por comas en un texto que
se inicia en la posición A730. El programa debe almacenarse a partir de
la posición A000 de la memoria, y proporciona por el puerto OP2 el
número de cambios efectuados.

D / 17

Podemos ejecutar los programas en el entorno integrado de


programación y emulación de CODE-2
• Incluye un Editor de textos donde podemos
escribir, nuestro programa en ensamblador.

• Podemos traducir a código máquina


nuestro programa

• Podemos ejecutar el programa emulando el


funcionamiento de CODE-2

• Durante la ejecución se puede visualizar


cualquier registro, puerto de E/S y
contenido de memoria.

D / 18

Lenguaje ensamblador de CODE-2


Alberto Prieto 9
28/10/2014

Pasos para la ejecución de un programa en ensamblador

• Edición.
• Ensamblado.
• Ejecución.

19

Edición

• Seleccionamos EDITOR y escribimos el


programa en lenguaje ensamblador de
CODE-2.

• Podemos archivar el programa en


ensamblador, guardándose con extensión
.asm

20

Lenguaje ensamblador de CODE-2


Alberto Prieto 10
28/10/2014

Ensamblado

• En el mismo directorio (carpeta) donde se encuentra el entorno


integrado (Code2_entorno.exe) debe ubicarse el ensamblador
(ensam.exe) que es el programa que traduce programas
escritos en ensamblador a código máquina.

• Una vez que un programa en ensamblador ha sido editado (o


cargado: ARCHIVO  ABRIR ) ,
– se puede traducir a código máquina (“ensamblar”)
seleccionando en la parte superior del entorno
ENSAMBLADOR  ENSAMBLAR (o pulsando F9).

• El ensamblador detecta errores tipográficos que pudiese haber


en el programa, indicando la línea de éste donde se haya
producido.

• Una vez depurados los errores al ensamblar, se generan dos


ficheros objeto en código máquina, con el mismo nombre que
el original, pero con extensiones .ehc y .hex

21

Ejecución
• Seleccionamos la pestaña SIMULADOR en la parte
inferior de la imagen

• Cargar un programa previamente ensamblado: Archivo


→ Cargar programa objeto, y seleccionamos el programa
en lenguaje máquina a ejecutar (debe tener la extensión
.ehc o .hex).
– Aparece en la ventana superior izquierda.

• Introducimos la dirección de inicio por el teclado del


emulador de CODE-2 y pulsamos Ejecutar.
– Con esto se ejecuta la primera instrucción del
programa.

• En Modo Paso a Paso se ejecutarán una a una las


siguientes instrucciones del programa cada vez que
pulsemos el botón Continuar.
– Si queremos ejecutar el programa de forma
continua, debemos salir del modo paso a paso,
accionando este interruptor.

22

Lenguaje ensamblador de CODE-2


Alberto Prieto 11
28/10/2014

Comparación entre lenguajes máquina y ensamblador

• Características de los programas en lenguaje ensamblador:


– Los códigos de operación se representan con notación simbólica o
nemotécnica, en vez de con códigos numéricos.
– Se pueden utilizar direcciones simbólicas de registros y de memoria en
lugar de direcciones absolutas.
– Se pueden incluir comentarios.
• Persisten los siguientes inconvenientes, con respecto a los LM:
– Las instrucciones realizan operaciones muy simples
– Hay poca versatilidad a la hora de redactar instrucciones.
– El lenguaje máquina está ligado al procesador.

D / 23

Computadores RISC y CISC


• El CODE2 es un computador muy sencillo del tipo llamado RISC (Reduction Instruction Set Computer), que se
caracteriza por tener un repertorio de instrucciones muy sencillo y regular, y por hacer los intercambios de
datos entre procesador y memoria tan sólo con instrucciones LD y ST
– No obstante a la sencillez de CODE2, por medio de él hemos explicado de forma sencilla conceptos básicos
que son aplicables a cualquier tipo de estructura de computador.

• Los computadores CISC (Complex Instruction Set Computer), tienen repertorios de


instrucciones muy amplios e irregulares, con instrucciones que pueden ocupar una
o varias palabras de memoria.
– Por ejemplo, la arquitectura IA-32 (Pentium, Core, etc.) tiene los siguientes
tipos de instrucciones máquina:
• Instrucciones básicas (92 instrucciones)
• FPU Instruction Set (83 insctrucciones para operar con nº reales, funciones
trigonométricas, logarítmicas, etc.)
• MMX Instruction set (57 instrucciones). Para operar con múltiples elementos de
procesamiento que realizan la misma operación simultaneamente con múltiples datos.
• SSE Instruction Set (70 instrucciones), instrucciones SSE son especialmente adecuadas
para decodificación de MPEG2, procesamiento de gráficos tridimensionales y software
de reconocimiento de voz.
• SSE2 Instruction set (114, entre otras cosas, permiten operar con datos enteros de 128
bits)
• SSE3 (32 instrucciones), SS4, etc.

24

Lenguaje ensamblador de CODE-2


Alberto Prieto 12
28/10/2014

Resumen y conclusiones
• Hemos presentado un lenguaje ensamblador para CODE2, hemos seguido el estándar IEEE-694.
– Formato de las instrucciones.
– Directivas.
– Ejemplo de programa.
– Comparación entre Le y LM.
• Los lenguajes ensambladores.
– Facilitan la programación del computador al utilizar una terminología simbólica, en lugar de códigos o
direcciones numéricas.
– Además de las instrucciones que corresponden directamente a instrucciones máquina, disponen de
directivas que facilitan notablemente la programación dando información al ensamblador.
– Es necesario disponer de un programa (ensamblador) que traduzca de ensamblador a código máquina.
• Hemos completado la descripción del entorno de programación y emulación integrado de CODE2, explicando
como se utiliza para desarrollar y ejecutar programas en ensamblador.
• El entorno de programación y emulación de CODE-2 esta a libre disposición en la página web de este curso:
– http://atc.ugr.es/pages/personal/propia/alberto_prieto/videoclases
– También el entorno puede ejecutarse desde Linux a través de Wine (http://www.winehq.org/). Para ello
tecleamos: wine code2_entorno.exe
• A lo largo de las últimas lecciones hemos explicado los conceptos básicos sobre estructura de computadores
utilizando un modelo sencillo de ordenador, como es CODE-2. A pesar de su sencillez, en él se incluyen los
principios y elementos fundamentales de cualquier computador por complejo que sea.
25

Figura en word Inicio

1 EC  M(P)

7 2 EC - ETX
no 3 si
Z=1

4 EC - PYC
no 5 si
6 P  P+1 Z=1

8 M(P)  C

10 9 NC  NC+1

11 OP2  NC

12 Fin
26

Lenguaje ensamblador de CODE-2


Alberto Prieto 13

También podría gustarte