examen

hmmm, no estoy seguro pero creo que fué el intento de hacer mi exámen,...

Búsqueda de ejemplos en Ensamblador
;Autor examen
;URL examen

.model small
.stack
.data
        nom db 50 dup(\' \'),\'$\'      ;Variable para leer el nombre
        cal db 2 dup(\'0\'),\'$\'       ;Calificación
        sum db 3 dup(\'0\'),\'$\'       ;Sumatoria para el promedio

        aux db 3 dup(\'0\'),\'$\'       ;auxiliar
.code
.startup
        call clrScr
        ;1ero
        call leerNombre ;Obtenemos los datos de un usuario
        call leerCalificacion   ;Leemos calificación de primero usuario
        call sumar

        ;2do
        call leerNombre ;Obtenemos los datos de un usuario
        call leerCalificacion   ;Leemos calificación de primero usuario
        call sumar

        ;3ero
        call leerNombre ;Obtenemos los datos de un usuario
        call leerCalificacion   ;Leemos calificación de primero usuario
        call sumar

        ;4to
        call leerNombre ;Obtenemos los datos de un usuario
        call leerCalificacion   ;Leemos calificación de primero usuario
        call sumar

        ;5to
        call leerNombre ;Obtenemos los datos de un usuario
        call leerCalificacion   ;Leemos calificación de primero usuario
        call sumar

        call promedio

.exit
        leerNombre proc c       ;Procedimiento se  *supone* leerá un nombre
                mov cx,0
                mov si,0
                .repeat
                        mov ah,01h      ;Leemos caracter
                        int 21h  ;Ejecutamos la interrupcion para leer carcter
                        cmp al,13
                                je continuar
                        mov nom[si],al  ;Movemos a la cadena el caracter leído
                        inc cx    ;Incrementamos CX, para comparar cuando llegue a 0
                        inc si    ;Incrementamos también si
                .until cx==50
                continuar:
                        mov nom[si],\'$\'       ;Terminamos cadena de caracteres
                call nl ;Salto de línea
                ret     ;Retornamos el control al flujo del programa
        leerNombre endp

        leerCalificacion proc c ;Procedimiento para leer la calificación
                mov cx,0
                mov si,0
                .repeat
                        otro:
                        mov ah,07h      ;Leemos caracter sin eco
                        int 21h  ;Ejecutamos la interrupcion para leer carcter
                        cmp al,13
                                je continuar
                        cmp al,30h
                                jl otro
                        cmp al,39h
                                jg otro
                        mov ah,02h      ;Mostramos digito introducido
                        mov dl,al       ;Movemos caracter a mostrar
                        int 21h  ;Lo mostramos
                        mov cal[si],al  ;Movemos a la cadena el caracter leído
                        inc cx    ;Incrementamos CX, para comparar cuando llegue a 0
                        inc si
                .until cx==2
                continuar:
                        mov cal[si],\'$\'       ;Terminamos la cadena de caracteres

                ;Convertirmos cadena a su valor numérico decimal
               

               
                call nl ;salto de línea
                ret     ;Retornamos el control al flujo del programa

        leerCalificacion endp
       
        clrScr proc c   ;Procedimiento que permite limpiar la pantalla
                mov ah,00h      ;Definimos modo de video
                mov al,03h            ;Seteamos el modo
                int 10h  ;Ejecutamos interrupción
                ret          ;Retornamos el control al flujo del programa
        clrScr endp

        nl proc c       ;Procedimiento para ir a nueva línea
                mov ah,02h            ;Mostrar caracter en pantalla
                mov dl,10                     ;LF
                int 21h   ;Mostramos caracter
                mov dl,13                     ;CR
                int 21h   ;Mostramos caracter
                ret
        nl endp

        sumar proc c    ;Procedimiento que permite llevar el control de la suma para evaluar el promedio
                sub cal,30h     ;48
                mov al,cal
                add sum,al
                add cal,30h     ;48
                ret
        sumar endp

        promedio proc c ;Evalua el promedio      ;Procedimiento que **se supone** **debería** evaluar el promedio en base a sum/5
                mov al,5        ;Movemos el divisor
                div sum  ;Dividimos por AL
               
                mov ah,02h      ;imprimir caracter
                mov dl,al       ;Caracter a imprimir ¿Caracter? ja Estoy enviando cadena :-S
                add dl,30h

                int 21h  ;Ejecutamos la interrupción
                ret
        promedio endp
end