Sie sind auf Seite 1von 12

Ao de la consolidacin del Mar de Grau

Facultad de Ingeniera de Produccin y


Servicios
Escuela profesional de Ingeniera Electrnica.

Curso: Arquitectura de Computadoras


Turno: A, Martes 7.00 9.00 am
Grupo:

Recuperacin primera parte semestre


Prueba de programas de suma y ordenamiento en
debug

Docente: Ing. Erasmo Sulla Espinoza


Alumno:
Ticona Olazabal, Renzo Alberto

CUI: 20103197

Arequipa 31 de Mayo del 2016

Contenido
Usando el DEBUG .......................................................................................................................... 2
Programa de suma y promedio: .................................................................................................... 4
Programa de ordenamiento .......................................................................................................... 8
Bibliografa: ................................................................................................................................. 11

Usando el DEBUG
Usamos mquina virtual con Windows XP o usamos el programa DOSbox que est en el CD del
curso.
En este caso usamos el programa DOSbox, para ello hay que seguir los siguientes pasos:
1) Instalar el programa:

2) Obtener el archivo Debug.exe, en este caso lo obtuvimos de una mquina virtual con
Windows XP, tambin puede ser descargado de internet.

La ruta del archivo debug.exe en Windows XP es:


C:\WINDOWS\system32\debug.exe
3) copiar el archivo debug.exe a un directorio en nuestra PC, en este caso lo pusimos en la
unidad D.

4) Ahora que ya tenemos el archivo debug.exe en la PC, debemos ejecutarlo, para ello
arrancamos el DOSbox.

Para iniciar el debug, debemos primero cargarlo.


Para esto tenemos que introducir las siguientes instrucciones en la consola desplegada
3

-mount D: D:\
-D:
-debug

; aqu estamos montando la unidad D de nuestro disco duro


; con esto estamos dando como carpeta de trabajo al disco D
; como copiamos el archivo Debug en el disco D y con las anteriores
instrucciones nos encontramos trabajando en este directorio, solo
queda ejecutarlo.

Programa de suma y promedio:


C. Programa, codificacin lenguaje mquina, suma, promedio 9 nmeros (8,2,2,6,7,4,3,1,5)
usando bucles, inicio de direccin de datos [200]
Cdigo a usar:
cargar_numeros:
MOV [0200h],08h
MOV [0201h],02h
MOV [0202h],02h
MOV [0203h],06h
MOV [0204h],07h
MOV [0205h],04h
MOV [0206h],03h
MOV [0207h],01h
MOV [0208h],05h
suma:
MOV BX,0200h
MOV CX,09h
PUSH cx
XOR AX,AX
CLC
lazo:
ADD DL,[BX+SI]
ADC AX,DX
XOR DX,DX
INC SI

;asigna registro base a 100h


;asigna contador CX a N, en este caso 9
;limpia el AX
;limpia el flag de acarreo
;coge la base y la suma con DL, almacenando
resultado en DL
;coge DX (DL) y lo suma con acarreo en el AX
;limpia DX para un sgte loop, el AX es donde se
almacena la suma
; incrementa el SI

LOOP lazo
MOV
POP
DIV
mov
mov

[BX+09h],AL
cx
cx
[BX+0A],AL
[BX+0B],DX

;decrementa CX y salta a lazo, si CX llega a 0


con el decremento, entonces sale del bucle
;almacena suma en 0209 (BX+09)

;Almacena cociente en 020A


;Almacena residuo en 020B

Desarrollo:
1) Primero cargamos los nmeros a memoria:
Para ello usamos el comando e del debug.

Podemos corroborar que est bien hecho usando el comando d [direccin]


En este caso d 200 (ver la memoria a partir de la direccin 200)

2) Ahora usamos el comando a para empezar a escribir nuestro cdigo.

Para finalizar la escritura del cdigo, apretamos enter una vez al final sin escribir ninguna
instruccin
3) Ahora vamos a ejecutar nuestro programa
Para ello usamos el comando t [=xxxx:xxxx] donde xxxx:xxxx es la direccion de inicio de las
instrucciones del cdigo
En nuestro caso es 0769:0100

