Está en la página 1de 7

UNIVERSIDAD DON BOSCO

Facultad de Ingeniera Escuela de Electrnica Microprocesadores

Catedrtica: Inga. Ingris Hernndez

Grupo Teorico: 02T

Tarea Cooperativo #1

Alumnos: Julio Csar Melara Torres MT090348 Jesus Francisco Escobar Gutierrez EG090120 Arturo Ernesto Muoz Barahona MB030522

Ciudadela Don Bosco, jueves 9 de febrero de 2012

2) Hacer un programa que vaya llenando varias localidades de memoria con los nmeros del 44h al 00h de manera descendente e indicar en qu localidad de memoria se almacenaron. .model small .stack .data .code mov ax,@data mov SI,0680h ; apunta a la localidad de memoria que ira variando en 1 ;a medida varen los datos mov ax, 44h ; enva el primer valor al registro ax mover: mov [SI], ax ; mueve al registro SI lo que tiene AX dec ax ;decrementa el AX en 1 inc SI ;incrementa SI en 1 cmp ax, 00h ;compara el dato con 00h jnz mover ; si al comparar el dato es distinto de 00h se repite el proceso ; si el dato es igual a 00h se rompe bucle repetitivo int 21h end

6) Hacer un programa que revise los datos almacenados en las localidades 2000h a 200Ah, encuentre los nmeros impares y los vaya sacando por el puerto virtual 110. ;Programa que revisa los datos desde 2000h hasta 200AH ;y muestra en pantalla los datos impares .model small .stack .data espacio 2000h dup('x') ;ocupamos los espacios hasta 0720:1FFF numeros db 123, 122, 153, 040, 010, 011, 147, 088, 123, 100, 201 ;numeros de prueba hasta 200A dato db ? ;variable usada para guardar copia del dato evaluado .code ;segmento de codigo mov ax, @data mov ds, ax

mov di, 0000h ;definimos di como contador del ciclo, ;lo establecemsos en 0000h para empezar mov si, 2000h ;SI como contador de direcciones, comienza en ;2000h para comenzar a comparar mov dx, 110 ;puerto virtual a utilizar mov cl, 02 ;divisor fijo (02d) para evaluar paridad ;***PRIMER CICLO (COMPARACION DE RESIDUO)*** ciclo: ;vineta de inicio de ciclo de recursividad mov ax, 0 ;limpiamos ax mov al, [si] ;movemos segun la direccion de SI el dato a AL mov dato, al ;hacemos una copia del dato div cl ;ejecutamos la division al/cl

cmp ah, 00h ;comparamos el residuo, si es distindo de 0 este ;numero es impar, si es igual a 0 es par je retornociclo ;si la instruccion CMP entrega igualdad se ;salta hasta los incrementos de los contadores impar: ;si no se da el salto anterior

;se imprime el dato en el puerto mov al, dato out dx, al retornociclo: ;vineta de retorno al ciclo normal add di, 01h ;incrementamos en 1 el contador add si, 01h ;incrementamos el contador de direcciones en 1 cmp di, 000bh;estas instrucciones hacen un salto hacia "fin:" cuando je fin ;el resultado de la comparacion superior este igual ;en nuestro caso significa que el conteo esta en ;000Bh osea ha terminado, justo despues del ultimo ;valor 000AH jmp ciclo ;reinicia el ciclo de conteo medianta le vineta ; "ciclo:" fin: ;vineta de fin de ciclo

mov ax, 4c00h ;fin del programa int 21h End

