practica_3__otoño2011_informatica

18
MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00 LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 1 / 18 ENSAMBLADOR 8086 TASM/MASM PROGRAMACIÓN PRÁCTICAS DE LABORATORIO

Upload: joshram

Post on 25-Apr-2015

803 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 1 / 18

ENSAMBLADOR 8086 TASM/MASM

PROGRAMACIÓN PRÁCTICAS DE LABORATORIO

Page 2: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 2 / 18

Introducción

Estas prácticas se han elaborado para orientar a los alumnos de la materia de INFORMÁTICA BÁSICA en

el aprendizaje de algoritmos computacionales dentro del Lenguaje Ensamblador y el entorno TASM /

MASM

Todas las prácticas de laboratorio estarán estructuradas de la siguiente forma:

Objetivo.

Recursos.

Teoría.

Desarrollo de ejercicios y entrega de resultados

NOTAS:

EL RESULTADO DE CADA PROGRAMA DE ESTA PRÁCTICA, SE ENVIARÁ AL CORREO: PROF. ING. JORGE

RAMOS GARCIA, [email protected] (pantalla de resultados y los archivos fuente .ASM)

REVISE Y ESTUDIE CADA EJERCICIO Y TRATE DE ENTENDERLOS PARA LOS EJERCICIOS QUE SE

REALIZARAN EN LAS SIGUIENTES PRACTICAS.

CUALQUIER DUDA O COMENTARIO FAVOR DE EXPRESARLO

Page 3: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 3 / 18

P R Á C T I C A NO. 3

OBJETIVO:

a) Aprendiendo el uso de ciclos o bucles.

1. Ciclos usando CMP/Jxxx

2. Ciclos usando LOOP

b) Uso de DUP

RECURSOS:

Para implementar los ejercicios de programación en lenguaje ensamblador se utilizarán las siguientes herramientas de

software:

Editor: EDIT / NE / o cualquier otro que genere archivos ASCII.

Ensamblador: TASM.EXE

Enlazador: TLINK.EXE

Depurador: TD.EXE

TEORIA.

n DUP reserva tantas posiciones del tamaño que se indique (DB, DW, DD) como indique n.

Ejemplo de un código fichero .asm:

.MODEL small

.STACK 100H

.DATA

max EQU 10 ; declara un constante con valor 100

cad DB 5 DUP („race‟) ; declara una variable llamada cad

; con valor inicial la cadena “race”

dac DB max DUP( ?) ; declara una variable llamada cad de tamaño

; max sin valor inicial

.CODE

MOV AX, @DATA

MOV DS, AX

END

La siguiente es una instrucción para el desarrollo de ciclos que se verán en clase y en la próxima practica

LOOP

LOOP es una instrucción de ciclo. Permite repetir un grupo de instrucciones el número de veces contenido en CX. Al ejecutarse,

primero decrementa CX en una unidad. Si el contenido de CX es diferente de cero brinca a la dirección indicada por la etiqueta,

usando modo de direccionamiento relativo (-128 a +127 Bytes). Si CX es cero se ejecuta la siguiente instrucción. Esta instrucción

no afecta a los bits de bandera.

Sintaxis:

LOOP etiqueta

Ejemplo:

mov cx,5 ;Número de veces que se va repetir el ciclo

ciclo: mov ax,bx ;esta instrucción se ejecuta 5 veces

loop ciclo ;Decrementa CX y brinca si CX<>0

Page 4: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 4 / 18

DESARROLLO DE EJERCICIOS.

1. El siguiente programa es una propuesta de solución para introducir N datos y determinar el mayor. Los datos no son

almacenados una vez que son leídos.

title mayor_menor

;------------------

; ; Informatica Basica

; Universidad de Guanajuato

; Prof Ing. Jorge Ramos Garcia

; ;-----------------------------------

.MODEL SMALL

.STACK

.DATA

entrada db 10,13,'Ingrese numero de datos, N= $'

datox db 10,13,'Dato $'

grande db ? num db ?

msg_salida db 10,13,'El mayor de la lista dada es = $'

.CODE EXA_PROB_7:

MOV AX,@DATA

MOV DS,AX

;--------------- lea dx,entrada ; mensaje de antrada

mov ah,09h

int 21h

