LENGUAJE ENSAMBLADOR

May 21, 2019 | Author: Ruben Sosa Monroy | Category: Assembly Language, Randomness, Binary Coded Decimal, Computer Architecture, Computing
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF