Dec
12
Hoy examen de Ensamblador
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
!!
- Programa que ejemplifica el uso básico de los procedimientos (No macros) - Aplicación que utiliza procedimientos (No macros) y ejemplifica correctamente la forma en que se debe mandar llamar un procedimiento con y sin parámetros además de como declarar su prototipo. La aplicación tiene procedimientos con nombres bastante explicitos y literales en su comportamiento.
- Limpia pantalla y cambia el color del fondo - Limpia pantalla y cambia color del fondo conforme se va escribiendo.
- Simulación de un menu de opciones - Aplicación que simula el comportamiento de un menu de opciones, ya que cambia los atributos a la línea seleccionada dando el efecto de \"línea seleccionada\". Funciona con las teclas 8 y 2 para bajar y subir.
- gotoxy, leer y write con procedimientos (No macros) - Creación de los procecimientos gotoxy, leer caracter y write utilizando procedimientos (no macros)
- Lee dos cadenas y las compara - Lee dos cadenas y las compara
- movs.asm - Aplicación que utiliza movs para moder cadenas.
- scas.asm - Programa que lee una cadena y busca un caracter dentro de ella.
- scas2.asm - Lee una cadena y busca un caracter dentro de ella.
Entre otros que hasta vergüenza me da ponerlos si no se lo que hacen :-(,... creo que esta vez, ni la suerte me ayudará.
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
.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
17 Comments
Make A CommentComments RSS Feed TrackBack URL




December 13th, 2006 at 10:37 am
Pues dicho y hecho... ¡Reprobé!, luego pondré lo que logré avanzar, que por cierto aún tengo que terminarlo para entregarlo como tarea.
December 13th, 2006 at 3:20 pm
Valla que si necesitaré un milagro!... Tengo que entregarlo hoy mismo, a las 3pm
December 15th, 2006 at 11:14 am
Pase con 8
December 15th, 2006 at 2:09 pm
Mugroso! Te salvaste del ordinario de ensamblador, qué más quieres?
Jaja. Saluditos.
December 15th, 2006 at 2:13 pm
Pues
Solo quiero que esta navidad mi Querído y estimado Santa, me traiga 2 brazos más para trabajar aún más rapido y con eficiencia...
...y también que me ayude a pasar mi examen de TCP/IP, Calculo, Programación en Visual Basic Net, hmm ¿que mas...? ¡¡Andamos igual o piior noémis!!
December 15th, 2006 at 2:19 pm
[...] ¿Es mucho pedir ? Y antes de que se me olvide,… Que ayudes a los que no pasaron el examen de Ensamblador. jeje [...]
January 5th, 2007 at 3:14 am
JAJAJAJA PRIMERO QUE NADA SOY MEXICANO, NO SE NI DE DONDE ERES JEJEE, PERO ALGO SI TE VOY A DECIR GRACIAS A DIOS Y A TI PORQUE ENCONTRE TU PÁGINA, ESTOY ESTUDIANDO ING. EN SISTEMAS Y ESTOY VIENDO ENSMBLADOR, ASI QUE TENGO UN MONTONAL DE DUDAS, ESTOY BUSCANDO INFORMACION SOBRE ENSAMBLADOR Y SI ENCUENTRO PERO YA COSAS MUY AVANZADAS NADA TAN BASICO, Y ASI LLEGUE A TU PAGINA, AL FIN ENCUENTRO PROGRAMAS QUE PUEDO ENTENDER PARA GUIARME Y HACER LOS MIOS, FELICIDADES POR TU 8 Y HABER COMO ME VA A MI EN MI EXAMEN DE ENSAMBLADOR QUE LO HAGO JUSTAMENTE EL 8 DE ENERO JEJEJE, OJALA Y ME VAYA BIEN, MIENTRAS TANTO ME ESTUDIARE TUS CODIGOS Y VEREMOS QUE SE PUEDE APRENDER, MUCHAS GRACIAS Y HASTA PRONTO.
January 5th, 2007 at 1:18 pm
Gracias, gracias
Suerte con lo del examen del 8 de enero, mis compañeros también andan en eso, y valla que si les dejaron un trabajo de investigación algo elaborado que mejor ni mencionar
...
Estudio en la Facultad de Telemática de la Universidad de Colima en Colima, Colima, México.
Por cierto, si te sirve,... aquí hay algo de documentación y bastante básica.
January 8th, 2007 at 9:58 am
[...] Y nada de reprobar examenes de visual basic, física, calculo, CISCO, ingles… :-S (Al menos ya pase Ensamblador jeje) y bueno, se que tengo que estudiar, comenzaré por revizar mi FeedReader. Artículos parecidos: [...]
January 12th, 2007 at 5:53 pm
jejejejeje mucha gracias =D me fue muy bien en mi examen, y estoy haciendo programas basicos, apenas voy a ver macros pero ya le entiendo =D, me han servido de mucho tus codigos, yo estudio ing. en sistemas computacionales en el tec del istmo. Y adelante
January 12th, 2007 at 6:56 pm
Pues si puedes, comparte tus ejemplos aunque no estén del todo documentados,..
January 19th, 2007 at 11:40 am
[...] ¿Será mucho pedir ? Y antes de que se me olvide,… Que ayudes a los que no pasaron el examen de Ensamblador. jeje Artículos parecidos: [...]
February 15th, 2007 at 10:59 am
[...] nada de reprobar examenes de visual basic, física, calculo, CISCO, ingles… :-S (Al menos ya pase Ensamblador jeje) y bueno, se que tengo que estudiar, comenzaré por revizar mi [...]
July 1st, 2007 at 5:14 pm
Hola, se ve interesante todo esto de ensamblador, yo apenas estoy comenzando en mi carrera de ing. en sistemas y estoy comenzando a ver C/C++, so far so good jaja, y pues aunq se ve interesante todo esto no creo que yo lo llegue a ver, porque en la universidad que estoy pues no es tan buena en ing. en sistemas que digamos asi que si quiero aprender tengo que volarle verga por mi cuenta jaja, se ve que le haces huevo a la programacion loco asi que ahi de vez en cuando talvez te pregunte algunas cosas y espero me podas ayudar jeje, x cierto soy de nicaragua y estudio en la UCA(universidad centroamericana), ahi una universidad de jesuitas chancha jajaja, bueno eso es todo, saludos y ahi nos vemos(felicidades x tu 8 x cierto jaja)
July 2nd, 2007 at 1:11 am
Pues si, de hecho es muy interesante, las posibilidades se amplían al desarrollar en ASM. Es una lástima que sea tan difícil programar :S
Es bueno programar en C, yo lo usaría,… pero ando envuelto en otros proyectos y ya no he tenido tiempo de revivir aquellos tiempos en que me la pasaba programando tonterías en C
Gracias Andrei
October 3rd, 2007 at 1:38 pm
Bueno, primero que nada hola.
Estoy iniciando con la clase de lenguaje ensamblador y queria preguntar que significa el startup, en que programa se usa, ya que uso el TASM, y el TLIK, pero en el TASM me marca error con la isntruccion startup, ya que si se la quito, me deja ejecutarlo bien.
Muchas gracias de antemano.
Saludos
October 3rd, 2007 at 2:35 pm
el .startup si no mal recuerdo, es donde inicia la aplicación.