Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
CURSO: ARQUITECTURA DE
COMPUTADORAS
PROPIO:
-SONCCO CHUTAYA FREDY
.code
; Segmentos de cdigo.
III.
Constantes:
- CR y LF
Variables:
- number: esta variable ser el nmero que el usuario debe adivinar.
- Guess: Guardara el numero ingresado por el usuario.
- erroChk: Esta variable la utilizaremos para comparar y verificar que guess no est
fuera de rango.
Mensajes:
- Prompt, LessMsg, MoreMsg, equalMsg, OverflowMsg y retry.
param
label Byte
Funcin start:
-
Las primeras 4 lneas de cdigo a los registros ax, bx, cx y dx,se les da el valor de 0.
Las siguientes lneas de cdigo realizamos movimientos donde guardaremos el valor
de nuestras variables creadas anteriormente en nuestros registros mencionados.
MOV cl, 0h
MOV dx, 0h
; Carga en CL 0 (Contador)
; Carga en DX 0 (Datos registro utilizado para almacenar la entrada
del usuario)
; END START
Funcin while:
-
Esta funcin se encarga de leer la entrada del usuario donde primero se valida que
no superen los 5 dgitos para comparar usa el registro CL (que sera nuestro
contador).
Despus se procede a preguntar si la ltima tecla que el usuario presiono sea
ENTER, si es as se salta a la funcin endwhile. Caso contrario pasara a la siguiente
instruccin.
Las siguientes instrucciones se encargan de almacenar el valor ingresado por el
usuario en DL.
Se incrementa en 1 a nuestro Contador que es CL.
Finalmente hace un salto hacia la misma funcin.
Para salir de esta funcin el usuario tendra que presionar la tecla ENTER.
cl, 5d
endwhile
MOV ah, 1h
INT 21h
CMP
; comparar el valor ledo con 0Dh que es el cdigo ASCII para la tecla
ENTER
; Si AL = 0Dh, Significa que ha presionado ENTER entonces se salta la
funcin 'endwhile'
JE
SUB
al, 0Dh
endwhile
al, 30h
MOV dl, al
PUSH dx
INC
cl
JMP while
Funcin endwhile:
-
endwhile:
; Fin de la entrada del usuario
DEC cl
; decremento CL por uno para reducir el incremento hecho en la ltima
iteracin
CMP cl, 02h
JG overflow
Funcin while2:
-
Esta funcin Crea la representacin numrica real del nmero ingresado por el
usuario como tres caracteres.
Esta representacin se enva a la funcin while3 que har la conversin de estos
caracteres a decimal.
Para despus poder hacer la comparaciones con nuestra variable number y poder
saber si el usuario ha ingresado el numero o correcto o aun no.
MOV ch, 0h
MOV al, 1d
MOV dh, 10d
Funcin While3:
-
; COMIENZO bucle; - SI CL es 2
; - Primera bucle producir 10 ^ 0
; - Segundo bucle producir 10 ^ 1
; - Tercera bucle producir 10 ^ 2
while3:
CMP ch, cl
JGE endwhile3
; Compara CH y CL
; si CH >= CL, salta a 'endwhile3
MUL dh
INC ch
JMP while3
; incremento CH
; Salto a 'while3'
Funcin Endwhile3:
; Fin del clculo de la potencia
; AL ahora contiene 10 ^ 0, 1 o 10 ^ 10 ^ 2 en funcin del valor de CL
MUL dl
JO overflow
MOV dl, al
ADD dl, guess
JC overflow
; Incrementa CL contador
; Salta hacia atrs a 'while2'
Funcin Endwhile2:
-
endwhile2:
; Fin del proceso de La entrada del usuario.
MOV ax, @data
MOV ds, ax
MOV dl, number
MOV dh, guess
CMP dh, dl
JC greater
JE equal
JG lower
Funcin Equal:
-
equal:
;Carga el contenido de la variable equalMsg
MOV dx, offset equalMsg ; Carga la direccin del mensaje de 'equalMsg' a DX
MOV ah, 9h
; Escribe una cadena de STDOUT (para DOS interrupt)
INT 21h
; (Interrupcin DOS)
JMP exit
; Salta a 'exit'
Funcin Greater:
-
greater:
MOV dx, offset moreMsg ; Carga la direccin del mensaje de 'moreMsg' a DX
MOV ah, 9h
; Escribe una cadena de STDOUT (para DOS interrupt)
INT 21h
; (Interrupcin DOS)
JMP start
; Salta al inicio del programa(start)
Funcin Lower:
-
lower:
MOV dx, offset lessMsg ; Carga la direccin del mensaje de 'lessMsg' a DX
MOV ah, 9h
; Escribe una cadena de STDOUT (para DOS interrupt)
INT 21h
; (Interrupcin DOS)
JMP start
; Salta al inicio del programa(start)
Funcin Overflow:
-
overflow:
MOV dx, offset overflowMsg ; Carga la direccin del mensaje de 'overflowMsg' a DX
MOV ah, 9h
; Escribe una cadena de STDOUT (para DOS interrupt)
INT 21h
; (Interrupcin DOS)
JMP start
; Salta al inicio del programa(start)
exit:
; Preguntar al usuario si necesita volver a intentarlo
retry_while:
MOV dx, offset retry ; Carga la direccin del mensaje de 'prompt' a DX
MOV ah, 9h
INT 21h
MOV ah, 1h
INT 21h
JMP retry_while
Return_to_DOS:
-
retry_endwhile:
restart:
JMP start
; Salta al inicio del programa(start)
return_to_DOS:
MOV ax, 4c00h
; Retorna ms-dos
INT 21h
; (Interrupcion DOS)
end start
;finaliza start
RET