Beruflich Dokumente
Kultur Dokumente
Programa
1. 2. 3. 4. 5. 6. 7. 8. Introduccin. Directivas bsicas de los ensambladores para MC68000. MC68000 y las operaciones con bits. MC68000 y los tipos de datos simples. MC68000 y las variables simples. MC68000 y la evaluacin de expresiones aritmticas. MC68000 y la evaluacin de expresiones booleanas. MC68000 y las sentencias de control.
Bibliografa
D.A. PATTERSON, J.L HENNESSY. Estructura y diseo de computadores. Revert, 2000. M68000 8/16/32 Bit Microprocessors Users Manual. 9th edition. Motorola, 1993. Motorola M68000 Family Programmers Reference Manual. Motorola, 1992. A. CLEMENTS. Microprocessor Systems Design. 3rd edition, ITP - PWS Publishing Company, 1997. J. SEPTIN, H. MECHA, R. MORENO, K. OLCOZ. La familia del MC68000. Sntesis, 1995. C. CERRADA, V. FELIU. Estructura y Tecnologa de Computadores I. UNED, 1993 F.G. McCABE. High-Level Programmers Guide to the 68000. Prentice-Hall, 1992.
1. Introduccin
Hasta ahora hemos estudiado los fundamentos del lenguaje ensamblador:
Repertorios de instrucciones. Modos de direccionamiento. Directivas de ensamblador. Herramientas de traduccin de programas. Proceso de creacin de un programa.
Introduccin
Los objetivos perseguidos son:
Aprender a programar en ensamblador. Aprender cmo generan cdigo los compiladores.
Los lenguajes de programacin de alto nivel habitualmente no definen en sus estndares los tamaos exactos de los datos (al menos de los datos numricos).
Normalmente el entero base coincide en tamao con la palabra del computador. Diferentes compiladores del mismo lenguaje en una misma mquina manejan tamaos de datos que pueden no coincidir.
Introduccin
MC68000: mquina de 16 bits.
Se tomarn como base los tipos de TurboPascal y de TurboC. Son compiladores pensados para PC XT y AT con procesadores 8086 y 80286 de 16 bits.
Las implementaciones de las estructuras de control pueden realizarse mediante diferentes secuencias de cdigo mquina.
La secuencia concreta en cdigo mquina es indiferente mientras el programa en alto nivel funcione correctamente.
Por otra parte, compiladores diferentes generan secuencias de instrucciones de mquina diferentes dependiendo de:
Los convenios adoptados: Comprobaciones de la correccin de los clculos. Ubicacin y gestin de variables. Gestin de subprogramas. Las optimizaciones de cdigo realizadas.
El valor del CDE puede ser modificado a voluntad mediante la directiva ORG. Sintaxis: ORG Efecto: CDE = valor. El nuevo valor asignado al CDE no debera ser inferior a su valor actual.
8
valor
EQU
valor
Una vez definido un smbolo mediante EQU, dicho smbolo no puede ser redefinido. EQU se utiliza para definir constantes (igual que CONST en PASCAL). En directivas EQU no se permiten referencias adelantadas.
9
Sintaxis: SIMB
SET
valor1
Una vez definido un smbolo mediante SET, dicho smbolo puede ser redefinido tantas veces como se quiera nicamente mediante otras directivas SET. SIMB SET valor2
Nombre del smbolo ... SIMB ... Tipo del smbolo ... SET ... Valor del smbolo ... valor2 ... 10
Variables en un programa
En un programa de computador, una variable es un espacio en memoria utilizado para almacenar un dato cuyo valor puede ser modificado a lo largo del programa. Tipos de variables: Estticas: creadas al inicio del programa, existen mientras el programa se encuentra en ejecucin. Locales: propias de procedimientos y funciones, existen mientras se ejecuta el procedimiento o funcin al que pertenecen.
Se crean cuando arranca el procedimiento o funcin, y se destruyen en el momento en que ste termina de ejecutarse.
Dinmicas: creadas a lo largo de la ejecucin del programa, su existencia no est ligada (en sentido estricto) a la ejecucin de ningn procedimiento o funcin.
Son creadas y destruidas mediante el gestor de memoria dinmica, perteneciente al sistema operativo.
11
Variables en un programa
Las variables estticas ocupan espacio en el cdigo objeto. Una variable esttica recibe un nombre que se asocia a la direccin que ocupa dentro de la zona de datos. Ejemplo (PASCAL) PROGRAM P (input, output); VAR V: INTEGER; ...
Direcciones dir (asociado al nombre V) Memoria ... ???? ...
12
Variables en un programa
El valor de una variable puede modificarse una o varias veces a lo largo del programa. Ejemplo (PASCAL) V := 5;
Direcciones ... dir (asociado al nombre V) ... Memoria ... 5 ...
V := V+3;
Las directivas para reserva de espacio en memoria se suelen emplear para definir variables estticas.
13
[ETIQ]
DS.t
La etiqueta es opcional, y si existe se inserta en la tabla de smbolos como un smbolo implcito (tipo LABEL). En esta directiva no se permiten referencias adelantadas.
14
[ETIQ]
DC.t
val
Efecto: se reserva en memoria un dato de t bytes para una variable, y se le asigna un valor inicial.
Direcciones d (asociado a ETIQ si hay etiqueta) d+t Memoria ... val ... Espacio reservado: t octetos
La etiqueta es opcional, y si existe se inserta en la tabla de smbolos como un smbolo implcito (tipo LABEL).
15
[ETIQ]
DC.t
val1,val2,val3,...,valN
16
Efecto: la traduccin del programa finaliza. Cuando lleva un operando, esta directiva se usa para indicar la direccin de comienzo del programa principal (o la etiqueta de la primera instruccin que queremos ejecutar al iniciar el programa, si la tiene).
17
18
En ocasiones es preciso actuar sobre bits concretos de un operando, obviando sus bits restantes. Existen computadores que disponen de instrucciones que permiten acceder a:
Un bit concreto de un operando (sin acceder al resto). Un subconjunto (campo) de varios bits contiguos del operando.
El MC68000 no tiene instrucciones que manejen campos de bits, aunque otros procesadores de la familia s disponen de ellas (del MC68020 en adelante).
19
ANDI.B #%10010011,D2
OR mscara,dato: permite poner a 1 un conjunto de bits de un dato, dejando inalterados los restantes.
Ejemplo: poner a 1 los bits 1, 2 y 4 del registro D1, dejando intactos los dems
ORI.B #%00010110,D3
EOR mscara,dato: permite invertir un conjunto de bits de un dato, dejando inalterados los restantes.
Ejemplo: invertir los bits 4, 5, 6 y 7 del registro D4, dejando intactos los dems
EORI.B #%11110000,D4
21
Las operaciones AND, OR y EOR afectan a los biestables Z y N del CCR, y ponen a 0 los bits V y C.
Tras usarlas es posible tomar decisiones mediante instrucciones condicionales. Condiciones susceptibles de ser utilizadas: EQ, NE, PL y MI.
Las mscaras pueden emplearse para realizar tareas tan complejas como se desee.
22
El MC68000 no maneja datos en coma flotante, salvo que cuente con un coprocesador 68881 asociado. Vamos a estudiar la correspondencia entre los tipos de datos simples en TurboPascal y su definicin y manejo en el MC68000.
23
.B X
.W
.L
X X X X X
25
26
.B X
.W X
.L
X
Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor
27
28
Nemotcnico
LT (less than) slt blt dblt sle ble dble seq beq dbeq sne bne dbne sge bge dbge sgt bgt dbgt st dbt sf dbf
Instrucciones
op etiqueta Dn,etiqueta op etiqueta Dn,etiqueta op etiqueta Dn,etiqueta op etiqueta Dn,etiqueta op etiqueta Dn,etiqueta op etiqueta Dn,etiqueta op Dn,etiqueta op Dn,etiqueta / dbra Dn,etiqueta
Menor o igual
Igual que
EQ (equal)
Distinto a
NE (not equal)
Mayor que
GT (greater than)
Cierto Falso
T (true) F (false)
29
Correspondencia caracteres - enteros: un carcter se corresponde con el ordinal que tiene asignado en su cdigo de representacin.
Ordinal en PASCAL: funcin ORD (devuelve un nmero en binario puro). Ordinal en C: nmero con signo (dato unsigned char) o sin signo (signed char). En C los enteros y los caracteres pueden intercambiarse: los caracteres son enteros de 8 bits con o sin signo.
En ensamblador (como en C) los caracteres se pueden utilizar en operaciones aritmticas como nmeros enteros de 8 bits con o sin signo. 30
Para almacenar una variable booleana es suficiente con un bit, pero en el MC68000 las variables ocupan un mnimo de 8 bits. Se pueden definir las siguientes constantes:
TRUE FALSE EQU EQU 1 0
31
32
En C los punteros se pueden usar en expresiones aritmticas como los enteros. En el MC68000 la nocin de puntero variable coincide con la de registro de direcciones.
Los registros de direcciones se pueden usar en operaciones aritmticas.
Expresin en PASCAL con variables enteras: Expresin en C con variables enteras: Evaluacin de la expresin en ensamblador: MOVE.W X,D7 MULS Y,D7 MOVE.W Z,D6 MULS D6,D6 ADD.W D6,D7 MOVE.W X,D6 SUB.W Y,D6 EXT.L D7 DIVS D6,D7 MOVE.W D7,X
x:=(x*y+z*z) DIV (x-y); x=(x*y+z*z)/(x-y); x x*y z z*z x+y+z*z x-y valor en D7 valor almacenado en x
34
z z*z
x+y+z*z
x-y
FIN
MOVE.W CMP.W SGT BLE MOVE.B SNE NOT.B BNE TST.B SNE MOVE.B
x Comparar x con y Resultado parcial en D7 Cortocircuito xb NOT xb Cortocircuito Testear yb Resultado final en D7 Resultado final en zb
37
38
Ensamblador MC68000: IF EQU MOVE.W CMP.W BLT ADDQ.W SUBQ.W EQU * X,D7 Y,D7 FIN #2,X #2,Y *
COND?
FALSA
CIERTA
BLOQUE_THEN
FIN
FALSA
BLOQUE_ELSE
Ensamblador MC68000:
IF
x+2; y+2;
ELSE
x-2; y-2;
THEN FIN
C (variables enteras):
BLOQUE_THEN
EQU MOVE.W CMP.W BGE SUBQ.W SUBQ.W BRA ADDQ.W ADDQ.W EQU
Ensamblador MC68000:
MOVE.W MOVE.W REPEAT EQU MOVE.W CLR.L MOVE.W DIVS SWAP MOVE.W MOVE.W MOVE.W UNTIL TST.W BNE FIN EQU #81,A #18,B * B,MCD D7 A,D7 B,D7 D7 D7,RESTO B,A RESTO,B RESTO REPEAT *
BLOQUE_REPEAT
C (variables enteras):
COND? FALSA
CIERTA
41
COND?
FALSA
WHILE
CIERTA
BLOQUE_WHILE
C (variables enteras):
n = 5; fant = 1; f = 1; i = 2; for ( ; i <= n; ) { faux = f; f = f + fant; fant = faux; i = i+1; END;
FIN
MOVE.W MOVE.W MOVE.W MOVE.W EQU MOVE.W CMP.W BGT MOVE.W MOVE.W ADD.W MOVE.W ADDQ.W BRA EQU
#5,N #1,FANT #1,F #2,I * I,D7 N,D7 FIN F,FAUX FANT,D6 D6,F FAUX,FANT #1,I WHILE *
42
(versin PASCAL):
MOVE.W MOVE.W MOVE.W FOR EQU MOVE.W MOVE.W CMP.W BLT BRA INC ADDQ.W BLOQUE EQU MOVE.W MOVE.W ADD.W MOVE.W CMP.W BNE FIN EQU #5,N #1,FANT #1,F * #2,I N,D7 I,D7 FIN BLOQUE #1,I * F,FAUX FANT,D6 D6,F FAUX,FANT I,D7 INC 43 *
CIERTO
FALSO
i := i+1
BLOQUE FOR
C (variables enteras):
n = 5; fant = 1; f = 1; for (i=2; i<=n; i++) { faux := f; f := f + fant; fant := faux; }
CIERTO
FALSO
i := i-1
BLOQUE FOR
C (variables enteras):
n = 5; fant = 1; f = 1; for (i=n; i<=2; i--) { faux = f; f = f + fant; fant = faux; }
Un bucle FOR es un bucle WHILE con una condicin dependiente de un contador que se incrementa o decrementa unitariamente, y con un lmite final prefijado al comienzo del bucle. Los bucles WHILE pueden dar problemas con condiciones del tipo <= o >= si el valor del lmite final coincide con un extremo del rango.
Qu sucede si se pide calcular el trmino 32767 de la serie de Fibonacci en el ejemplo? Ejercicio: proponer e implementar posibles soluciones (aumentar el tamao de la variable del contador, reestructurar el bucle, etc).
Sentencia CASE: Puede implementarse mediante estructuras IF-THEN-ELSE anidadas. Es ms eficiente (y complicado) implementarla mediante tablas de saltos.
45