Академический Документы
Профессиональный Документы
Культура Документы
Tcnicas de Programacin
en el
Lenguaje Ensamblador
del MC68000
1.- Interpretacin de las condiciones de ramificacin 1
5.- Estrategias para sintetizar los esquemas de control de flujo tpicos de los lenguajes de alto nivel 6
Beq Z Equal
Bne Z Not equal
Bhi CZ High
Las condiciones que contienen los bits V N slo tiene sentido aplicarlas en nmeros con signo (complemento a dos).
Las restantes condiciones son aplicables en nmeros con signo y nmeros sin signo (binario puro).
Ejemplo:
Programa para sumar dos vectores de enteros sin signo de 16 bits. Calcula x(i)+y(i) y guarda la suma en x(i); para cada par de
elementos. La longitud de los vectores est contenida en D0. Las direcciones de los vectores las contienen A0 y A1. Despus de cada
adicin se cmprueba si ha existido desbordamiento (bit C), en cuyo caso se almacena la palabra #$FFFF en D0.
El bucle de suma se sintetiza con la instruccin Bcc. Si fueran nmeros con signo, sera con Bvs.
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Sumar dos vectores almacenados en memoria
* Entradas: (A0.l): Vector x de 16 nmeros sin signo
* (A1.l): Vector y de 16 nmeros sin signo
* (D0.w): Nmero de elementos de los vectores
*
* Salida: (D0.w): Si hubo error
org $1000
bcc InicioBucle
Error move.w #$FFFF,D0 ; Indicacin de error
Acabado movem.l (SP)+,D1-D2/A0-A1 ; Restaura los registros usados
move.b #228,D7
trap #14 ; Fin del programa
end ; Fin del ensamblado
2
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
Las instrucciones CMP (compare), CMPI, CMPM, y TST (test) se utilizan para preparar el registro de cdigos de condicin
segn los valores de los operandos indicados, cara a una posterior instruccin de salto condicional. Esta actualizacin se aprovecha
en dicha instruccin inmediatamente posterior.
Debido a que modifican el SR de forma particular, la interpretacin de las condiciones de ramificacin es ms simple que en el
resto de ramificaciones. La siguiente tabla muestra dicha interpretacin. Las instrucciones BLT, y BMI por una parte, as como las
BGE y BPL por otra, son equivalentes despus de la instruccin TST, dado que el bit V queda borrado por esta instruccin. Tanto
CMP como TST pueden utilizarse con enteros con o sin signo, por lo que las condiciones de ramificacin variarn segn la
aritmtica utilizada (concretamente la condicin de comparacin o relacin de orden entre ambos operandos).
Ejemplo:
Programa que compara enteros positivos de 16 bits previamente almacenados en un vector que ocupa las posiciones NUM1,
NUM1+2, etc; extrayendo el valor mximo en D1. El registro D3 es utilizado como contador. Dado que slo se consideran nmeros
positivos, la instruccin BLS es la utilizada despus de la comparacin para inspeccionar si un valor en D2 es menor que el mximo
actual, contenido en D1, en cuyo caso procede un intercambio de los contenidos de ambos registros.
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
* Propsito: Encontrar el mximo de una lista
*
* Entradas: Num1: Direccin del primero de la lista
* (D3.w): Nmero de elementos de la lista. Tambin es un contador hacia atrs
*
* Salida: (D1.w): Mximo entero encontrado
move.b #228,D7
trap #14 ; Fin del programa principal
La instruccin Inspecciona, Decrementa y si procede, Salta es una potente instruccin para sintetizar los bucles en lenguaje
ensamblador. Su formato bsico es:
DBcc Dn,Etiqueta
Hay que tener en cuenta que el valor en Dn se decrementa en una unidad cada vez que el flujo del programa pasa por esta instruccin.
es cc cierta? S
No
x= ?
S
Dn = -1 ?
No
Etiqueta PC (PC) + 2 PC
Beq Z Equal
Bne Z Not equal
Bhi CZ High
F 0 False
T 1 True
Catorce de las condiciones son las mismas que en la instruccin BCC. Existen dos nuevas:
F equivale a Salta siempre hasta que Dn llegue a -1.
T No saltes nunca. Evidentemente, es una condicin intil. Si est incluida en el repertorio, es por simetra con la anterior.
El registro especificado como contador deber contener un entero de 16 bits con un valor decimal entre #&00000 y #&65535.
Suponiendo que inicialmente contenga el entero N, la cuenta pasar por los valores N, N-1, ..., 0, antes de salir del bucle (siempre
que la condicin se mantenga falsa). De esta forma, hay N+1 pasadas por el bucle
4
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
Ejemplo:
En el siguiente programa se comparan las instrucciones Bcc y DBcc. Cada uno de los fragmentos inspecciona una lista de N+1
elementos para localizar un valor diferente de cero.
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Comparar las instrucciones Bcc y DBcc, buscando un elemento
* no nulo en una lista
*
* Entradas: (A1.l): Direccin de la lista
* (D1.w): Nmero de elementos menos uno de la lista
*
* Salidas: (A1.l): Direccin del primer elemento no nulo encontrado
* (D1.w) Si es #$FFFF, sirve como indicacin de error
org $1000
org $2000
A[2, 1]
A[2, 2]
...
A[2, n]
...
A[m-1, n]
A[m, 1]
A[m, 2]
A[m, n]
6
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
5.- ESTRATEGIAS PARA SINTETIZAR LOS ESQUEMAS DE CONTROL DE FLUJO TPICOS DE LOS LENGUAJES DE ALTO NIVEL
Bloque de acciones A2
No
Condicin ?
No
Bloque A2
I := I - 1
8
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
Ejemplos:
Programa que suma un conjunto de nmeros de 16 bits. La suma puede ocupar 16 32 bits. Los nmeros estn alojados en el rea
apuntada por A1. La cantidad de elementos es indica en D1. Si esta cantidad fuera nula, no deber acumularse nada; y se saldr del
programa (instruccin subq #1,D1, seguida de blt).
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Suma nmeros sin signo de 16 bits
*
* Entradas: (D1.w): Nmero de enteros
* (A1.l): Direccin del comienzo de la lista
*
* Salidas: (D2.l): Acumulador de la suma
* (D3.w) = -1 => El nmero de nmeros es cero
* = 0 => La suma ocupa 16 bits y est en D2[15:00]
* = 1 => La suma ocupa 32 bits y est en D2[31:00]
org $1000
clr.l D2 ; Acumulador := 0
move.w #-1,D3 ; El estado inicial es de error
subq.w #1,D1 ; Prepara el ndice de bucle
blt Acabado
clr.w D3 ; La suma ocupa inicialmente 16 bits
Programa que calcula la media aritmtica de una lista de nmeros de 16 bits almacenados a partir de la direccin apuntada por A1.
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Calcular un promedio
*
* Entradas: (D1.w): Longitud de la lista
* (A1.l): Direccin de comienzo de la lista
*
* Salidas D3[15:00] Resultado
* D3[31:16] Resto de Suma/Longitud
org $1000
clr.l D2
clr.l D3 ; Acumulador := 0
move.w D1,D4
subq.w #1,D4 ; Prepara el ndice de bucle
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Convertir caracteres numricos ASCII a BCD
* Comentarios:
* La lista de dgitos en ASCII comienza en la direccin #ASCII
* La lista de nmeros en BCD comenzar en la direccin #BCD
* La conversin se efectuar en una subrutina
*
* ZONA DE CDIGO
move.b #228,D7
trap #14 ; Fin del programa principal
* Subrutina ASCIIaBCD
* Propsito: Efectuar la conversin de los cdigos ASCII a BCD
* Entradas: (A1.l): Direccin de comienzo de la cadena ASCII
* (A2.l): Direccin donde debe almacenar la cadena BCD
* ZONA DE DATOS
org $2000
CR equ $0D ; INTRO
ASCII ds.b 10 ; Espacio de la cadena dada
BCD ds.b 10 ; Espacio para la cadena calculada
end ; Fin del ensamblado
10
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
Programa que suma dos nmeros de seis dgitos en cdigo BCD. Hay que observar que los bits X y Z del registro de cdigos de
condicin son inicializados a los valores adecuados para una correcta operacin.
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Ejemplo de aritmtica en cdigo BCD
*
* Entradas: (A1.l): Direccin de un nmero de 6 bits en cdigo BCD
* (A2.l): Direccin de un nmero de 6 bits en cdigo BCD
*
* Salida: (A2.l): Direccin del resultado de la suma
*
* Comentarios:
* 1 Los nmeros BCD se almacenan de esta forma:
* BCD[6:5]
* BCD[4:3]
* BCD[2:1]
* 2 Los registros de direcciones apuntan inicialmente a BCD[2:1]+1
* para permitir el comienzo con direccionamiento preindexado
*
org $1000
move.b #228,D7
trap #14 ; Fin de la ejecucin
end ; Fin del ensamblado
Programa que multiplica un nmero entero de 32 bits (en D4) por una potencia de dos cuyo exponente est en D1. Utiliza las
instrucciones de rotacin y desplazamiento. El resultado se proporciona en la yuxtaposicin de dos registros, D5 y D4.
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Multiplicar un nmero por una potencia de dos
*
* Entradas: (D1.b): Exponente de la potencia de dos
* (D4.l): Nmero entero positivo
*
* Salidas D4-D5[63:00]: Resultado
* (D2.b): Indicador: 0 => xito
* -1 => Error
org $1000
move.b #228,D7
trap #14 ; Fin de la ejecucin
end ; Fin del ensamblado
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Generar el bit de paridad en un byte
*
* Entrada: (A1.l): Direccin de un carcter
*
* Salida: Bit de paridad aadido al carcter almacenado en (A1)
org $1000
tst.b D0
beq Acabado
bset #7,(A1) ; Si la paridad final es 1, activa el bit #7
move.b #228,D7
trap #14 ; Fin de la ejecucin
end ; Fin del ensamblado
12
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
La instruccin TAS se utiliza para inspeccionar y modificar operandos de longitud byte contenidos en registros o memoria.
TAS <de>
No S
(de) = 0 ? TAS <de>
Z := 0 Z := 1
N := 1 S
S
No S No
(de)[7] = 1?
Procesamiento
N := 0 N := 1
Borrar <de>
(de)[7] := 1 Continuar
Esta instruccin opera de forma similar a TST.B. Sin embargo, despus que el operando es examinado, el bit ms significativo del
operando es puesto a 1.
Por ejemplo, si el byte utilizado como operando es la direccin apuntada por A1, la cual tiene un valor iniciaal $00, la instruccin :
TAS (A1)
produce que el bit Z se ponga a 1 y un cambio en el bit ms significativo del operando, cuyo valor final ser 0. As, si el valor
inicial cero hubiera indicado que un rea de memoria u otro recurso estaba libre para ser utilizado, una vez ejecutada la instruccin
TAS, el valor del indicador se habr alterado. Una inspeccin posterior de dicho indicador delatar esta situacin; inspeccin que
podr haber sido realizada por otro programa ejecutndose de forma concurrente (quiz activado por una interrupcin) o por otro
procesador en una arquitectura multiprocesador.
En el modo tpico de aplicacin, la instruccin TAS va seguida de un salto condicional. Se trata de hacer que el programa
inspeccione si un determinado recurso, tal como una impresora o rea de memoria, est disponible para l. Con esta forma de usar
TAS, el procesador se ocupa de repetir el bucle hasta que ocurra una interrupcin que permita el borrado del indicador o hasta que
otro procesador lo borre.
Si el recurso compartido es crtico para la continuacin de la ejecucin del programa que realiza la inspeccin, el bucle de espera
con la instruccin TAS es absolutamente necesario. Despus de que el recurso se pone a disposicin del programa, el procesamiento
debe continuar. El indicador habr de borrarse despus del procesamiento para liberar el recurso y ponerlo a disposicin de otros
usuarios. De esta manera, la instruccin TAS puede utilizarse como un mtodo para asignar valores a los indicadores empleados para
la comunicacin entre procesos.
Tambin puede utilizarse en la sincronizacin del acceso a un recurso compartido cuando la temporizacin es un factor relevante.
En este sentido, la instruccin TAS es crticamente importante en muchos sistemas multiprocesador con recursos compartidos. En
efecto, un problema grave en un sistema de esta caractersticas puede ser el hecho de que dos procesadores examinen el indicador
simultneamente; y ambos consideren el recurso como disponible. Para evitar esta situacin, la instruccin TAS disfruta de una
caracterstica especial: posee un ciclo indivisible lectura-modificacin-escritura; durante el cual, el procesador que ejecute la
instruccin no proporcionar acceso al bus a ningn otro procesador mientras no se complete la instruccin. El primer procesador
que ejecute TAS se har en exclusiva con el control del recurso.
En las UUDD se muestra (subsecciones 17.2.1 y 17.2.2) que en la gestin de subrutinas, la solucin ms eficaz y elegante para llevar
a cabo estas cinco tareas:
- Proporcionar argumentos el programa principal a la subrutina.
- Recibir resultados finales el programa principal desde la subrutina.
- Preservar los contenidos de los registros que va a utilizar la subrutina.
- Almacenar la direccin de retorno desde la subrutina hasta el programa principal.
- Almacenamiento de resultados intermedios durante la ejecucin de la subrutina.
Es el uso de la pila.
Con esta estrategia se evita el hecho de que la subrutina deje secuelas visibles al resto del programa o programas. As puede dejar los
registros del procesador y la pila misma tal como se los encontr. Para ello, tal como se indica en el ltimo prrafo de la subseccin
17.2.2, basta con emplear dentro de la subrutina tantas instrucciones de POP como de PUSH.
En este caso S2 no deja la pila tal como se la encontr, pues no ha tenido tiempo de efectuar un POP por cada PUSH. (Si se da la
particularidad de que S2=S1, la subrutina se denomina reentrante, pero este problema se presenta en todo sistema en tiempo
compartido, no slo en el particular en el que S2=S1).
Como ejemplo, pensemos en dos terminales CRT conectados a un mismo procesador. Lo ms normal es que hagan uso de la misma
rutina de E-S. Conforme el sistema operativo vaya alternativamente cediendo el turno a los terminales, puede suceder que la rutina de
E-S de alguno sea interrumpida y el turno pase temporalmente al otro terminal. Todos los datos asociados al primer terminal que
hayan sido utilizados por la rutina han de ser guardados en posiciones conocidas, si se pretende que cuando se recupere el control de
la rutina siga ejecutando el programa donde lo dej.
La solucin es reservar en la pila un rea de datos local, denominada armazn de pila (stack frame), para cada llamada a la rutina.
Esta estrategia no es imprescindible en las subrutinas encadenadas (subrutinas que llaman a otras subrutinas); ni siquiera en las
subrutinas recursivas (subrutinas que se hacen llamadas a s mismas). Cuando se regresa a una subrutina, ya se han terminado todas
las anidadas, por lo que bastara con la estrategia de emparejar un POP por cada PUSH en el interior de la subrutina.
Aunque slo es imprescindible en sistemas de tiempo compartido, es frecuente su uso en todo tipo de sistemas. Ello es porque
facilita la redacin de las subrutinas, al evitar la obligacin de emparejar un POP por cada PUSH.
En el MC68000 hay dos instrucciones especializadas en la gestin de armazones de pila: LINK y UNLK. El acceso a las variables de
la pila por parte de la subrutina se consigue por medio de desplazamientos, a partir de un registro base denominado puntero de
armazn (frame pointer). As, aunque el puntero de pila pueda cambiar su valor a medida que se saquen o introduzcan datos en la
plia, el puntero de armazn no vara durante la ejecucin de la subrutina.
14
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
Instruccin LINK
Sintaxis:
LINK An,#Desplazamiento
Instruccin UNLK
Sintaxis:
UNLK An
Ejemplo:
LINK A1,#-12
.
. ; En esta zona de cdigo intermedia est el cuerpo de alguna subrutina
.
UNLK A1
001FFFC 10
A1 1000FFFF
A1 1000FFFF 001FFFD 00
001FFFE FF
SP 00020000
00020000 SP 0001FFFC 001FFFF FF
0020000
001FFF0
rea de datos locales
Desplazamiento = -12
Puntero de armazn
001FFFC 10
A1 0001FFFC 001FFFC 10 A1 0001FFFC
001FFFD 00
001FFFD 00
Puntero de pila 001FFFE FF
SP 0001FFFC 001FFFE FF
SP 0001FFF0 001FFFF FF
001FFFF FF
0020000
00020000
001FFFD 00
SP 0001FFFC 001FFFE FF
SP 0020000
001FFFF FF
0020000
00020000
Tras la etapa B1 Tras la etapa B2. (El estado es el mismo que el original)
Tcnicas de Programacin en el Lenguaje Ensamblador del MC68000 15 Jos Garza
Ejemplo:
El siguiente programa ilustra una posible secuencia en el programa llamante y la operacin de la subrutina. El programa llamante
primero reserva N bytes de la pila para argumentos que han de ser devueltos por la subrutina; a continuacin se introducen un valor
y una direccin y se hace la llamada a la subrutina, con lo que tambin se almacena la direccin de retorno. Una vez dentro de la
subrutina, lo primero que se hace es ejecutar la instruccin LINK para crear un armazn de pila y definir el puntero de armazn. Esta
instruccin guarda en la pila el valor de A1 y lo reemplaza por el valor del puntero de pila en ese momento, de forma que este
puntero de armazn apunta al final de rea de datos locales dedicada a la subrutina. La ltima accin de la subrutina es aadir un
desplazamiento al puntero de pila, de forma que las variables locales se almacenan en este rea, siendo accedidos mediante
direccionamientos relativos a registro con desplazamiento desde el valor del puntero de armazn. Despus que los argumentos de
entrada son procesados y las salidas son almacenadas en el rea correspondiente de la pila, se ejecuta la instruccin UNLK, que
libera el rea local y restaura el contenido del puntero de pila con el valor anterior a la ejecucin de la instruccin LINK.
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Mostrar el uso de las instrucciones LINK y UNLK
*
move.b #228,D7
trap #14 ; Fin del programa principal
unlk A1 ; Restaura
16
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
EVOLUCIN DE LA PILA
Libre
SP
rea de
datos
locales
Libre Libre
A1 A1
anterior
Libre
SP Direccin Direccin SP Direccin
de retorno de retorno de retorno
x x x SP x
Arg Arg Arg Arg
Antes de jsr Tras jsr Tras link Tras ulnk Tras rts
(Durante la subrutina)
En un contexto cientfico, el trmino precisin se refiere a la cantidad de detalle utilizado para representar una medida. en el
caso de los valores numricos, la cantidad de precisin se expresa usualmente dando el nmero de dgitos significativos en el valor
numrico.
Las unidades aritmtico-lgicas de los microporcesadores operan con un mximo de n dgitos cuando realizan operaciones
aritmticas. Denominaremos esta longitud mxima como longitud de precisin simple. En el caso del MC68000 la longitud mxima
de precisin simple es de 32 bits. (Aunque, no obstante, tambin se pueden manejar cantidades de 8 y 16 bits). Valores mayores de
longitud no pueden ser manejados en aritmtica simple, por lo que, con el fin de extender la precisin, habrn de considerarse varios
operandos de n dgitos como operando matemtico nico.
Las operaciones aritmticas con operandos de precisin mltiple se logran realizando operaciones parciales con porciones de
longitud n y combinando de forrma adecuada los resultados, lo que suele implicar el tratamiento de detalles matemticos tales como
arrastres entre resultados intermedios. Con estos fines, el MC68000 proporciona instrucciones especiales para facilitar la adicin,
substraccin y negacin (complemento a dos) de enteros en doble precisin. Nos estamos refiriendo a las instrucciones ADDx,
SUBX y NEGX. Su sintaxis y operacin se indican en el apndice C de las UUDD.
La diferencia entre estas instrucciones y sus correspondientes para aritmtica de simple precisin radica en la utilizacin de los
bits X y Z; y en el tipo de direccin efectiva.
Tal como se menciona en el apartado 15.6 de las UUDD, una operacin de suma en aritmtica de mltiple precisin puede
sintetizarse con esta secuencia de instrucciones:
X
D2 D1
add.l D1,D3
addx.l D2,D4
+ D4 D3
D4 D3
El bit C tambn delata la presencia de un acarreo. Pero en la aritmtica de mltiple precisin se usa el X en su lugar, pues ste se
activa slo con operaciones aritmticas y de desplazamiento, mientras que el bit C podra estar activado por operaciones de otros
tipos, y si se usara para detectar acarreos entre resultados intermedios podra producir resultados finales errneos.
Por ejemplo, si tras la secuencia anterior, hubieramos necesitado inspeccionar C con la instruccin TST:
tst.l D4
C se habra puesto a 0 (ya no podramos usarlo para conocer si hubo acarreo en la suma), mientras que X no se habra alterado,
Otro bit del registro de cdigos de condicin de relevancia en la aritmtica de precisin mltiple es el bit Z. La activacin de este bit,
despus de cada operacin de mltiple precisin depende tanto del resultado de la ltima operacin, como del valor anterior del
propio Z. Puede decirse que este bit Z corresponde a la operacin lgica:
Z = Z1 AND Z2
donde Z1 es el valor anterior a la operacin de mltiple precisin; y Z2 es el que producira la correspondiente operacin de simple
precisin. Por ejemplo, consideremos el entero de 64 bits:
Si realizramos una operacin de aritmtica extendida despus de, por ejemplo, una operacin de test de los 32 bits menos
significativos; y la operacin extendida diera como resultado #$0, el bit Z no se pondra a 1.
18
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
Ejemplo:
El siguiente programa suma parejas de nmeros de 64 bits, de la forma indicada en el propio listado. Cada entero de 64 bits se
almacena en memoria con la doble palabra menos significativa en la direccin ms alta; y la ms significativa en la ms baja. A la
entrada de la subrutina, A1 y A2 deben apuntar a la doble palabra siguiente a cada uno de los vectores, mientras que A3 deber
contener la direccin del ltimo elemento del segundo vector (posicin ms baja de memoria del mismo, que corresponde a la doble
palabra ms significativa de x(N))
byte j+7 byte j+6 byte j+5 byte j+4 byte j+3 byte j+2 byte j+1 byte j
A3
y
Elemento i Elemento i + 1
A2
x
A1
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
*
* Propsito: Programa se suma en doble precisin
move.b #228,D7
trap #14 ; Fin del programa principal
Las operaciones de multiplicacin con argumentos de precisin mltiple (de ms de 16 bits), es necesario considerarlas como
multiplicaciones parciales de las porciones de 16 bits que componen los argumentos, introduciendo los desplazamientos adecuados a
la hora de sumar los productos parciales (segn la significacin de las porciones). El problema es absolutamente anlogo al que se
plantea en el diseo de secciones de procesamiento cuando el tamao de los operandos es un mltiplo de la lgitud mxima admitida
por las estructuras hardware bsicas de multiplicacin.
Ejemplos:
Siguiendo la filosofa anteriormente mencionada, en el siguiente programa se realiza la multiplicacin de dos nmeros de 32 bits
(contenidos en D1 y D2), cuyo resultado se da en D2/D1. El algoritmo de esta multiplicacin es:
(D1) * (D2) = (D1)[31:16] * (D2)[31:16] * 232 + { (D1)[15:00] * (D2)[31:16] + (D1)[31:16] *(D2)[15:00] } * 216 + (D1)[15:00] * (D2)[15:00]
(D1)[31:16] (D1)[15:00]
* (D2)[31:16] (D2)[15:00]
(D1)[15:00] * (D2)[15:00] D1
(D1)[31:16] * (D2)[15:00] D2
+
(D1)[15:00] * (D2)[31:16] D3
(D1)[31:16] * (D2)[31:16] D4
Suma2 Suma1
20
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
*
* Propsito: Realizar una multiplicacin en doble precisin,
* Multiplicandos de 32 bits y producto de 64 bits
*
* Entradas: (D1.l): Un multiplicando
* (D2.l): El otro multiplicando
*
* Salida: (D2/D1)[63:00]: Producto de (D2) * (D2)
*
move.b #228,D7
trap #14 ; Fin del programa principal
swap D1
add.w D2,D1
clr.l D5
addx.l D5,D4
add.w D3,D1
addx.l D5,D4
swap D1
clr.w D2
clr.w D3
swap D2
swap D3
add.l D3,D2
add.l D4,D2
Leer Nmero
Borrar D2
Nmero D1
D1 D0
No
D1 = 0 ?
1 D1
Etiqueta
Fin
D0 < 2 ? S Presentar el resultado en D2 D1
No
D0 - 1 D0
(D2 D1) * D0 (D2 D1)
bra Etiqueta
D2 D1
* (D0)[15:00] D0
(D1)[15:00] * (D0)[15:00] D1
(D1)[31:16] * (D0)[15:00] D3
+
(D2)[15:00] * (D0)[15:00] D2
(D2)[31:16] * (D0)[15:00] D4
D2 D1
22
INGENIERA TCNICA en INFORMTICA de SISTEMAS y de GESTIN de la UNED
ASIGNATURA: ESTRUCTURA Y TECNOLOGA DE COMPUTADORES I
Tutora del Centro Asociado de Plasencia
*
* Escuela de Informtica de la UNED
* Asignatura: Estructura y Tecnologa de Computadores I
* Tutora del Centro Asociado de Plasencia
*
*
* Propsito: Calcular el factorial de un nmero, en mltiple precisin
*
*
* Entradas D1: El nmero entero
*
* Salida: (D2/D1)[63:00]: Resultado del factorial
*
move.b #228,D7
trap #14 ; Fin del programa principal
clr.l D2
move.l D1,D0
tst.l D1
bne Etiqueta
addi.l #$1,D1
move.l D3,D5
swap D5
clr.w D5
andi.b #$EF,CCR
add.l D5,D1
clr.w D3
swap D3
addx.l D3,D2
swap D4
clr.w D4
add.l D4,D2
bra Etiqueta