Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructura de Computadores
LENGUAJE ENSAMBLADOR DE CODE-2
Contenidos
D/3
D/4
• 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
• 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).
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
Directivas (pseudoinstrucciones)
D/9
Directivas o pseudoinstrucciones
D / 10
Ambigüedades
D / 11
D / 12
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
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
• 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
D / 18
• Edición.
• Ensamblado.
• Ejecución.
19
Edición
20
Ensamblado
21
Ejecución
• Seleccionamos la pestaña SIMULADOR en la parte
inferior de la imagen
22
D / 23
24
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
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