sábado, 15 de junio de 2013

Promedio de 3 calificaciones

En este programa se van a digitar 3 calificaciones (de 0 a 9 todavía no se captura 10) y dependiendo del promedio nos mostrará un mensaje para saber si el alumno es aprobado o reprobado, el alumno aprobará siempre y cuando tenga un promedio mayor de 7 y se puede repetir el programa cuantas veces quiera el usuario.

 Limitaciones del programa:
No imprime ni evalua divisiones con decimales, por lo tanto solo evalua divisiones con residuo 0.

.Model Small
.Stack 64
.Data
    msj Db 0ah,0dh, ' Digita las 3 calificaciones: ','$'
    msj2 Db ' Aprobado','$'
    msj3 Db ' Reprobado','$'
    msj4 Db 0ah,0dh, ' Desea capturar otro alumno?  1.-Si, 2.-No','$'
    num db 0
    sum db 0
    prom db 0
.Code
inicio:
    mov cx,03h  ;numero de calificaciones a pedir
    mov bl,0000h
    mov al,0000h
    mov ax,@data
    mov ds,ax
    mov ah,09
    mov dx,offset msj
    int 21h

Pedir:  ;Pide 3 calificaciones, contador asignado en CX
    mov ah,01h
    int 21h
    sub al,30h
    add bl,al  ;Hacemos la suma de las calificaciones y las asignamos en bl
    aaa
    loop pedir  ;repite ciclo
    jmp promedio

promedio:  ;siemplemente divide el resultado de la suma entre 3
    mov ax,bx  ;pasamos el total de la suma a AX
    mov bl,03h
    div bl ;dividimos AX entre bl
    aad   ;ajuste
    mov bl,al   ;movemos el resultado a bl para imprimirlo
    mov ah,02h
        mov dl,bh
        add dl,30h
        int 21h
        mov dl,bl
        add dl,30h
        int 21h
    cmp bl,07h  ;comparamos si el resultado (bl) es 7
    ja apro   ;si es mayo salta a la etiqueta apro
    je apro  ;si es igual salta a la etiqueta apro
    jb repro ; si es menor salta a la etiqueta repro

apro:  ;Solo imprime el mensaje de aprobado
    mov ax,@data
    mov ds,ax
    mov ah,09
    mov dx,offset msj2
    int 21h
    jmp otro
repro:  ;Solo imprime el mensaje de reprobado
    mov ax,@data
    mov ds,ax
    mov ah,09
    mov dx,offset msj3
    int 21h
    jmp otro

otro: ;Imprime el mensaje si quiere otro promedio y compara con 1 para repetir todo el programa
    mov ax,@data
    mov ds,ax
    mov ah,09
    mov dx,offset msj4
    int 21h
    mov ah,01h
    int 21h
    cmp al,31h
    je inicio
    ja salir
    jb salir
salir:
    mov ah,04ch
    int 21h
   
end inicio

Programa en ejecución:

Los primeros 3 números son los digitados por el usuario, los siguientes dos es el promedio y al final el mensaje si el alumno es aprobado o reprobado.


1 comentario: