Instructions
Objective
Write a program in Flat Assembler (not Visual Studio) to display 3 random numbers and a fortune cookie phrase (at random), Assembly language.
Requirements and Specifications
Submit the asm source code file on Ecampus under the "Submit Homework" menu option.
Write an ×x86 assembly program that outputs three random numbers from 1-25 with no duplicates. Next, output a random inspirational quote.
Screenshots of output
Source Code
format PE console
entry _start
include 'win32a.inc'
header: DB "Here are three distinct (not duplicate) random numbers from 1-25:", 10, 13, 0
msg1: DB "May the fourth be with you!", 10, 13, 0
msg2: DB "So long, and thanks for all the fish!", 10, 13, 0
msg3: DB "Where we're going, we don't need roads!", 10, 13, 0
msg4: DB "Live long and prosper!", 10, 13, 0
msg5: DB "It always seems impossible until it's done!", 10, 13, 0
intfmt: DB "%d", 10, 13, 0
newline: DB 10, 13, 0
num1: DD 0
num2: DD 0
num3: DD 0
section '.text' code readable executable
_start:
push ebp
mov ebp, esp
; initialize random generator
push 0 ; push a zero
call [time] ; get current time
add esp, 4 ; restore stack
push eax ; pass time to srand
call [srand] ; set random seed
add esp, 4 ; restore stack
; print header message
push header ; load address of message
call [printf] ; print the string
add esp, 4 ; restore stack
mov ebx, 25 ; load 25 for making divisions
call [rand] ; generate a random number
mov edx, 0 ; clear edx before division
div ebx ; divide random number by 25 to get remainder 0-24
inc edx ; add 1 to remainder to get number 1-25
mov [num1], edx ; save number 1
push edx ; pass number 1
push intfmt ; pass integer format
call [printf] ; print number 1
add esp, 8 ; restore stack
gen2:
call [rand] ; generate second random number
mov edx, 0 ; clear edx before division
div ebx ; divide random number by 25 to get remainder 0-24
inc edx ; add 1 to remainder to get number 1-25
cmp edx, [num1] ; see if number is repeated
je gen2 ; if repeated, generate another one
mov [num2], edx ; save number 2
push edx ; pass number 2
push intfmt ; pass integer format
call [printf] ; print number 2
add esp, 8 ; restore stack
gen3:
call [rand] ; generate third random number
mov edx, 0 ; clear edx before division
div ebx ; divide random number by 25 to get remainder 0-24
inc edx ; add 1 to remainder to get number 1-25
cmp edx, [num1] ; see if number is repeated
je gen3 ; if repeated, generate another one
cmp edx, [num2] ; see if number is repeated
je gen3 ; if repeated, generate another one
mov [num3], edx ; save number 3
push edx ; pass number 3
push intfmt ; pass integer format
call [printf] ; print number 3
add esp, 8 ; restore stack
; generate random quote
call [rand] ; generate second random number
mov ebx, 5 ; load 5 to make division
mov edx, 0 ; clear edx before division
div ebx ; divide random number by 5 to get remainder 0-4
cmp edx,0 ; if remainder is 0,
je quote1 ; print quote 1
cmp edx,1 ; if remainder is 1,
je quote2 ; print quote 2
cmp edx,2 ; if remainder is 2,
je quote3 ; print quote 3
cmp edx,3 ; if remainder is 3,
je quote4 ; print quote 4
jmp quote5 ; else, remainder is 4, print quote 5
quote1:
mov eax, msg1 ; load quote 1 address
jmp printQuote
quote2:
mov eax, msg2 ; load quote 2 address
jmp printQuote
quote3:
mov eax, msg3 ; load quote 3 address
jmp printQuote
quote4:
mov eax, msg4 ; load quote 4 address
jmp printQuote
quote5:
mov eax, msg5 ; load quote 5 address
printQuote:
; print quote message
push eax ; load address of message
call [printf] ; print the string
add esp, 4 ; restore stack
call [getchar] ; wait until user presses a key
mov ebp, esp
pop ebp
call [ExitProcess] ; exit the program
; Import section
section '.idata' import data readable
library kernel32, 'kernel32.dll', \
msvcrt,'msvcrt.dll'
import kernel32, \
ExitProcess,'ExitProcess'
import msvcrt, \
printf, 'printf', time, 'time', \
srand, 'srand', rand, 'rand', \
getchar, 'getchar'
Related Samples
At ProgrammingHomeworkHelp.com, we offer extensive assignment support to students, featuring a dedicated section for related samples of Assembly Language assignments. Our meticulously crafted Assembly Language samples cover a wide range of topics, providing valuable insights and practical solutions to complex programming problems. Whether you're tackling low-level programming, understanding machine code, or working on embedded systems, our samples are designed to enhance your learning experience. Explore our Assembly Language samples today and benefit from the expertise and quality that ProgrammingHomeworkHelp.com provides for all your programming assignment needs.
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language