All pastes #191603 Raw Edit

Anonymous

public text v1 · immutable
·published 2006-10-05 03:33 UTC
rendered paste body
; program to implement number guessing game
; author:  R. Detmer
; date:  revised 9/97

.386
.MODEL FLAT

INCLUDE c:\80x86\Software\io.h

ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD

cr          EQU    0dh   ; carriage return character
Lf          EQU    0ah   ; linefeed character

.STACK  4096             ; reserve 4096-byte stack

.DATA                    ; reserve storage for data
prompt1     BYTE   cr,Lf,Lf,"Player 1, please enter a number:  ", 0
target      DWORD  ?
clear       BYTE   24 DUP (Lf), 0
prompt2     BYTE   cr,Lf,"Player 2, your guess?   ", 0
stringIn    BYTE   20 DUP (?)
lowOutput   BYTE   "too low", cr, Lf, 0
highOutput  BYTE   "too high", cr, Lf, 0
gotItOutput BYTE   "you got it", cr, Lf, 0
countLabel  BYTE   Lf, "Number of guesses:"
countOut    BYTE   6 DUP (?)
            BYTE   cr, Lf, Lf, Lf, "Do you want to play again?  ",0
.CODE                               ; start of main program code
_start:

untilDone:  output prompt1          ; ask player 1 for target
            input  stringIn, 20     ; get number
            atod   stringIn         ; convert to integer
            mov    target,eax       ; store target
            output clear            ; clear screen
            mov    cx, 0            ; zero count

untilMatch: inc    cx               ; increment count of guesses
            output prompt2          ; ask player 2 for guess
            input  stringIn, 20     ; get number
            atod   stringIn         ; convert to integer

            cmp    eax, target      ; compare guess and target
            jne    ifLess           ; guess = target ?
equal:      output gotItOutput      ; display "you got it"
            jmp    endCompare
ifLess:     jnl    isGreater        ; guess < target ?
            output lowOutput        ; display "too low"
            jmp    endCompare
isGreater:  output highOutput       ; display "too high"
endCompare:
            cmp    eax, target      ; compare guess and target
            jne    untilMatch       ; ask again if guess not = target

            itoa   countOut, cx     ; convert count to ASCII
            output countLabel       ; display label, count and prompt
            input  stringIn, 20     ; get response
            cmp    stringIn, 'n'    ; response = 'n' ?
            je     endUntilDone     ; exit if so
            cmp    stringIn, 'N'    ; response = 'N' ?
            jne    untilDone        ; repeat if not
endUntilDone:

            INVOKE ExitProcess, 0   ; exit with return code 0
PUBLIC _start                       ; make entry point public
            END                     ; end of source code