You are on page 1of 7

Programación de computadores con debugger

Practica 1 materia: Microprocesadores y microcontroladores
SAMUEL QUINE!" #ASAS
s am uk as as @hotm ail.c om
Resumen En el desarrollo de la práctica es de
diseñar un programa en lenguaje de
programación assembler, luego un programa en
simuproc, para programar un microprocesador
virtual.
1$ Introducción
El siguiente Trabajo consiste en el diseño de un
programa utilizando el lenguaje de programación
assembler que es el más cercano al lenguaje
máquina y además es un lenguaje de bajo nivel
se utilizó la herramienta de simulación de
programación 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 *iseño de dos programas
previamente determinados.
• &or medio de los ejercicios propuestos en la
gu+a de laboratorio sustentar el proceso de
programación en el lenguaje de bajo nivel.
%$1 eor(a
,as describir- as+. // 0 #1"T 2parámetro3 *ónde.
// signi4ica el )ódigo de la #nstrucción #1"T es la
instrucción 2parámetro3 es el parámetro si esta
tiene o 2parametro5 parametro63 si el parámetro
es doble !cá pondr- algunos ejemplos Estas son
las instrucciones soportadas por la versión actual.
75 0 ,*! 2mem3
)argue en !/ el contenido de la dirección de
$emoria especi4icada. *igamos que en la posición
de memoria 58 está el valor 57555 despu-s de
ejecutada la instrucción
,*! 58 se obtiene que !/957555 Es equivalente
a usar la instrucción $(: !/ 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 dirección de
$emoria especi4icada. "upongamos que tengo el
valor 5757557 en el registro !/ y quiero llevarlo a
la posición de memoria =) la instrucción es "T!
=) Es equivalente a usar la instrucción $(:
=)!/ Es mejor usar $(: debido a que si quiero
pasar alg>n dato de una dirección 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 instrucción no necesita parámetros.
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 dirección de $emoria o un
'egistro 7E 0 #1)
2dest3
#ncrementa en 5 el destino especi4icado el
parámetro puede ser una dirección de memoria o
un registro. "i en la posición 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 combinación de estos.
&ara copiar lo que está en la posición de memoria
56E a la posición *6 se usa la instrucción $(:
*6 56E
55 0 !1* 2destorig3
I lógico hace un I lógico entre todos los bits de
los dos
operándos escribiendo el resultado en el destino.
,os parámetros 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 instrucción
!1* !/ =8 obtendr- en !/ el resultado 5775. El
I lógico lo que hace
es dejar los bits en com>n que tengan los dos
n>meros.
56 0 1(T 2destino3
1( lógico 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 lógico todo bit activo en cualquiera de
los operándoos 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 instrucción
(' =! =? obtendr- en =! el resultado 5755555.
5@ 0 /(' 2destorig3
( eJclusivo realiza un ( eJclusivo entre los
operándoos 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 instrucción
/(' =! =? 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 posición 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 posición 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 dirección de
memoria. "i el resultado de la suma supera los 5A
bits el resultado queda as+. en ?/ los bits más
signi4icativos y en ?/ los menos tambi-n se
activa el (ver4loM 4lag.
65 0 "%? 2mem3
'estar.
!/ 9 !/ 0 el contenido de la dirección de
memoria.
66 0 $%, 2mem3
$ultiplicar.
!/ 9 !/ N el contenido de la dirección de
memoria.
"i el n>mero resultante supera su longitud en
binario de 5A bits este resultado se parte
almacenando los bits más signi4icativos en el
'egistro ?/. "i el resultado de una operación
4uera 575575777555577757555 C65 bitsD ,os
registros quedar+an as+.
! 9 5777555577757555 Clos >ltimos 5AbitsD
? 9 57557 Clos primeros ?its Clos más
signi4icativosDD
Tambi-n se activa el 8lag (ver4loM para indicar
que en la >ltima operación sucedió esto.
6= 0 *#: 2mem3
*ividir.
!/ 9 !/ H el contenido de la dirección 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 dirección de memoria
donde está la siguiente instrucción a ejecutarQ
=5 0 PER 2mem3
"altar si son iguales.
"i G 9 5 &) 9 contenido de la memoria. 8unción
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 posición de
memoria @< tengo el n>mero 5577 al ejecutar la
instrucción )$& @< 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
comparaciónD !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 instrucción as+ P$E
=8 inmediatamente despu-s de ejecutar la
instrucción del ejemplo que coloque
en la instrucción =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 ejecución.
8unción equivalente en ).
i4 C!/ S memD
I "i necesitas hacer un.
i4 C!/ S9 memD
#nmediatamente despu-s de la instrucción 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 instrucción as+ P$!
6? inmediatamente despu-s de ejecutar la
instrucción del ejemplo que coloque en la
instrucción =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
ejecución saltando a la dir de mem especi4icada.
8unción 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. 8unción
equivalente en ). i4 C!/ U9 memD
@7 0 ,*T
,ee un valor del Teclado y lo lleva al registro !/
Esta instrucción es para comunicarse con el
usuario pidi-ndole que entre un *atoV &uede
colocar una descripción del dato que pide que se
mostrará en tiempo de ejecución.
@5 0 E!&
Escribe en &antalla el contenido del registro !/
Esta instrucción tambi-n es para comunicarse con
el usuarioV
&uede colocar una descripción del dato que se
entrega este se mostrará en tiempo de ejecución.
@6 0 $"<
$uestra un mensaje en pantalla Ej. $"< Q;ola
$undoUUW
K7 0 ,*? 2mem3
,a instrucción 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 dirección 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 más "igni4icativos Ej.
"upongamos que el n>mero
75777757557757775777777777777777 está
cargado en memoria as+.
76! 7577775755775777 C,os d+gitos más
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 más 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 operación 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 instrucción
como un )$& para n>meros de =6 bits.
A6 0 $%,8 2mem3
$ultiplicación.
?/ 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
*ivisión.
?/ y !/ 9 ?/ y !/ H 2mem3 y memL5 en )/
queda el residuo de la división en entero de 5A bits
A@ 0 #T(8
)onversión 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 conversión queda en
?/ Cbits más 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(#
)onversión 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 operación no hace nada. Xtil para cuando se
modi4ica
la memoria para parchar código y desactivar
instrucciones.
FF 0 ;,T
Terminar &rograma Todo &rograma lleva esta
instrucción para indicarle al simulador que el
programa ha terminado su ejecución.
)$ *esarrollo de la acti'idad
*iseñar un programa que permita recibir n>meros
y realizar las cuatro operaciones aritm-ticas
básicas.
*iseñe un programa que represente la solución
matemática a un problema por ejemplo hallar el
área el volumen o encontrar la solución a un
sistema de ecuaciones lineales puede optar por
sistemas básicos 6J6 =J= o un programa que
halle la solución a un sistema nJn
Rue es "imu&roc. es un "imulador de un
&rocesador
;ipot-tico en el que se puede aprender las
nociones básicas para empezar a programar en
lenguaje ensamblador en el cual podemos
observar todo el proceso interno de ejecución 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 dirección
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 más 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
operación 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 más "igni4icativos
Ej. "upongamos que el n>mero
75777757557757775777777777777777 está
cargado en memoria as+.
76! 7577775755775777 C,os d+gitos más
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
instrucción como un )$& para n>meros de =6
bits.
$%,8 C$E$D. $ultiplicación. ?/ 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. *ivisión ?/ y !/ 9 ?/ y !/ H 2mem3
y memL5 en )/ queda el residuo de la división
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.
*iseñe un programa que permita representar la
solución matemática a un problema por ejemplo
hallar el área el volumen o encontrar la solución
a un sistema de ecuaciones lineales puede optar
por sistemas básicos 6J6 =J= o un programa que
halle la solución 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
• %tilización del lenguaje assembler y
programación en un microprocesador.
• !prendizaje del lenguaje de bajo nivel y
similitud con el lenguaje máquina.
• &rogramación básica de un microprocesador.
,$ Agradecimientos
&or >ltimo agradecer a los administradores del
laboratorio de electrónica y al tutor 1-stor Pavier
'odr+guez por realizar esta práctica.
!e-erencias$
253 ;-ctor %riel :illamil <onzález C677FD )entro
1acional de
$edios para el !prendizaje. )urso
microprocesadores y
micro0controladores. %niversidad 1acional !bierta
y a
*istancia %1!*.
PUN" 1
PUN" %