Task

Write a program where the program chooses a number between   1   and   10.

A player is then prompted to enter a guess.   If the player guesses wrong,   then the prompt appears again until the guess is correct.

When the player has made a successful guess the computer will issue a   "Well guessed!"   message,   and the program exits.

A   conditional loop   may be used to repeat the guessing until the user is correct.



Related tasks

   Bulls and cows
   Bulls and cows/Player
   Guess the number/With Feedback
   Mastermind


 
 
 segment .data
 
      random  dd  0   ; Where the random number will be stored
      guess   dd  0   ; Where the user input will be stored
 
     instructions    db  10, "Welcome user! The game is simple: Guess a random number (1-10)!", 10, 10
     len1 equ $ - instructions   ; 1 \n before and 2 \n after instructions for better appearance
 
     wrong           db  "Not the number :(", 10
     len2 equ $ - wrong
 
     correct         db  "You guessed right, congratulations :D", 10
     len3 equ $ - correct
 
 segment .bss
 
 segment .text
     global  main
 
 main:
     push    rbp
     mov     rbp, rsp
     ; ********** CODE STARTS HERE **********
 
     ;;;;; Random number generator ;;;;;
 
     mov     eax, 13
     mov     ebx, random
     int     80h
     mov     eax, [ebx]
     mov     ebx, 10
     xor     edx, edx
     div     ebx
     inc     edx
     mov     [random], edx
 
     ;;;;; Print the instructions ;;;;;
 
     mov     eax, 4
     mov     ebx, 1
     mov     ecx, instructions
     mov     edx, len1
     int     80h
 
 userInput:
 
     ;;;;; Ask user for input ;;;;;
 
     mov     eax, 3
     xor     ebx, ebx
     mov     ecx, instructions
     mov     edx, 1
     int     80h
     mov     al, [ecx]
     cmp     al, 48
     jl      valCheck
     cmp     al, 57
     jg      valCheck
 
     ;;;;; If number ;;;;;
 
     sub     al, 48
     xchg    eax, [guess]
     mov     ebx, 10
     mul     ebx
     add     [guess], eax
     jmp     userInput
 
 valCheck:
 
     ;;;;; Else check number ;;;;;
 
     mov     eax, 4
     inc     ebx
     mov     ecx, [guess]
     cmp     ecx, [random]
     je      correctResult
 
     ;;;;; If not equal, "not the number :(" ;;;;;
 
     mov     ecx, wrong
     mov     edx, len2
     mov     DWORD [guess], 0
     int     80h
     jmp     userInput
 
 correctResult:
 
     ;;;;; If equal, "congratulations :D" ;;;;;
 
     mov     ecx, correct
     mov     edx, len3
     int     80h
 
     ;;;;; EXIT ;;;;;
 
     mov     rax, 0
     mov     rsp, rbp
     pop     rbp
     ret
 
; "Guess my number" program by Randomboi (8/8/2021)
 