mov ah,1 ;lectura de numero de datos, N int 21h

sub al,30h

mov num,al

mov cl,1 ;inicio de contador de ciclo

lea dx,datox ;mensaje para dato

mov ah,09h

int 21h

mov dl,cl ;exhibir contador

add dl,30h

mov ah,02h int 21h

mov dl,'='

mov ah,02h

int 21h

mov ah,01h ;leer primer dato de la lista

int 21h mov grande,al ;suponer que el mayor es el primer dato

_otro_dato:

inc cl ;incrementar contador para otro dato cmp cl,num ; termina ciclo de entrada de datos apartir del segundo en la lista

Page 5: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 5 / 18

jg sal_ciclo

lea dx,datox mov ah,09h

int 21h

mov dl,cl add dl,30h

mov ah,02h

int 21h

mov dl,'=' mov ah,02h

int 21h

mov ah,01h ;leer datos apartir del segundo de la lista hasta N datos int 21h

cmp grande,al ;en caso de que el reciente dato de entrada sea mayor a GRANDE se reasigna el nuevo valor

jg _otro_dato mov grande,al

jmp _otro_dato ;continuar leyendo otro dato

sal_ciclo: lea dx, msg_salida ;mostrar el numero mayor de toda la lista

mov ah, 09h

int 21h

mov dl,grande mov ah,02h

int 21h

;--------------- MOV AH,4CH

INT 21H

END EXA_PROB_7

2. Del ejercicio dado en el punto 1, modifique el programa para que también determine el dato MENOR de la lista dada.

3. En este ejercicio se realiza un programa que solicita números de una lista de datos. Luego verifica cuantos de los valores

son pares y cuántos son impares. Ejecute cada uno y verifique sus resultados

a. Primer versión de algoritmo. (leyendo datos y verificando)

title pares_impares

;------------------ ; encontrar numero de pares e impares en una lista

; Informatica Basica

; Universidad de Guanajuato ; Prof Ing. Jorge Ramos Garcia

;

;-----------------------------------

.MODEL SMALL

.STACK

.DATA

Page 6: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 6 / 18

entrada db 10,13,'Ingrese numero de datos, N= $'

num_par db 0 num_impar db 0

msg_par db 10,13,'La cantidad de PARES es = $'

msg_impar db 10,13, 'La cantidad de IMPARES es = $'

datox db 10,13,'Dato $' numdatos db ?

base db 2

.CODE n_par_impar:

MOV AX,@DATA

MOV DS,AX ;---------------

lea dx,entrada ; mensaje de antrada

mov ah,09h

int 21h mov ah,1 ;lectura de numero de datos, N

int 21h

sub al,30h

mov numdatos,al mov cl,1 ;inicio de contador de ciclo

continuar:

cmp cl,numdatos jg sal_ciclo

lea dx,datox ;mensaje para dato

mov ah,09h int 21h

mov dl,cl ;exhibir contador

add dl,30h mov ah,02h

int 21h

mov dl,'='

mov ah,02h int 21h

mov ah,01h ;leer datos de la lista

int 21h

mov ah,0

div base

cmp ah,0

je _npar

inc num_impar inc cl

jmp continuar

_npar:

inc num_par inc cl

jmp continuar

Page 7: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 7 / 18

sal_ciclo:

lea dx, msg_par ;mostrar el numero de pares mov ah, 09h

int 21h

mov dl,num_par

add dl,30h mov ah,02h

int 21h

lea dx, msg_impar ;mostrar el numero de impares mov ah, 09h

int 21h

mov dl,num_impar

add dl,30h mov ah,02h

int 21h

;--------------- MOV AH,4CH

INT 21H

END n_par_impar

b. Segunda versión de algoritmo. ( utilizando la instrucción DUP() )

title pares_impares_usando_DUP

;------------------

; encontrar numero de pares e impares en una lista

; Informatica Basica ; Universidad de Guanajuato

; Prof Ing. Jorge Ramos Garcia

;

;-----------------------------------

.MODEL SMALL

.STACK

.DATA

entrada db 10,13,'Ingrese numero de datos, N= $'

num_par db 0

num_impar db 0

msg_par db 10,13,'La cantidad de PARES es = $'

msg_impar db 10,13, 'La cantidad de IMPARES es = $'

