×
Samples Blogs Make Payment About Us Reviews 4.9/5 Order Now

Display 3 Random Numbers and A Fortune Cookie Phrase (At Random) Assignment Solution

July 08, 2024
Rehana Magnus
Rehana Magnus
🇨🇦 Canada
Assembly Language
Rehana Magnus, PhD in Computer Science from the esteemed Acadia Institute of Technology, Canada. With 6 years of experience, specializes in assembly language programming. Proficient in low-level coding, optimizing performance, and enhancing system functionality.
Key Topics
  • Instructions
  • Requirements and Specifications
Tip of the day
Use the REPL (Read-Eval-Print Loop) to test your code interactively, and practice writing concise, readable expressions to harness Scala’s powerful syntax effectively.
News
In 2024, universities abroad, like Dublin City University, have introduced cutting-edge programming courses, including Computer Engineering programs focusing on AI and machine learning.

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

Program in Flat Assembler to display 3 random numbers and a fortune cookie phrase Assembly language

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.