Practica 1 materia: Microprocesadores y microcontroladores
SAMUEL QUINE!" #ASAS s am uk as as @hotm ail.c om Resumen En el desarrollo de la prctica es de disear un programa en lenguaje de programacin assembler, luego un programa en simuproc, para programar un microprocesador virtual. 1$ Introduccin El siguiente Trabajo consiste en el diseo de un programa utilizando el lenguaje de programacin assembler que es el ms cercano al lenguaje mquina y adems es un lenguaje de bajo nivel se utiliz la herramienta de simulacin de programacin simuproc el cual permite programar un microprocesador virtual y correr programas. %$ "b&eti'os !plicar el conocimiento general y principios de operaciones del programa "#$%&'() en el entorno de un escenario. !plicar los conceptos !dquiridos en el lenguaje assembler al realizar el *iseo de dos programas previamente determinados. &or medio de los ejercicios propuestos en la gu+a de laboratorio sustentar el proceso de programacin en el lenguaje de bajo nivel. %$1 eor(a ,as describir- as+. // 0 #1"T 2parmetro3 *nde. // signi4ica el )digo de la #nstruccin #1"T es la instruccin 2parmetro3 es el parmetro si esta tiene o 2parametro5 parametro63 si el parmetro es doble !c pondr- algunos ejemplos Estas son las instrucciones soportadas por la versin actual. 75 0 ,*! 2mem3 )argue en !/ el contenido de la direccin de $emoria especi4icada. *igamos que en la posicin de memoria 58 est el valor 57555 despu-s de ejecutada la instruccin ,*! 58 se obtiene que !/957555 Es equivalente a usar la instruccin $(: !/ 58 ;ay casos donde es mejor usar $(: si se desea pasar datos sin tener que pasarlos por !/. 76 0 "T! 2mem3 <uarde el contenido de !/ en la direccin de $emoria especi4icada. "upongamos que tengo el valor 5757557 en el registro !/ y quiero llevarlo a la posicin de memoria =) la instruccin es "T! =) Es equivalente a usar la instruccin $(: =)!/ Es mejor usar $(: debido a que si quiero pasar alg>n dato de una direccin de memoria a otra usando ,*! y "T! ser+an dos instrucciones. ,*! mem5 y luego "T! mem6 mientras que con $(: ser as+. $(: mem6 mem5 7= 0 /!? #ntercambia los valores de los registros !/ y ?/ Esta instruccin no necesita parmetros. 7@ 0 ),! ;ace !/ 9 7 7A 0 &%"; 2registro3 Env+a el valor del registro especi4icado a la pila 7B 0 &(& 2registro3 Trae de la &ila el >ltimo :alor llevado por &%"; Cindicado por el registro "&D y lo almacena en el registro especi4icado. 1ota. En todas las instrucciones desde 7E hasta la 5E *est puede ser una direccin de $emoria o un 'egistro 7E 0 #1) 2dest3 #ncrementa en 5 el destino especi4icado el parmetro puede ser una direccin de memoria o un registro. "i en la posicin de memoria E? est el valor 5775 al ejecutar #1) E? se obtiene que ahora el valor de E? es 5757. 7F 0 *E) 2dest3 *ecremento en 5 el destino especi4icado "i el destino queda 9 7 se vuelve G 9 5 57 0 $(: 2destorig3 )opia el valor almacenado en el origen al destino. El destino yHo origen pueden ser registros o direcciones de memoria o combinacin de estos. &ara copiar lo que est en la posicin de memoria 56E a la posicin *6 se usa la instruccin $(: *6 56E 55 0 !1* 2destorig3 I lgico hace un I lgico entre todos los bits de los dos operndos escribiendo el resultado en el destino. ,os parmetros pueden ser direcciones de memoria o 'egistros. ,a siguiente regla aplica. 5 !1* 5 9 5 5 !1* 7 9 7 7 !1* 5 9 7 7 !1* 7 9 7 "i en !/ tengo el n>mero 5775575 y en la pos =8 tengo el n>mero 55755. !l ejecutar la instruccin !1* !/ =8 obtendr- en !/ el resultado 5775. El I lgico lo que hace es dejar los bits en com>n que tengan los dos n>meros. 56 0 1(T 2destino3 1( lgico invierte los bits del operando 4ormando el complemento del primero. 1(T 5 9 7 1(T 7 9 5 "i en !/ tengo 57755 al ejecutar 1(T !/ obtengo !/95555555555575577 5= 0 (' 2destorig3 ( inclusive lgico todo bit activo en cualquiera de los operndoos ser activado en el destino. ,a siguiente regla aplica. 5 (' 5 9 5 5 (' 7 9 5 7 (' 5 9 5 7 (' 7 9 7 "i en =! tengo el n>mero 5775575 y en la pos =? tengo el n>mero 55755. !l ejecutar la instruccin (' =! =? obtendr- en =! el resultado 5755555. 5@ 0 /(' 2destorig3 ( eJclusivo realiza un ( eJclusivo entre los operndoos y almacena el resultado en destino. ,a siguiente regla aplica. 5 /(' 5 9 7 5 /(' 7 9 5 7 /(' 5 9 5 7 /(' 7 9 7 "i en =! tengo el n>mero 5775575 y en la pos =? tengo el n>mero 55755. !l ejecutar la instruccin /(' =! =? obtendr- en =! el resultado 5757557. 5K 0 '(, 2destveces3 'ota los bits a la izquierda las veces especi4icadas Cen decimalD los bits que salen por la izquierda re0 entran por la *erecha. En el )arry 8lag queda el >ltimo bit rotado. "upongamos que en la posicin BE tengo el numero 575557 !l Ejecutar... obtengo en BE )9 '(, BE 6 57555777 7 '(, BE B 5755577777777 7 '(, BE 5= 5577777777777575 5 5A 0 '(' 2destveces3 'ota los bits a la derecha las veces especi4icadas Cen decimalD los ?its que salen por la derecha re0 entran por la izquierda. El )arry 8lag guarda el >ltimo bit rotado. 5B 0 ";, 2destveces3 *esplaza los bits a la izquierda el n>mero de veces especi4icado Cen decimalD agregando ceros a la derecha el )arry 8lag guarda >ltimo bit desplazado. 5E 0 ";' 2destveces3 *esplaza los bits a la *erecha el n>mero de veces especi4icado Cen decimalD agregando ceros a la izquierda el )arry 8lag guarda >ltimo bit desplazado. "upongamos que en la posicin 5! tengo el numero 575557 !l Ejecutar... obtengo en 5! )9 ";' 5! 6 5755 5 ";' 5! A 7 5 ";' 5! 55 7 7 67 0 !** 2mem3 "umar. !/ 9 !/ L el contenido de la direccin de memoria. "i el resultado de la suma supera los 5A bits el resultado queda as+. en ?/ los bits ms signi4icativos y en ?/ los menos tambi-n se activa el (ver4loM 4lag. 65 0 "%? 2mem3 'estar. !/ 9 !/ 0 el contenido de la direccin de memoria. 66 0 $%, 2mem3 $ultiplicar. !/ 9 !/ N el contenido de la direccin de memoria. "i el n>mero resultante supera su longitud en binario de 5A bits este resultado se parte almacenando los bits ms signi4icativos en el 'egistro ?/. "i el resultado de una operacin 4uera 575575777555577757555 C65 bitsD ,os registros quedar+an as+. ! 9 5777555577757555 Clos >ltimos 5AbitsD ? 9 57557 Clos primeros ?its Clos ms signi4icativosDD Tambi-n se activa el 8lag (ver4loM para indicar que en la >ltima operacin sucedi esto. 6= 0 *#: 2mem3 *ividir. !/ 9 !/ H el contenido de la direccin de memoria ?/9!/ O el contenido de la dir de memoria C?/ 9 modulo o residuoD. 6@ 0 ),1 ,impia el 1egative 8lag. 1 9 7 6K 0 ),) ,impia el )arry 8lag. ) 9 7 6A 0 "T) &one el )arry 8lag. ) 9 5 6B 0 )$) )omplementa CinvierteD el )arry 8lag. "i ) 9 5 vuelve ) 9 7 y viceversa. 6F 0 ,((& 2mem3 *ecrementa )/ y salta a la &os de memoria si )/ no es cero. =7 0 P$& 2mem3 "alto incondicional. &) 9 direccin de memoria donde est la siguiente instruccin a ejecutarQ =5 0 PER 2mem3 "altar si son iguales. "i G 9 5 &) 9 contenido de la memoria. 8uncin equivalente en ). i4 C!/ 99 memD =6 0 )$& 2mem3 )ompara !/ con 2mem3 si !/ es mayor G97 197 si es igual G95 197 si es menor G97 195 "upongamos que en !/ tengo el n>mero 57557 y en la posicin de memoria @< tengo el n>mero 5577 al ejecutar la instruccin )$& @< obtengo que como el numero almacenado en !/ es mayor entonces los 8lags de )ontrol me quedan as+. G97 y 197 1ota. "olo en las versiones 5.=.A.6 y anteriores En !/ quedaba el resultado de la resta Cde la comparacinD !hora ya no. "ugerencia. si necesita el valor original de !/ puede usar la pila para almacenarlo temporalmente. == 0 P$E 2mem3 "altar si es $enor. "i 1 9 5 &) 9 contenido de la memoria. "upongamos que ejecuto esta instruccin as+ P$E =8 inmediatamente despu-s de ejecutar la instruccin del ejemplo que coloque en la instruccin =6 al ejecutar P$E =8 se veri4ica el 8lag 1 y como en este caso se encuentra en 7 Cporque el n>mero no es menorD entonces no se realiza dicho "alto a =8 porque el valor de &) no se modi4ica el programa sigue su ejecucin. 8uncin equivalente en ). i4 C!/ S memD I "i necesitas hacer un. i4 C!/ S9 memD #nmediatamente despu-s de la instruccin P$E colocas una PER =@ 0 P$! 2mem3 "altar si es $ayor. "i G 9 7 y 1 9 7 &) 9 contenido de memoria. "upongamos que ejecuto esta instruccin as+ P$! 6? inmediatamente despu-s de ejecutar la instruccin del ejemplo que coloque en la instruccin =6 al ejecutar P$! 6? se veri4ican los 8lag 1 y G y como en este caso los dos son 7 Cporque el n>mero es menorD entonces si se realiza dicho "alto a 6? ya que el valor del &) se modi4ica el programa sigue su ejecucin saltando a la dir de mem especi4icada. 8uncin equivalente en ). i4 C!/ T memD =K 0 P) 2mem3 "altar si el )arry 8lag est activado. "i ) 9 5 &) 9 contenido de memoria. =A 0 P1) 2mem3 "altar si el )arry 8lag no est activado. "i ) 9 7 &) 9 contenido de memoria =B 0 P( 2mem3 "altar si el (ver4loM 8lag est !ctivado. "i ( 9 5 &) 9 contenido de memoria =E 0 P1( 2mem3 "altar si el (ver4loM 8lag no est activado. "i ( 9 7 &) 9 contenido de memoria =F 0 P1E 2mem3 "altar si no son iguales. "i G 9 7 &) 9 contenido de memoria. 8uncin equivalente en ). i4 C!/ U9 memD @7 0 ,*T ,ee un valor del Teclado y lo lleva al registro !/ Esta instruccin es para comunicarse con el usuario pidi-ndole que entre un *atoV &uede colocar una descripcin del dato que pide que se mostrar en tiempo de ejecucin. @5 0 E!& Escribe en &antalla el contenido del registro !/ Esta instruccin tambi-n es para comunicarse con el usuarioV &uede colocar una descripcin del dato que se entrega este se mostrar en tiempo de ejecucin. @6 0 $"< $uestra un mensaje en pantalla Ej. $"< Q;ola $undoUUW K7 0 ,*? 2mem3 ,a instruccin carga en !/ el contenido de memoria almacenado en 2mem3 L ?/ ej. *igamos que ?/957 V ,*? 5! carga el contenido de 5) en !/ K5 0 "T? 2mem3 <uarda el contenido de !/ en la direccin 2mem3 L ?/ ej. *igamos que ?/9575 V "T? =! guarda !/ en =8 KK 0 ,*8 2mem3 )arga en ?/ y !/ un n>mero de =6 bits C#EEED que est almacenado en la dir 2mem3 y memL5. En ?/ quedan los d+gitos ms "igni4icativos Ej. "upongamos que el n>mero 75777757557757775777777777777777 est cargado en memoria as+. 76! 7577775755775777 C,os d+gitos ms signi4icativosD 76? 5777777777777777 C,os d+gitos menos signi4icativosD %n ,*8 6! dejar+a el siguiente resultado. ?/. 7577775755775777 !/. 5777777777777777 00000000000000000000000000 1ota. &ara pedirle al usuario o mostrar estos n>meros #EEE BK@ en pantalla usar puerto 5 con las instrucciones #1 !/ 5 y (%T 5!/ KA 0 "T8 2mem3 <uarda en 2mem3 y memL5 el contenido de ?/ y !/ Ej. siendo !/ y ?/ 9 al ejemplo anterior un "T8 6! deja la memoria como el ejemplo anterior. A7 0 !**8 2mem3 "uma n>meros de =6 bits. En ?/ y !/ queda el resultado de la suma de estos ms el contenido de 2mem3 y memL5 Estos n>meros #EEE BK@ son n>meros que pueden ser de punto 4lotante o enteros desde 0 65@B@E=A@B hasta 65@B@E=A@B si en cualquier operacin de estas aritm-ticas se sobrepasa este valor se activa el (ver4loM 4lag. A5 0 "%?8 2mem3 'esta el numero de =6 bits. ?/ y !/ 9 ?/ y !/ 0 2mem3 y memL5 &uedes utilizar esta instruccin como un )$& para n>meros de =6 bits. A6 0 $%,8 2mem3 $ultiplicacin. ?/ y !/ 9 ?/ y !/ N 2mem3 y memL5 "i el resultado es T 65@B@E=A@B 'esultado 9 65@B@E=A@B y (ver4loM 8lag 9 5 A= 0 *#:8 2mem3 *ivisin. ?/ y !/ 9 ?/ y !/ H 2mem3 y memL5 en )/ queda el residuo de la divisin en entero de 5A bits A@ 0 #T(8 )onversin de Entero a 'eal. )onvierte un n>mero entero C5AbitsD almacenado en !/ al mismo n>mero pero representado en 'eal #EEEBK@ C=6bitsD el 'esultado de la conversin queda en ?/ Cbits ms signi4icativosD y !/ ,os registros de control cambian de acuerdo al n>mero convertido. QGQ si el n>mero es cero Q1Q si el n>mero es negativo. AK 0 8T(# )onversin de 'eal a Entero. )onvierte un n>mero 'eal C=6bitsD a su equivalente en entero ?/ y !/ en un entero C5AbitsD el 'esultado queda en !/. ,os registros de control cambian de acuerdo al n>mero convertido. QGQ si el n>mero es cero Q1Q si el n>mero es negativo Q(Q si el n>mero real es mayor de AKK=K. E7 0 #1 registro puerto ,leva al 'egistro el valor retornado por el puerto especi4icado. Ej. #1 !/EV lleva a !/ el valor retornado por el puerto E C'eloj. los segundos del sistemaD. E5 0 (%T puerto registro Escribe en el puerto especi4icado el valor del registro. F7 0 1(& Esta operacin no hace nada. Xtil para cuando se modi4ica la memoria para parchar cdigo y desactivar instrucciones. FF 0 ;,T Terminar &rograma Todo &rograma lleva esta instruccin para indicarle al simulador que el programa ha terminado su ejecucin. )$ *esarrollo de la acti'idad *isear un programa que permita recibir n>meros y realizar las cuatro operaciones aritm-ticas bsicas. *isee un programa que represente la solucin matemtica a un problema por ejemplo hallar el rea el volumen o encontrar la solucin a un sistema de ecuaciones lineales puede optar por sistemas bsicos 6J6 =J= o un programa que halle la solucin a un sistema nJn Rue es "imu&roc. es un "imulador de un &rocesador ;ipot-tico en el que se puede aprender las nociones bsicas para empezar a programar en lenguaje ensamblador en el cual podemos observar todo el proceso interno de ejecucin del programa a trav-s de cada ciclo del procesador. "imu&roc con su gran variedad de instrucciones CK7LD es un simulador con el cual tienes in4initas posibilidades de pruebas. #ncluye soporte para n>meros de punto 4lotante usando #EEE BK@ y enteros desde 06<? hasta 6<? )omandos utilizados. $"<. $uestra un mensaje en pantalla. #1 !/. )argue en !/ el contenido de la direccin de $emoria especi4icada. "T8 C$E$D <uarda en 2mem3 y memL5 el contenido de ?/ y !/ Ej. siendo !/ y ?/ 9 al ejemplo anterior un "T8 6! deja la memoria como el ejemplo anterior. !**8 C$E$D. "uma n>meros de =6 bits. En ?/ y !/ queda el resultado de la suma de estos ms el contenido de 2mem3 y memL5. Estos n>meros #EEE BK@ son n>meros que pueden ser de punto 4lotante o enteros desde 0 65@B@E=A@B hasta 65@B@E=A@B si en cualquier operacin de estas aritm-ticas se sobrepasa este valor se activa el (ver4loM 4lag. (%T &%E'T( 'E<#"T'(. Escribe en el puerto especi4icado el valor del registro. ,*8 C$E$D. )arga en ?/ y !/ un n>mero de =6 bits C#EEED que est almacenado en la dir 2mem3 y memL5. En ?/ quedan los d+gitos ms "igni4icativos Ej. "upongamos que el n>mero 75777757557757775777777777777777 est cargado en memoria as+. 76! 7577775755775777 C,os d+gitos ms signi4icativosD 76? 5777777777777777 C,os d+gitos menos signi4icativosD %n ,*8 6! dejar+a el siguiente resultado. ?/. 7577775755775777 !/. 5777777777777777 00000000000000000000000000 1ota. &ara pedirle al usuario o mostrar estos n>meros #EEE BK@ en pantalla usar puerto 5 con las instrucciones #1 !/ 5 y (%T 5!/ "%?8 C$E$D. 'esta el numero de =6 bits. ?/ y !/ 9 ?/ y !/ 0 2mem3 y memL5 &uedes utilizar esta instruccin como un )$& para n>meros de =6 bits. $%,8 C$E$D. $ultiplicacin. ?/ y !/ 9 ?/ y !/ N 2mem3 y memL5 "i el resultado es T 65@B@E=A@B 'esultado 9 65@B@E=A@B y (ver4loM 8lag 9 5 *#:8 C$E$D. *ivisin ?/ y !/ 9 ?/ y !/ H 2mem3 y memL5 en )/ queda el residuo de la divisin en entero de 5A bits &'(<'!$!. )!,)%,!*('! ?!"#)! E1 ,E1<%!PE !""E$?,E' $"< )!,)%,!*('! ?!"#)! $"< *#<#TE E, &'#$E' 1X$E'( #1 !/ 5 "T8 67 $"< *#<#TE E, "E<%1*( 1X$E'( #1 !/ 5 "T8 66 !**8 67 $"< ,! "%$! *E ,(" 1%$E'(" E" (%T 5 !/ ,*8 67 "%?8 66 $"< ,! 'E"T! E1T'E ,(" *(" 1%$E'(" E" (%T 5 !/ ,*8 67 $%,8 66 $"< ,! $%,T#&,#)!)#(1 *E ,(" *(" 1%$E'(" E" (%T 5 !/ ,*8 67 *#:8 66 $"< ,! *#:#"#(1 *E ,(" *(" 1%$E'(" E" (%T 5 !/ $"< 8#1!, *E, &'(<'!$! ;,T &!"Y ! &!"( *E, &'(<'!$! Z)!,)%,!*('! ?!"#)! E1 "#$%&'()W *iagrama de 4lujo. &rograma n>meros dos. *isee un programa que permita representar la solucin matemtica a un problema por ejemplo hallar el rea el volumen o encontrar la solucin a un sistema de ecuaciones lineales puede optar por sistemas bsicos 6J6 =J= o un programa que halle la solucin a un sistema nJn. &'(<'!$!. )!,)%,! E, !'E! *E %1 )%!*'!*( $"< )!,)%,! E, !'E! *E %1 )%!*'!*( $"< *#<#TE E, ,!*( *E, )%!*'!*( #1 !/ 5 "T8 67 $%,8 67 $"< E, !'E! *E, )%!*'!*(" E" (%T 5 !/ $"< 8#1!, *E, &'(<'!$! ;,T &!"( ! &!"( *E &'(<'!$! R%E )!,)%,! E, !'E! *E %1 )%!*'!*( +$ #onclusiones %tilizacin del lenguaje assembler y programacin en un microprocesador. !prendizaje del lenguaje de bajo nivel y similitud con el lenguaje mquina. &rogramacin bsica de un microprocesador. ,$ Agradecimientos &or >ltimo agradecer a los administradores del laboratorio de electrnica y al tutor 1-stor Pavier 'odr+guez por realizar esta prctica. !e-erencias$ 253 ;-ctor %riel :illamil <onzlez C677FD )entro 1acional de $edios para el !prendizaje. )urso microprocesadores y micro0controladores. %niversidad 1acional !bierta y a *istancia %1!*. PUN" 1 PUN" %