Professional Documents
Culture Documents
Y
MICROCONTROLADORES
PRACTICA II
DNI:
C.A. Pamplona
1
ENUNCIADO PRCTICA
Disee una subrutina en el ensamblador del MC68000 para conversin de formato binario a decimal
de nmeros enteros sin signo de 16 bits. La subrutina recibir el nmero binario en la palabra menos
significativa del registro D0 y deber generar una cadena de caracteres ASCII en memoria de nombre
CADNUM correspondiente a la secuencia de cifras decimales que represente al nmero pedido. Los
sucesivos caracteres de la representacin en ASCII se almacenarn en memoria de forma consecutiva y
ordenada de mayor a menor peso. Detrs del ltimo carcter de la cadena se aadir un carcter nulo.
Obsrvese que las cifras decimales de un nmero se pueden conseguir, ordenadas de menor a
mayor peso, como la secuencia de restos de divisin que van apareciendo al dividir por 10
consecutivamente el nmero dado, desde su valor inicial hasta que el cociente es 0. Cada cifra as obtenida
se puede pasar a ASCII sumndole el cdigo ASCII correspondiente al 0 (el 48 en decimal).
Por ejemplo si se recibe el nmero 3F7B en hexadecimal = 16251 en decimal, la cadena CADNUM
que se ha de generar es [49,55,54,50,49,0] estando todos los valores anteriores en decimal. Siga el proceso
indicado a continuacin:
2
APARTADO 1- ARGUMENTOS DE ENTRADA Y SALIDA
Para realizar la conversin de binario a cadenas decimales en ASCII, creo la subrutina CONVER,
siendo el nico argumento de entrada a la misma el nmero en hexadecimal que se pasa a travs del
registro de datos D0, en su palabra de menos peso.
La rutina principal pasa a travs de D0 el n hexadecimal a la subrutina CONVER, que realiza un bucle
en el que divide el contenido de D0 entre 10 guardando el resto ms 48, en las sucesivas direcciones de
memoria de CADNUM, y volviendo a repetirse esta divisin cada vez con el cociente si ste no ha sido
cero en el ltimo caso. Al acabar el bucle, se aade un carcter nulo y se llama a la subrutina INVERTIR
para que ordene de mayor a menor los caracteres ASCII que representan el n en decimal.
Una vez devuelto el control a la rutina principal, esta se encarga de mostrar en pantalla el contenido
de CADNUM, que es el resultado pedido.
3
APARTADO 3- DESCRIPCION DEL ALGORITMO POR PASOS
Analizo los pasos de la rutina principal y subrutinas:
4
APARTADO 4- CODIFICACION EN ENSAMBLADOR DE RUTINA
*-----------------------------------------------------------
* Program : Practica II
* Written by : Juan Carlos Irigoyen Calvo
* Date : 24 de febrero de 2008
* Description: Convierte un n en binario a decimal en ASCII
*-----------------------------------------------------------
*-----------------------------------------------------------
* SUBRUTINA PRINCIPAL "CONVER"
*-----------------------------------------------------------
*------------------------------------------------------------
* INVERTIR (Subrutina PRACTICA I)
*------------------------------------------------------------
SUBR ORG $1500
INVERTIR MOVE.W D0,D1 Carga n de elementos en D1
LSR #1,D1 Divide D1/2 (elimina resto) Ser el fin de bucle
MOVE.W D0,D4 carga n de elemnetos en D4
SUB.W #1,D4 D4=D4-1 (apuntar ultimo elemento)
MOVE.L #$0,D2 Pone D2 a cero (contador bucle)
5
*---------------------------------------------------------------
* DATOS y RESULTADO
*---------------------------------------------------------------
*----------------------------------------------------------------
* FIN
*----------------------------------------------------------------
END START
6
APARTADO 5- ENSAMBLADO
El cdigo fuente de este programa se encuentra en el archivo P2.X68. Se procede al ensamblado
como se aprecia en la siguiente captura de pantalla sin errores y se procede a simular, pulsando el botn
EXECUTE, generndose automticamente los archivos P2.L68 y P2.S68
7
En la siguiente captura de pantalla se aprecia el resultado de la simulacin con la salida por pantalla
del resultado.
8
APARTADO 6- SIMULACION Y TRAZA
Se realiza una nueva simulacin generndose una traza tal y como se
pide y para el valor hexadecimal 3F7B.
El archivo de texto con la traza para esta simulacin se llama
Traza P2.
Aqu se encuentra una copia de este archivo de texto:
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
9
PC=00001000 Code=7E00 Line= 24 MOVE.L #0,D7
CONTADOR A CERO
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
00002010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ----------------
10
D0=06590031 D4=00000000 A0=00002010 A4=00000000 T_S__INT___XNZVC
D1=00000659 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000000 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00001014 Code=1180 7000 Line= 30 MOVE.B D0,(A0,D7)
Guarda resto en memoria
00002010: 31 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1---------------
00002010: 31 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1---------------
00002010: 31 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1---------------
00002010: 31 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1---------------
00002010: 31 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1---------------
11
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000001 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00001008 Code=81FC 000A Line= 26 BUCLE DIVS #10,D0
Divide D0 entre 10 y guarda en D0
00002010: 31 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1---------------
00002010: 31 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1---------------
00002010: 31 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1---------------
00002010: 31 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1---------------
00002010: 31 35 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 15--------------
12
PC=00001018 Code=5247 Line= 31 ADDQ #1,D7
Incrementa indice puntero memoria
00002010: 31 35 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 15--------------
00002010: 31 35 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 15--------------
00002010: 31 35 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 15--------------
00002010: 31 35 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 15--------------
00002010: 31 35 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 15--------------
13
00002010: 31 35 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 15--------------
00002010: 31 35 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 15--------------
00002010: 31 35 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 15--------------
00002010: 31 35 32 FF FF FF FF FF FF FF FF FF FF FF FF FF 152-------------
00002010: 31 35 32 FF FF FF FF FF FF FF FF FF FF FF FF FF 152-------------
00002010: 31 35 32 FF FF FF FF FF FF FF FF FF FF FF FF FF 152-------------
14
D1=00000010 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000003 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=0000101C Code=B07C 0000 Line= 33 CMP #0,D0
Compara cociente y cero
00002010: 31 35 32 FF FF FF FF FF FF FF FF FF FF FF FF FF 152-------------
00002010: 31 35 32 FF FF FF FF FF FF FF FF FF FF FF FF FF 152-------------
00002010: 31 35 32 FF FF FF FF FF FF FF FF FF FF FF FF FF 152-------------
00002010: 31 35 32 FF FF FF FF FF FF FF FF FF FF FF FF FF 152-------------
00002010: 31 35 32 FF FF FF FF FF FF FF FF FF FF FF FF FF 152-------------
15
PC=00001010 Code=0600 0030 Line= 29 ADD.B #48,D0
Resto + 48 para obtener codigo ASCII
00002010: 31 35 32 FF FF FF FF FF FF FF FF FF FF FF FF FF 152-------------
00002010: 31 35 32 36 FF FF FF FF FF FF FF FF FF FF FF FF 1526------------
00002010: 31 35 32 36 FF FF FF FF FF FF FF FF FF FF FF FF 1526------------
00002010: 31 35 32 36 FF FF FF FF FF FF FF FF FF FF FF FF 1526------------
00002010: 31 35 32 36 FF FF FF FF FF FF FF FF FF FF FF FF 1526------------
16
00002010: 31 35 32 36 FF FF FF FF FF FF FF FF FF FF FF FF 1526------------
00002010: 31 35 32 36 FF FF FF FF FF FF FF FF FF FF FF FF 1526------------
00002010: 31 35 32 36 FF FF FF FF FF FF FF FF FF FF FF FF 1526------------
00002010: 31 35 32 36 FF FF FF FF FF FF FF FF FF FF FF FF 1526------------
00002010: 31 35 32 36 FF FF FF FF FF FF FF FF FF FF FF FF 1526------------
00002010: 31 35 32 36 31 FF FF FF FF FF FF FF FF FF FF FF 15261-----------
17
D1=00000000 D5=00000000 A1=00000000 A5=00000000 SR=0010000000000000
D2=00000000 D6=00000000 A2=00000000 A6=00000000
D3=00000000 D7=00000004 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00001018 Code=5247 Line= 31 ADDQ #1,D7
Incrementa indice puntero memoria
00002010: 31 35 32 36 31 FF FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 FF FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 FF FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 FF FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
18
PC=00001028 Code=2007 Line= 36 MOVE.L D7,D0
LONGITUD DE ASCII EN D0 (sin contar el caracter nulo)
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
19
D0=00000005 D4=00000000 A0=00002010A4=00000000 T_S__INT___XNZVC
D1=00000002 D5=00000000 A1=00000000A5=00000000 SR=0010000000010001
D2=00000000 D6=00000000 A2=00000000A6=00000000
D3=00000000 D7=00000005 A3=00000000A7=00FF0000 SS=00FFFFFC
PC=00001504 Code=3800 Line= 47 MOVE.W
D0,D4 carga n de elemnetos en D4
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
20
D3=00000031 D7=00000005 A3=00000000 A7=00FF0000 SS=00FFFFFC
PC=00001512 Code=1183 4000 Line= 53 MOVE.B
D3,(A0,D4) Elemento izquierda pasa a derecha
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
21
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 36 31 00 FF FF FF FF FF FF FF FF FF FF 15261-----------
00002010: 31 35 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 15251-----------
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
22
D0=00000005 D4=00000003 A0=00002010A4=00000000 T_S__INT___XNZVC
D1=00000002 D5=00000036 A1=00000000A5=00000000 SR=0010000000000000
D2=00000001 D6=00000000 A2=00000000A6=00000000
D3=00000035 D7=00000005 A3=00000000A7=00FF0000 SS=00FFFFFC
PC=0000151A Code=5344 Line= 55 SUB.W
#1,D4 Apunta anterior elemento por la derecha
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
23
D3=00000035 D7=00000005 A3=00000000 A7=00FF0000 SS=01000000
PC=00000910 Code=3248 Line= 13 MOVEA A0,A1
Direccion CADNUM en A1
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
00002010: 31 36 32 35 31 00 FF FF FF FF FF FF FF FF FF FF 16251-----------
24