Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tarea Cooperativo #1
Alumnos: Julio Csar Melara Torres MT090348 Jesus Francisco Escobar Gutierrez EG090120 Arturo Ernesto Muoz Barahona MB030522
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
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