8) Hacer un programa que revise los datos almacenados en las localidades 0520h a 052Ch y cuente cuantos nmeros menores o iguales a 12h hay (todos los nmeros son positivos), debe almacenar la cuenta en la direccin 0530h. ;Programa que revisa los datos desde 0520h hasta 052Ch ;y cuentas cuantos son menores a 12h, y almacena el dato .model small .stack .data espacio 0520h dup('x') ;ocupamos los espacios hasta 0720:0520 numeros db 005h, 011h, 013h, 0BAh, 07Bh, 0F0h, 01Fh, 005h numeros2 db 0C3h, 010h, 070h, 0F2h, 0AAh ;numeros de prueba hasta 052Ch (solo 4 menores a 12h) .code ;segmento de codigo mov ax, @data mov ds, ax mov si, 0520h ;SI como contador de direccionesy de ciclo ;comienza en 0520h para comenzar a comparar mov [0530h], 00h ;vaciamos la direccion que almacenara ;la cantidad de numeros menores o iguales ;***PRIMER CICLO (COMPARACION DE NUMEROS)*** ciclo: ;vineta de inicio de ciclo de recursividad mov ax, 0 ;limpiamos ax mov al, [si] ;movemos segun la direccion de SI el dato a AL cmp al, 12h ;comparamos numero guardado, con 12h ja retornociclo;si la instruccion CMP entrega igualdad o minoridad ;se salta hasta los incrementos de los contadores menoroigual: ;vinera de contador add [0530h], 1;incremento en la localidad de memoria almacenadora retornociclo: add si, 01h ;incrementamos el contador de direcciones y ciclo en 1 cmp si, 052ch;estas instrucciones hacen un salto hacia "fin:" cuando je fin ;el resultado de la comparacion superior este igual ;en nuestro caso significa que el conteo esta en ;052Ch osea ha terminado jmp ciclo ;reinicia el ciclo de conteo medianta le vineta ; "ciclo:" fin: ;vineta de fin de ciclo mov ax, 4c00h ;fin del programa int 21h End

12) Hacer un programa que ordene una lista de 13 nmeros de 8 bits (sin signo) en orden ascendente. ;Programa que ordena 13 numeros de 8 bits sin signo ;de forma ascendente mediante ordenamiento burbuja .model small .stack .data numeros db 09h, 02h, 05h, 07h, 06, 01h, 0Ah, 0Bh, 00h, 03h, 0Ch, 04h, 08h ;numeros de prueba hasta del 0-12, ;desde la localidad 0000h hasta 000Ch .code ;segmento de codigo mov ax, @data mov ds, ax mov si, 0000h ;contador j mov di, 0000h ;contador i ;***CICLO I*** cicloi: ;vineta de inicio de ciclo de recursividad mov si, 0000h ;se reinicia el contador j para el segundo ciclo ;***CICLO J*** cicloj: mov ax, 0 ;limpiamos ax mov al, [si] ;movemos segun la direccion de SI el dato a AL mov ah, [si+1];movemos segun la direccion de SI el dato a AH cmp al, ah ;comparamos los datos correlativos jbe retornocicloj ;la instruccion CMP entrega si el numero es menor ;si se cumple no hay necesidad de intercambiarlos ;y se dalta hasta retornocicloj, que indica ;que no se hacen los cambios de la vineta mayor: mayor:;intercambio si el numero resulto mayor xchg al, ah ;intercambio a nivel de registro mov [si], al ;datos del registro a la direccion apuntada por SI mov [si+1], ah ;datos del registro a la direccion apuntada por SI ;esto se realiza porque AX es un registro y nosotro debemos ;retornar esas copia a la memoria

retornocicloj: add si, 01h ;incrementamos el contador de direcciones y cicloj en 1 cmp si, 000Ch;estas instrucciones hacen un salto hacia "finj:" cuando je finj ;el resultado de la comparacion superior este igual ;en nuestro caso significa que el conteo esta en ;000ch osea ha terminado jmp cicloj ;reinicia el ciclo de conteo j medianta le vineta ; "cicloj:" finj: ;vineta de fin de cicloj add di, 01h ;incremento en el contador i cmp di, 000Ch ;si el ciclo i termina je fini ;se salta a fini: jmp cicloi ;reinicio de cicloi fini: mov ax, 4c00h ;fin del programa int 21h End

También podría gustarte