datox db 10,13,'Dato $'

numdatos db ? base db 2

arreglo db 51 dup(0)

.CODE

n_par_impar_dup:

MOV AX,@DATA MOV DS,AX

;---------------

lea dx,entrada ; mensaje de antrada

Page 8: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 8 / 18

mov ah,09h

int 21h

mov ah,1 ;lectura de numero de datos, N int 21h

sub al,30h

mov numdatos,al

;--------------------- inicio de solo lectura del arreglo de numeros para una lista dada

mov cl,1

mov bx,1

leer: cmp cl,numdatos

jg sal_leer

lea dx,datox ;mensaje para dato mov ah,09h

int 21h

mov dl,cl ;exhibir contador

add dl,30h mov ah,02h

int 21h

mov dl,'='

mov ah,02h int 21h

mov ah,1

int 21h sub al,30h

mov arreglo[bx], al

inc cl

inc bx jmp leer

;-------------------------------------------------------------- procesar datos PAR/IMPAR

sal_leer:

mov cl,1 ;inicio de contador de ciclo

mov bx,1

continuar:

cmp cl,numdatos

jg sal_ciclo

mov ah,0

mov al,arreglo[bx]

div base

cmp ah,0

je _npar

inc num_impar inc cl

inc bx

jmp continuar

_npar: inc num_par

inc cl

inc bx

Page 9: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 9 / 18

jmp continuar

sal_ciclo:

;-------------------------------------------------------------mostrar resultados

lea dx, msg_par ;mostrar el numero de pares

mov ah, 09h int 21h

mov dl,num_par

add dl,30h

mov ah,02h int 21h

lea dx, msg_impar ;mostrar el numero de impares

mov ah, 09h int 21h

mov dl,num_impar

add dl,30h

mov ah,02h int 21h

;---------------

MOV AH,4CH INT 21H

END n_par_impar_dup

4. Revise y ejecute el programa dado a continuación.

title genarar_matriz

; ----------------

; imprimir una arreglo matricial de simbolos asterisco

; ---------------

.model small

.stack

.data

multiplica db 0

x db ?

y db ?

msgrenglones db 10,13,'Cuantos RENGLONES:? $'

msgcolumnas db 10,13,'Cuantas COLUMNAS:? $'

msgmatriz db 10,13, ' -- LA MATRIZ DE ASTERISCOS SE MUESTRA COMO -- ',10,13,10,13,'$'

.code

programa:

mov ax,@data

mov ds,ax

;-------------

lea dx,msgrenglones

mov ah,09h

int 21h

mov ah,1

int 21h

sub al,30h

mov x,al

lea dx,msgcolumnas

Page 10: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 10 / 18

mov ah,09h

int 21h

mov ah,1

int 21h

sub al,30h

mov y,al

;------------------- insertar cambio de linea

mov dl,10

mov ah,2h

int 21h

mov dl,13

int 21h

mov dl,10

mov ah,2h

int 21h

mov dl,13

int 21h

;------------------- generar la salida de la matriz

lea dx,msgmatriz

mov ah,09h

int 21h

mov cl,x

renglones:

push cx ; respaldar el valor de CX en la pila

mov cl,y

columnas:

mov dl,'*'

;add dl,30h

mov ah,2h

int 21h

;------------- insertar dos espacios

mov dl,' '

mov ah,2h

int 21h

mov dl,' '

int 21h

loop columnas

pop cx ;restablecer el valor de CX desde la pila

;------------ insertar una linea

mov dl,10

mov ah,2h

int 21h

mov dl,13

int 21h

loop renglones

;-------------

mov ax,04c00h

int 21h

end programa

Page 11: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 11 / 18

Realice un programa para imprimir una matriz triangular superior de dimensión NxN tal como se muestra:

Ej. N=8

********

*******

******

*****

****

***

**

*

5. Realizar un programa que acepte solo una letra del alfabeto (a,..z, A,..,Z), ya sea minúscula o mayúscula, si da otro tipo

de carácter, el programa terminara. Una vez que la entrada sea letra se deberá indicar que lugar tiene dicha letra dentro del

alfabeto, considerando que la letra (“a”) o (“A”) tenga el numero 1. Nota: el carácter “a” tiene valor ASCII igual a 61h