Podemos ir viendo como AX va incrementando en cada bucle, ya que es all donde se almacena
la suma de los nmeros, cuando se hayan terminado las 9 sumas, AX tendr el valor de 26h
(verde), CX el valor de 0h (Rojo) y SI el valor de 9h (Azul)

Al finalizar, el programa, usaremos D 200 para volver a revisar los valores de las memorias,
recordemos que la suma debe estar en 0209h (verde), el cociente (promedio) debe estar en
020Ah (rojo), y el resto de dicha divisin debe estar en 020Bh (azul).

Con esto habramos probado con xito el programa de suma y promedio de 9 nmeros.
7

Programa de ordenamiento
E. Programa, codificacin lenguaje mquina, ordenamiento de 9 numeros (8, 2, 2, 6, 7, 4, 3, 1,
5) usando bucles, inicio de direccin de datos [200]
Cdigo a usar:
setea_numeros:
MOV
[0200h],08h
MOV
[0202h],02h
MOV
[0204h],02h
MOV
[0206h],06h
MOV
[0208h],07h
MOV
[020Ah],04h
MOV
[020Ch],03h
MOV
[020Eh],01h
MOV
[0210h],05h
MOV BX,0200h
MOV CX,9
lazo1:
PUSH CX
MOV CX,8
MOV AX,[BX]
XOR SI,SI

Lazo2:
CMP AX,[BX+SI+2]
JA No_cambia
PUSH [BX+SI+2]
MOV [BX+SI+2],AX
POP [BX+SI]

No_cambia:
ADD SI,2

MOV AX,[BX+SI]
LOOP lazo2
POP CX
LOOP lazo1

;define registro base para trabajar luego con


el SI y con desplazamientos de 2
;carga el 4 en CX que sera nuestro contador
;poner encima en la pila
;reducir en uno el acumulador y ponerlo
nuevamente en cx
;contenido de BX enviado a AX
;limpia el indice de pila, osea lo pone en 0
psss

;compara el primero osea AX contra [BX+SI+2] y


se setea flag correspondiente
;salta a etiqueta No_cambia si la comparativa
sale mayor o igual (en debug seria 011B)
;almacena en la pila el valor de memoria BX
desplazado en 2
;pone el valor de AX en el base BX + el ndice
SI desplazado en 2, este es el ordenamiento
;este recupera el valor que fue almacenado en
pila en la memoria anterior, este es el
ordenamiento

;como es mayor, entonces no hay que hacer


nada... entoncs pasamos el siguiente
agregandole 2 al indice
;estamos poniendo el nuevo numero al AX para
compararlo denuevo
;saltamos a lazo 2 para comparar (en debug
010E)
;coje valor de pila y lo retorna al CX
;salta a lazo 1 y decrementa cx (en debug 0106)

Desarrollo:
1) Primero cargamos los nmeros a memoria:
Para ello usamos el comando e del debug.

Podemos corroborar que est bien hecho usando el comando d [direccin]


En este caso d 200 (ver la memoria a partir de la direccin 200)

2) Ahora usamos el comando a para empezar a escribir nuestro cdigo.

3) Ahora vamos a ejecutar nuestro programa


Para ello usamos el comando t [=xxxx:xxxx] donde xxxx:xxxx es la direccin de inicio de las
instrucciones del cdigo
En nuestro caso es 0769:0100

10

Se har un barrido una y otra vez para encontrar valores menores a la izquierda de un valor
mayor, en caso suceda, se har un intercambio de valores.
La secuencia original es: 8 2 2 6 7 4 3 1 5, entonces el primer cambio que encontraremos ser
entre el 2 y el 6, siendo la secuencia cambiada a 8 2 6 2 7 4 3 1 5

Avanzaremos hasta el final del programa, el cual nos debe dar como resultado la secuencia
876543221

Podemos observar que la secuencia ha sido ordenada, por lo que queda demostrado la
funcionabilidad de este programa mediante la herramienta debug.

Bibliografa:
Maicol Blas - https://www.youtube.com/watch?v=CESBFuP5aHw
Maicol Blas - https://www.youtube.com/watch?v=3GVV8ncgeVU
http://kipirvine.com/asm/debug/debug_tutorial.pdf
11

Das könnte Ihnen auch gefallen