LENGUAJE ENSAMBLADOR
Short Description
Download LENGUAJE ENSAMBLADOR...
Description
LENGUAJE ENSAMBLADOR
Reporte de Investigación Aleatorio Ciclo loop Lectura de caracteres Interrupciones
Practica Juego del topo
Dr. Carlos Torres Reyes
1
mayo 2013
Generación de un número aleatorio En un número aleatorio lo más importante es saber cuál será la base para generarlos en este caso se tomó el timer del sistema en este caso usando los milisegundo. Para utilizarlo se utilizó la interrupción 21h con la función 2ch donde su comportamiento en los registros es el siguiente: “mov ah,2Ch ;determina la hora del sistema Int 21h CH contiene la hora (00 - 23) CL contiene minutos (00 - 59)
DH contiene segundos (00 - 59) DL contiene milisegundos (00 - 59)
El primer intento por generar el aleatorio usando el registro DL “que contiene los milisegundos” pero se tenía muchas fallas ya que se obtenían símbolos raros en donde la obtención de ellos era con uso de las teclas especiales y muy difíciles de obtenerlos. Todos estos símbolos se tenían que eliminar. La solución fue utilizar un registro completo en este caso AX y usamos aaa “Convierte el número almacenado en AL a BCD desempaquetado. La idea es aplicarlo después de sumar BCDs no empaquetados. ” ” Tenemos en AX el BCD no empaquetado 47 (0407h) y en BX 14 (0104h). Queremos sumarlos, y que el resultado siga siendo un BCD no empaquetado, para obtener un resultado coherente. ” Para generar un numero un poco más complejo ya que se un registro ax a otros pero l y h luego se sumaban y se tenía un solo número.
Solución a la elección de juego con números, letras mayúsculas y letras “
minúsculas
”
Lo fácil de usar el lenguaje ensamblador es que simple se están usando números, y las comparaciones se hacen más fáciles. Solo se tienen que fijar intervalos para cada tipo de carácter “letras, números”. El punto clave para hacer esto es la suma y solo se tiene que hacer una comparación ya que mi numero principal es de 0 a 9 y no se dé requiere hacer la comparación de a39
si
Imprimir num
Leer numUsuario
no
Fin
Fallo++
Num= numUsuario
si
Imprimir “marcador” Fallos=fallos
Marcador++
Aciertos=marcador no
3
Repeticione s>0
si
mayo 2013
Código .model small
msgM2 db "Aciertos--------$"
int 21h
fallo:
.data
msgM3 db "Fallos----------$"
mov ah,09h
add fallos,01
la db ?
.code
lea dx,opc3
mov ah,09h
lb db ? lc db ?
.startup clear macro
int 21h mov ah,09h
lea dx,x int 21h
ld db ? le db ?
mov ah,00h ;limpia la pantalla
lea dx,sali int 21h
jmp continuar acierto:
marcador db ? fallos db ?
mov al,03h int 10h
mov ah,09h lea dx,msgR
add marcador,01 mov ah,09h
opciones db ? repeti db ?
endm espera macro
int 21h mov ah,01h
lea dx,v int 21h
rep1 db ? rep2 db ?
mov ah,0h int 16h
int 21h mov opc,al
abajo continuar:
rep3 db ?
endm
sub opc,30h
sub repeti,01
msg db "",0ah,0dh, "$" xxx db 0ah,0dh, "mi
abajo macro: lea dx, msg
cmp opc,1 je numeritos
cmp repeti,0 ja numeritosOpen
numeros: $"
mov ah,9h
cmp opc,2
marcadora:
xxxx db 0ah,"Regresando al
int 21h
je mayusculas
mov ah,02h
menu$" v db "
",0ah,0dh, "$"
endm mov ah,09h
cmp opc,3 je minusculas
mov dh,5 mov dl,37
x db " X ",0ah,0dh, "$" num1 db ?
lea dx,msg1 int 21h
cmp opc,0 je salir
mov bh,0 int 10h
num2 db ? num db ?
mov ah,01h int 21h
numeritos: clear
mov ah,09h lea dx,msgM1
usua db ?
mov la,al
mov ah,09h
int 21h
punt db ?
mov ah,01h
lea dx,tituloA
mov dl,la
opc db ?
int 21h
int 21h
mov ah,02h
msg1 db "Dame Tu
mov lb,al
mov repeti,10
int 21h
GamerName [solo letras]:$"
mov ah,01h
mov fallos,0
mov dl,lb
msgI db "Instrucciones",0ah,0dh,"$"
int 21h mov lc,al
mov marcador,0 numeritosOpen:
mov ah,02h int 21h
msgT db "*El juego del Topo
mov ah,01h
mov num,0
mov dl,lc
consiste en oprimir la tecla
int 21h
mov ah,2Ch ;relo
mov ah,02h
con el valor mencionado por
mov ld,al
int 21h
int 21h
la computador dentro del
mov ah,01h
xor ax,ax
mov dl,ld
limite de
int 21h
and dh,0fh
mov ah,02h
tiempo",0ah,0dh,"$"
mov le,al
add ax,dx
int 21h
msT db "*Tendras 10
clear
aaa
mov dl,le
oportunidades",0ah,0dh,"$" msgM db "Menu [Selecciona
mov ah,09h lea dx,msgI
add num,al add num,ah
mov ah,02h int 21h
el numero de la
int 21h
add num,30h;;;
mov ah,02h
opcion]",0ah,0dh,"$"
mov ah,09h
cmp num,39h
mov dh,7
opc1 db "1.-Topo
lea dx,msgT
ja numeritosOpen
mov dl,37
numerico",0ah,0dh,"$"
int 21h
imprimir:
mov bh,0
opc2 db "2.-Topo Letras Mayusculas",0ah,0dh,"$"
mov ah,09h lea dx,msT
mov dl,num mov ah,02h
int 10h mov ah,09h
opc3 db "3.-Topo Letras
int 21h
int 21h
lea dx,msgM2
Minusculas",0ah,0dh,"$" msgR db "Tu opcion $" sali db "0.-Salir",0ah,0dh,"$"
espera clear Menu:
abajo lea dx, xxx mov ah,9h
int 21h add marcador,30h mov dl,marcador
tituloA db "El TOPO con Numeritos",0ah,0dh,"$"
mov ah,09h lea dx,msgM
int 21h ;lee numero usuario
mov ah,02h int 21h
tituloB db "El TOPO con
int 21h
mov ah,01h
mov ah,02h
Mayusculas",0ah,0dh,"$"
mov ah,09h
int 21h
mov dh,8
tituloC db "El TOPO con
lea dx,opc1
mov usua,al
mov dl,37
Minusculas",0ah,0dh,"$"
int 21h
mov cl,num
mov bh,0
msg2 db "OKY Bye Bye$"
mov ah,09h
cmp cl,usua
int 10h
msgM1 db "Tu Marcador $"
lea dx,opc2
je acierto
mov ah,09h
4
mayo 2013
lea dx,msgM3 int 21h
abajo continuar1:
clear mov ah,09h
mov dl,la mov ah,02h
add fallos,30h
sub repeti,01
lea dx,tituloC
int 21h
mov dl,fallos
cmp repeti,0
int 21h
mov dl,lb
mov ah,02h int 21h
ja mayusculasOpen marcadora1:
mov repeti,10 mov fallos,0
mov ah,02h int 21h
mov ah,09h lea dx,xxxx
mov ah,02h mov dh,5 mov dl,37mov bh,0
mov marcador,0 minusculasOpen:
mov dl,lc mov ah,02h
int 21h espera clear
int 10h mov ah,09h lea dx,msgM1
mov num,0 mov ah,2Ch ;relo int 21h
int 21h mov dl,ld mov ah,02h
cmp repeti,0
nt 21h
xor ax,ax
int 21h
jz menu
mov dl,la
and dh,0fh
mov dl,le
mayusculas:
mov ah,02h
add ax,dx
mov ah,02h
clear
int 21h
aaa
int 21h
mov ah,09h
mov dl,lb
add num,al
mov ah,02h
lea dx,tituloB
mov ah,02h
add num,ah
mov dh,7
int 21h
int 21h
add num,60h;;;
mov dl,37
mov repeti,10 mov fallos,0
mov dl,lc mov ah,02h
cmp num,7Ah ja minusculasOpen
mov bh,0 int 10h
mov marcador,0 mayusculasOpen:
int 21h mov dl,ld
imprimir2: mov dl,num
mov ah,09h lea dx,msgM2
mov num,0 mov ah,2Ch
mov ah,02h int 21h
mov ah,02h int 21h
int 21h add marcador,30h
int 21h
mov dl,le
abajo
mov dl,marcador
xor ax,ax
mov ah,02h
lea dx, xxx
mov ah,02h
and dh,0fh add ax,dx
int 21h mov ah,02h
mov ah,9h int 21h
int 21h mov ah,02h
aaa add num,al
mov dh,7 mov dl,37
mov ah,01h int 21h
mov dh,8 mov dl,37
add num,ah add num,40h;;;
mov bh,0 int 10h
mov usua,al mov cl,num
mov bh,0 int 10h
cmp num,5Ah
mov ah,09h
cmp cl,usua
mov ah,09h
ja mayusculasOpen
lea dx,msgM2
je acierto2
lea dx,msgM3
imprimir1:
int 21h
fallo2:
int 21h
mov dl,num mov ah,02h
add marcador,30h mov dl,marcador
add fallos,01 mov ah,09h
add fallos,30h mov dl,fallos
int 21h abajo
mov ah,02h int 21h
lea dx,x int 21h
mov ah,02h int 21h
lea dx, xxx mov ah,9h
mov ah,02h mov dh,8
jmp continuar2 acierto2:
mov ah,09h lea dx,xxxx
int 21h mov ah,01h
mov dl,37 mov bh,0
add marcador,01 mov ah,09h
int 21h espera
int 21h mov usua,al
int 10h mov ah,09h
lea dx,v int 21h
clear cmp repeti,0
mov cl,num cmp cl,usua
lea dx,msgM3 int 21h
abajo continuar2:
jz menu salir:
je acierto1
add fallos,30h
sub repeti,01
mov ah,02h
fallo1:
mov dl,fallos
cmp repeti,0
mov dh,12
add fallos,01
mov ah,02h
ja minusculasOpen
mov dl,37
mov ah,09h lea dx,x
int 21h mov ah,09h
marcadora2: mov ah,02h
mov bh,0 int 10h
int 21h jmp continuar1 acierto1:
lea dx,xxxx int 21h espera
mov dh,5 mov dl,37 mov bh,0
mov ah,09h lea dx,msg2 int 21h
add marcador,01
clear
int 10h
.exit
mov ah,09h lea dx,v
cmp repeti,0 jz menu
mov ah,09h lea dx,msgM1
endp
int 21h
minusculas:
int 21h
5
mayo 2013
Fallos Solo se presentó un error y fue en el retardo. Ya que cuando se creó el programa fue haciendo pruebas y cada parte importante del programa se hacía por separado y al momento de ensamblar todos lo mini programas se encontró el error en el bucle del retardador y la puntuación. Podías fallar pero no acertar ya que nunca se hacia la comparación si acertabas.
Capturas
6
mayo 2013
View more...
Comments