y la letra “A” tiene como valor ASCII el valor 41h .

Ejemplo:

Letra:? f posición en el alfabeto: 6

6. Diseñe un programa que imprima un contador desde 000 hasta 999, cada digito corre de 0 a 9. Nota: utilice ciclos

anidados.

Salida en pantalla:

000

001

002

…..

009

010

…..

099

100

….

999

Page 12: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 12 / 18

7. Ordenamiento de un vector o lista de datos utilizando el mismo algoritmo pero con mnemónicos diferentes en su

codificación en el ensamblador.

a). OPCION A.

;----------------------------------------- version 2 del ejemplo de clase dia 3 marzo 2011,

; ordenamiento de una lista de datos introducida por teclado.

;------------------------------------------------------------------------------------------------------

;

title ORDENAMIENTO_V2

.MODEL SMALL

.STACK

.DATA

msgmain db 10,13,10,13,' Ordenamiento de un Vector de datos ',10,13,10,13,'$'

msgleervector db 10,13,' Cuantos elementos son del vector: N= $'

N dw ?

V db 30 dup(?)

msgleerdatos db 10,13,'INTRODUZCA LOS DATOS DEL VECTOR',10,13,'$'

msgnumero db 10,13,'Dato $'

msgnumero2 db ':? $'

msglinea db 10,13,'$'

msgordenado db 10,13,10,13,' --- Lista ordenada --- ',10,13,'$'

.CODE

SORT:

mov ax,@data

mov ds,ax

;------------- inicia lectura del vecctor

mov DX,offset msgmain ; mensaje de enecabezado

mov AH,09h

int 21h

mov DX,offset msgleervector ; mensaje de lectura de N

mov AH,09h

int 21h

mov ah,01h ; leer el valor del numero de elementos del vector

int 21h

sub al,030h

mov ah,0h

mov N,ax ; guardar en N el valor introducido

mov DX,offset msgleerdatos

mov AH,09h

int 21h

mov SI, 1h ; el registro SI para control del ciclo y la posicion en el vecctor

Page 13: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 13 / 18

ciclo_lectura:

cmp SI,N

jg salir_lectura

mov DX,offset msgnumero

mov AH,09h

int 21h

mov DX,SI

add DL,30h

mov ah,02h

int 21h

mov DX,offset msgnumero2

mov AH,09h

int 21h

mov ah,1h ; lectura de los elementos del vecctor V

int 21h

mov V[SI],al

inc SI

jmp ciclo_lectura

salir_lectura:

;--------------- inicia algoritmo de ordanamiento de V

mov SI,1 ; primer ciclo anidado con registro SI

ciclo_orden:

mov ax,N ; AX=N

sub AX,1 ; AX=AX-1

cmp SI,AX ; compara SI con N-1 guardado en AX

jg salir_orden

;-----------------

mov DI,SI

inc DI

ciclo_anidado:

cmp DI,N

jg salir_anidado

;----------------- comparar los elementos

mov al,V[SI]

cmp al,V[DI]

JL cont_anidado

MOV AL,V[SI] ;

XCHG AL,V[DI] ; intercambiar AL=V[SI] con V[DI]

MOV V[SI],AL

cont_anidado:

inc DI

jmp ciclo_anidado

salir_anidado:

inc SI

jmp ciclo_orden

;--------------------- finalizacion del algoritmo

Page 14: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 14 / 18

salir_orden:

mov DX,offset msgordenado

mov AH,09h

int 21h

mov SI,1 ; iniciar ciclo para mostrar vector ordenado en pantalla

ciclo_prt:

cmp SI,N

jg fin_imprimir

mov dl,V[SI] ; mostrar cada elemento del vector

mov ah,02h

int 21h

mov DX,offset msglinea

mov ah,09h

int 21h

inc SI

jmp ciclo_prt

fin_imprimir:

;--------------- terminar regresar al modo de MSDOS

mov ah,4ch

int 21h

END SORT

b). OPCION B. Uso de LOOP

;----------------------------------------- VERSION 3 del ejemplo de clase dia 4 marzo 2011,

; ordenamiento de una lista de datos introducida por teclado.

;------------------------------------------------------------------------------------------------------

; USO DE LOOP

;******************************************************************************************

************

