Created
May 18, 2017 21:29
-
-
Save Bahaaib/ceef3e069dfa23d171f09f82566546a4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| .MODEL TINY | |
| .DATA | |
| GEN_NUM DB 0 | |
| SNUM DB 8 DUP (?) | |
| FAC DW 10 | |
| TEMP DW 10 | |
| USER_NUM DW 0 | |
| TEMPB DB 0 | |
| MSG0_0 DB ' WELCOME TO iGUESS GAME$' | |
| MSG0_1 DB ' ********************************$' | |
| MSG0_2 DB 'PRESS: $' | |
| MSG0_3 DB 'R -> TO GIVE UP AND REVEAL THE CORRECT NUMBER ANYTIME!$' | |
| MSG0_4 DB 'Q -> TO EXIT THE GAME ANYTIME$' | |
| MSG1 DB 'GUESS A NUMBER IN A RANGE FROM 1 TO 100$' | |
| MSG2 DB 'TOO HIGH!$' | |
| MSG3 DB 'TOO LOW!$' | |
| MSG4 DB '90% ACCURATE..GUESS DOWN CLOSER!$' | |
| MSG5 DB '90% ACCURATE..GUESS UP CLOSER!$' | |
| MSG6 DB 'FINE GUESS!$' | |
| MSG7 DB 'PLAY AGAIN? (Y/N)$' | |
| MSG8 DB 'ARE YOU SURE? (Y/N)$' | |
| MSG9 DB 'PRETTY SURE? (Y/N)$' | |
| .CODE | |
| MAIN: | |
| MOV AX, @DATA | |
| MOV DS, AX | |
| MOV SI, OFFSET SNUM | |
| MOV BX, -1 | |
| MOV DX, OFFSET MSG0_0 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| ;------------------------------------------ | |
| MOV DX, OFFSET MSG0_1 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| ;------------------------------------------ | |
| MOV DX, OFFSET MSG0_2 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| ;------------------------------------------ | |
| MOV DX, OFFSET MSG0_3 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| ;------------------------------------------ | |
| MOV DX, OFFSET MSG0_4 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| ;------------------------------------------ | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MAIN_PSU: | |
| MOV DX, OFFSET MSG1 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| RANDGEN: | |
| MOV AH, 00H ; Get system time as a seed.. | |
| INT 1AH ; CX:DX now hold number of clock ticks since midnight! | |
| MOV AX, DX | |
| XOR DX, DX | |
| MOV CX, 100 ; Determine the range from 0 to 99 | |
| DIV CX ; Here's DX contains the remainder of the division - from 0 to 99 | |
| ADD DX, 1 ; Now it has a number from 1 to 100 | |
| MOV GEN_NUM, DL | |
| START: | |
| MOV AH, 01H ; Wait user to enter number.. | |
| INT 21H | |
| CMP AL, 'R' | |
| JE PRINT ; Reveal correct number when user asks for.. | |
| CMP AL, 'Q' ; Quit the game on demand | |
| JE QUIT | |
| CMP AL, 0DH ; Recieve Chars till ENTER is pressed | |
| JE FORMAT ; Format the string once finished! | |
| MOV [SI], AL ; Transfer Chars to Memory.. | |
| INC SI ; Extend 1 more place in memory for more Chars | |
| INC BX | |
| JMP START ; Keep recieving Chars till ENTER pressed! | |
| FORMAT: | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H ; Start the new line from the very beginnning | |
| MOV DL, '$' | |
| INC SI | |
| MOV [SI], DL ; Distinguish as String! | |
| MOV CX, BX ; Adjust loop counter to the number of digits entered! | |
| MOV SI, OFFSET SNUM ; Assign The Address of The number to SI | |
| MOV AX, 1 | |
| CMP BX, 0 ;If user entered more than a digit,calculate the factor from the left most. | |
| JE TOINT ;Otherwise, Convert it.. | |
| FACLOOP: | |
| MUL FAC | |
| LOOP FACLOOP | |
| MAIN_1: | |
| MOV CX, BX ;Reset the number of Loop counter.. | |
| TOINT: | |
| MOV AH, 0 ;Fixing something stupid above..skip it! | |
| MOV DL, [SI] ;Transfer the content of first Char to DL | |
| SUB DL, '0' ;Get the true value of intger stored in DL.. | |
| MOV TEMP, AX | |
| MUL DL ;Get the true value of an integer related to its position in the number. | |
| ADD USER_NUM, AX ;Accumulatively add till we have a complete converted number. | |
| MOV AX, TEMP ;Downgrade the factor for further iterations. | |
| MOV DL, 10 | |
| DIV DL ;By dividing it by 10 at each lap. | |
| INC SI | |
| DEC CX | |
| CMP CX, 0 ; If it's not last lap | |
| JGE TOINT ; Keep going.. | |
| RANGE: | |
| MOV CL, 10 | |
| MOV AL, GEN_NUM | |
| MOV AH, 0 | |
| DIV CL | |
| MOV DL, GEN_NUM | |
| ADD DL, AL | |
| MOV BL, GEN_NUM | |
| SUB BL, AL | |
| MOV AX, USER_NUM | |
| MOV CL, GEN_NUM | |
| MOV CH, 0 | |
| CMP AX, CX | |
| JE SUCESS | |
| CMP AL, DL | |
| JG PRNTHIGH | |
| CMP AX, CX | |
| JG PRNT90DN | |
| CMP AL, BL | |
| JL PRNTLOW | |
| CMP AX, CX | |
| JL PRNT90UP | |
| PRNTHIGH: | |
| MOV DX, OFFSET MSG2 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV USER_NUM, 0 | |
| MOV SI, OFFSET SNUM | |
| MOV BX, -1 | |
| JMP START | |
| PRNTLOW: | |
| MOV DX, OFFSET MSG3 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV USER_NUM, 0 | |
| MOV SI, OFFSET SNUM | |
| MOV BX, -1 | |
| JMP START | |
| PRNT90DN: | |
| MOV DX, OFFSET MSG4 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV USER_NUM, 0 | |
| MOV SI, OFFSET SNUM | |
| MOV BX, -1 | |
| JMP START | |
| PRNT90UP: | |
| MOV DX, OFFSET MSG5 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV USER_NUM, 0 | |
| MOV SI, OFFSET SNUM | |
| MOV BX, -1 | |
| JMP START | |
| SUCESS: | |
| MOV DX, OFFSET MSG6 | |
| MOV AH, 09H | |
| INT 21H | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV SI, OFFSET SNUM | |
| MOV DX, OFFSET MSG7 | |
| MOV AH, 09 | |
| INT 21H | |
| MOV AH, 01H | |
| INT 21H | |
| CMP AL, 'Y' | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| JE MAIN_PSU | |
| JNE EXIT | |
| PRINT: | |
| MOV AL, GEN_NUM | |
| MOV TEMPB, AL | |
| MOV CL, 10 | |
| MOV CH, 0 | |
| MOV AH, 0 | |
| DIV CL | |
| ADD AL, '0' | |
| MOV [SI], AL | |
| SUB AL, '0' | |
| INC SI | |
| MOV AH, 0 | |
| MUL CL | |
| MOV BL, TEMPB | |
| SUB BL, AL | |
| ADD BL, '0' | |
| MOV [SI], BL | |
| MOV DL, '$' | |
| INC SI | |
| MOV [SI], DL | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DX, OFFSET SNUM | |
| MOV AH, 09 | |
| INT 21H | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DX, OFFSET MSG7 | |
| MOV AH, 09 | |
| INT 21H | |
| MOV AH, 01H | |
| INT 21H | |
| CMP AL, 'Y' | |
| MOV DL, 10 ; Break for a new line </br> | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| JE MAIN_PSU | |
| JNE EXIT | |
| QUIT: | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DX, OFFSET MSG8 | |
| MOV AH, 09 | |
| INT 21H | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV AH, 01H | |
| INT 21H | |
| CMP AL, 'Y' | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| JNE MAIN_PSU | |
| MOV DX, OFFSET MSG9 | |
| MOV AH, 09 | |
| INT 21H | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV AH, 01H | |
| INT 21H | |
| CMP AL, 'Y' | |
| MOV DL, 10 | |
| MOV AH, 02H | |
| INT 21H | |
| MOV DL, 13 | |
| MOV AH, 02H | |
| INT 21H | |
| JNE MAIN_PSU | |
| EXIT: | |
| MOV AH ,4CH | |
| INT 21H | |
| END MAIN |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment