Así es, hoy es el día de mi desceso... ¡¡Examen de ensamblador!! y,... Seguramente, reprobaré :-(. No me sirvio de nada la documentación, ni los ejemplos, en especial los últimos que ni se que hacen jeje ¡¡ Pase con 8
!!
Entre otros que hasta vergüenza me da ponerlos si no se lo que hacen :-(,... creo que esta vez, ni la suerte me ayudará.
[actualizado]
He aquí mi horrible programación bajo presión...
- Aplicación que permita leer el nombre y calificació de 5 alumns, valide si no se repiten los nombres, la calificación tendrá que ser solo de dos digitos, no mayor a 10 ni menor a 0, hmmm,... creo que era todo :-S ¡ho si! también que tenga mucha crema!,... quería una interfáz gráfica agradable al usuario.
Increible pero cierto jeje
asm: .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