TITLE ORDENAMIENTO_V3

.MODEL SMALL

.STACK

.DATA

msgmain db 10,13,10,13,' Ordenamiento de un Vector de Datos ',10,13,10,13,'$'

msgleervector db 10,13,' Cuantos elementos son del vector: N= $'

N dw ?

V db 30 dup(?)

msgleerdatos db 10,13,'INTRODUZCA LOS DATOS DEL VECTOR',10,13,'$'

msgnumero db 10,13,'Dato $'

Page 15: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 15 / 18

msgnumero2 db ':? $'

msglinea db 10,13,'$'

msgordenado db 10,13,10,13,' --- Lista ordenada --- ',10,13,'$'

.CODE

sort3:

mov ax,@data

mov ds,ax

;------------- inicia lectura del vecctor

mov DX,offset msgmain ; mensaje de enecabezado

mov AH,09h

int 21h

mov DX,offset msgleervector ; mensaje de lectura de N

mov AH,09h

int 21h

mov ah,01h ; leer el valor del numero de elementos del vector

int 21h

sub al,030h

mov ah,0h

mov N,ax ; guardar en N el valor introducido

mov DX,offset msgleerdatos

mov AH,09h

int 21h

MOV cX,N ;INICIALIZAR EL CONTADOR DE CX PARA EL LOOP

mov SI, 1h ; el registro SI para control del ciclo y la posicion en el vecctor

ciclo_lectura:

mov DX,offset msgnumero

mov AH,09h

int 21h

mov DX,SI

add DL,30h

mov ah,02h

int 21h

mov DX,offset msgnumero2

mov AH,09h

int 21h

mov ah,1h ; lectura de los elementos del vecctor V

int 21h

mov V[SI],al

inc SI

loop ciclo_lectura ; CERRAR EL CICLO (CX=CX-1) IF CX=0 TERMINAR LOOP

salir_lectura:

;***************** inicia algoritmo de ordanamiento de V USANDO LOOP EN CADA CICLO

ANIDADO

MOV CX,N

Page 16: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 16 / 18

DEC CX

MOV SI,1

CICLO1:

;----------------------------->>>>> 1 CICLO EXTERIOR

PUSH CX

MOV CX, N

SUB CX,SI

MOV DI,SI

INC DI

CICLO2:

;-------------->>>> 2 CICLO INTERIOR

MOV AL,V[SI]

CMP AL,V[DI]

JL SIGUE

MOV AL,V[SI]

XCHG AL,V[DI]

MOV V[SI],AL

SIGUE:

INC DI

;-------------->>>>> 2

LOOP CICLO2

POP CX

INC SI

;----------------------------->>>> 1

LOOP CICLO1

;***************** FIN DEL ALGORITMO DE ORDENAMIENTO

;---------------------------------- INICIAR SALIDA A PANTALLA DEL VECTOR ORDENADO -------------

mov DX,offset msgordenado

mov AH,09h

int 21h

mov SI,1 ; iniciar ciclo para mostrar vector ordenado en pantalla

ciclo_prt:

cmp SI,N

jg fin_imprimir

mov dl,V[SI] ; mostrar cada elemento del vector

mov ah,02h

int 21h

mov DX,offset msglinea

mov ah,09h

int 21h

inc SI

jmp ciclo_prt

fin_imprimir:

Page 17: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 17 / 18

;--------------- terminar regresar al modo de MSDOS

mov ah,4ch

int 21h

END sort3

Page 18: PRACTICA_3__otoño2011_informatica

MATERIA: INFORMATICA BÀSICA PROFESOR: M. en ING. JORGE RAMOS GARCIA. CLAVE: CEI02.09 GPO: A PREREQUISITOS: Leguaje de programación. Email: [email protected] DPTO.: COMUNICACIONES Y ELECTRÒNICA DICIS – DIV. INGENIERIAS CAMPUS IRAPUATO-SALAMANCA UNIVERSIDAD DE GUANAJUATO, Salamanca, Gto. Mex. SALON: 310 TRIM: Otoño 2011 HORARIO: MARTES y JUEVES de 12:00 a 2:00

LENGUAJE ENSAMBLADOR 8086 USANDO TASM/emu8086 Correo Electrónico: [email protected] Pagina 18 / 18