Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

TITLE Program Template (main.asm) INCLUDE Irvine32.inc .data diceOne DWORD ? dic

ID: 3716142 • Letter: T

Question

TITLE Program Template (main.asm)

INCLUDE Irvine32.inc

.data

diceOne DWORD ?

diceTwo DWORD ?

win DWORD 7, 11

lose DWORD 2, 3, 12

mark DWORD 4, 5, 6, 8, 9, 10

markCounter DWORD ?

userInput BYTE 'Enter integer: ', 0

numRolls DWORD ?

printWon BYTE 'Won: ', 0

wonCounter DWORD ?

printWin BYTE ' You win!', 0

printLost BYTE 'Lost: ', 0

lostCounter DWORD ?

printLose BYTE ' You lose!', 0

printTotal BYTE 'Total: ', 0

space DWORD ' ', 0

printPlus BYTE ' + ', 0

printMark BYTE ' Mark ', 0

.code

main PROC

call randomize ; set random seed

mov ecx, 6 ; counter set to 6

mov edx, offset userInput ; print string

call writeString

call readInt ; read input

mov numRolls, eax ; store input in variable

mov ecx, numRolls   

mov eax, 0

mov edi, offset win

call gamesRolled

exit

main ENDP

;number of games rolled based on user input

gamesRolled PROC uses eax ecx

DICEROLLS:

call crlf

;diceOne roll

mov eax, 5 ;move value into eax to pass as parameter for randomrange

call randomRange ;randomrange stored in eax 0-5

inc eax

mov diceOne, eax ;mov the value of randomrange into variable

call writeDec   

push edx ;push edx off stack to print space

mov edx, OFFSET printPlus

call writeString

pop edx

;diceTwo roll

mov eax, 6

call randomRange

inc eax

mov diceTwo, eax

call writeDec

add eax, diceOne ; add diceOne roll to diceTwo roll

cmp eax, win ; comp eax value to win

je wins

cmp eax, lose

je losses

cmp eax, mark

je marks

LOOP DICEROLLS

ret

gamesRolled ENDP

wins PROC uses edi ecx

mov edi, offset win

mov ecx, lengthof win

cmp eax, [edi]

add edi, type win

push edx

mov edx, offset printWin

call writeString

pop edx

jmp gamesRolled

ret

wins ENDP

losses PROC uses edi ecx

mov edi, offset lose

mov ecx, lengthof lose

cmp eax, [edi]

add edi, type lose

push edx

mov edx, offset printLose

call writeString

pop edx

jmp gamesRolled

ret

losses ENDP

marks PROC uses edi ecx

mov edi, offset lose

mov ecx, lengthof lose

cmp eax, [edi]

add edi, type lose

push edx

mov edx, offset printMark

call writeString

pop edx

jmp gamesRolled

ret

marks ENDP

END main

Explanation / Answer

Solution:

INCLUDE Irvine32.inc

.data

diceOne                     DWORD ?

diceTwo                     DWORD ?

win                         DWORD 7, 11

lose                        DWORD 2, 3, 12

mark                        DWORD 4, 5, 6, 8, 9, 10

markCounter                 DWORD ?

userInput                   BYTE 'How many rolls would you like to see: ', 0

numRolls                    DWORD ?

printWon                    BYTE 'Won: ', 0

wonCounter                  DWORD ?

printWin                   BYTE ' Win', 0

printLost                   BYTE 'Loss: ', 0

lostCounter                 DWORD ?

printLoss                   BYTE ' Loss', 0

printTotal                  BYTE 'Total: ', 0

space                       DWORD ' ', 0

printPlus                   BYTE ' + ', 0

printMark                   BYTE ' Mark ', 0

.code

main PROC

    call randomize                      ; set random seed

    mov ecx, 6                          ; counter set to 6

    mov edx, offset userInput           ; print string

    call writeString

    call readInt                        ; read input

    mov numRolls, eax                   ; store input in variable

    mov ecx, numRolls                  

    mov eax, 0

    mov edi, offset win

    call gamesRolled

    exit

main ENDP

;number of games rolled based on user input

gamesRolled PROC uses eax ecx

DICEROLLS:

    call crlf

                                ;diceOne roll

    mov eax, 5                  ;move value into eax to pass as parameter for randomrange

    call randomRange            ;randomrange stored in eax 0-5

    inc eax

    mov diceOne, eax            ;mov the value of randomrange into variable

    call writeDec      

    push edx                    ;push edx off stack to print space

    mov edx, OFFSET printPlus

    call writeString

    pop edx

                                ;diceTwo roll

    mov eax, 6

    call randomRange

    inc eax

    mov diceTwo, eax

    call writeDec

    add eax, diceOne            ; add diceOne roll to diceTwo roll

    cmp eax, win                ; comp eax value to win

    je wins

    cmp eax, lose

    je losses

    cmp eax, mark

    je marks

    LOOP DICEROLLS

    ret

gamesRolled ENDP

wins PROC uses edi ecx

    mov edi, offset win

    mov ecx, lengthof win

    cmp eax, [edi]

    add edi, type win

    push edx

    mov edx, offset printWin

    call writeString

    pop edx

    jmp gamesRolled

    ret

wins ENDP

losses PROC uses edi ecx

    mov edi, offset lose

    mov ecx, lengthof lose

    cmp eax, [edi]

    add edi, type lose

    push edx

    mov edx, offset printLoss

    call writeString

    pop edx

    jmp gamesRolled

    ret

losses ENDP

marks PROC uses edi ecx

    mov edi, offset lose

    mov ecx, lengthof lose

    cmp eax, [edi]

    add edi, type lose

    push edx

    mov edx, offset printMark

    call writeString   

    pop edx

    jmp gamesRolled

    ret

marks ENDP

END main