Lab 5: Input/Output using a Library of Procedures

Similar documents
Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB

Assembly Language for Intel-Based Computers, 4 th Edition

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 5: Procedures. Chapter Overview. The Book's Link Library

Libraries and Procedures

Libraries and Procedures

COE 205. Computer Organization and Assembly Language Dr. Aiman El-Maleh

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 5: Procedures

Lab 3: Defining Data and Symbolic Constants

AM2: Programming with Contemporary Instruction Set

Assembly Language. Lecture 5 Procedures

Assembly Language. Lecture 5 Procedures

AM2: Protected-Mode Programming

In order to run the program, go to the folder Release and run project.exe.

Lab 6: Conditional Processing

Lab 4: Basic Instructions and Addressing Modes

Marking Scheme. Examination Paper Department of CE. Module: Microprocessors (630313)

Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB. Lab # 8. Conditional Processing

Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB. Lab # 10. Advanced Procedures

Lab 2: Introduction to Assembly Language Programming

Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB. Lab # 7. Procedures and the Stack

COMPUTER ENGINEERING DEPARTMENT

Introduction to Assembly Language

Assembly Language Programming

Marking Scheme. Examination Paper. Module: Microprocessors (630313)

Introduction to Assembly Language

Assembly Language Fundamentals

Islamic University Gaza Engineering Faculty Department of Computer Engineering ECOM 2125: Assembly Language LAB

Experiment #5. Using BIOS Services and DOS functions Part 1: Text-based Graphics

Macros. Introducing Macros Defining Macros Invoking Macros Macro Examples Nested Macros Example Program: Wrappers

ELEC 242 Using Library Procedures

COMPUTER ENGINEERING DEPARTMENT

Assembly Language for Intel-Based Computers, 5 th Edition

Assembly Language for Intel-Based Computers, 4 th Edition

We can study computer architectures by starting with the basic building blocks. Adders, decoders, multiplexors, flip-flops, registers,...

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 3: Assembly Language Fundamentals

Chapter 3: Assembly Language Fundamentals. Cristina G. Rivera

Microprocessors ( ) Fall 2010/2011 Lecture Notes # 15. Stack Operations. 10 top

Assembly Language for Intel-Based Computers, 5 th Edition. Kip Irvine. Chapter 3: Assembly Language Fundamentals

Video processing The INT instruction enables program to interrupt its own processing. Use INT instruction to handle inputs and outputs

Marking Scheme. Examination Paper. Module: Microprocessors (630313)

ADDRESSING MODES. Operands specify the data to be used by an instruction

Assembly Language for Intel-Based Computers, 5 th Edition. Chapter 3: Assembly Language Fundamentals

Faculty of Engineering Computer Engineering Department Islamic University of Gaza Assembly Language Lab # 2 Assembly Language Fundamentals

MODE (mod) FIELD CODES. mod MEMORY MODE: 8-BIT DISPLACEMENT MEMORY MODE: 16- OR 32- BIT DISPLACEMENT REGISTER MODE

EXPERIMENT WRITE UP. LEARNING OBJECTIVES: 1. Get hands on experience with Assembly Language Programming 2. Write and debug programs in TASM/MASM

Assembly Fundamentals

Assembly Language Fundamentals

Assembly Language. Lecture 3 Assembly Fundamentals

The statement above assumes that the PCMAC.INC file is in the current directory. The full path of the file can also be given:

INT 21H and INT 10H Programming and Macros

Assembly Language Lab # 9

The Instruction Set. Chapter 5

Module 3 Instruction Set Architecture (ISA)

Experiment 8 8 Subroutine Handling Instructions and Macros

EECE416 :Microcomputer Fundamentals and Design. X86 Assembly Programming Part 1. Dr. Charles Kim

UMBC. A register, an immediate or a memory address holding the values on. Stores a symbolic name for the memory location that it represents.

Experiment 3 3 Basic Input Output

Constants and Expressions. Lecture 7: Assembly Language Programs. Constants and Expressions (cont.) Statements. Names. Assembly Directives

Philadelphia University Student Name: Student Number:

Lecture 15 Intel Manual, Vol. 1, Chapter 3. Fri, Mar 6, Hampden-Sydney College. The x86 Architecture. Robb T. Koether. Overview of the x86

Assembly basics CS 2XA3. Term I, 2017/18

Chapter Overview. Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 3: Assembly Language Fundamentals.

CMSC Lecture 03. UMBC, CMSC313, Richard Chang

Marking Scheme. Examination Paper Department of CE. Module: Microprocessors (630313)

Complex Instruction Set Computer (CISC)

Introduction to IA-32. Jo, Heeseung

INTRODUCTION TO IA-32. Jo, Heeseung

LAB 5 Arithmetic Operations Simple Calculator

mith College Computer Science CSC231 - Assembly Week #4 Dominique Thiébaut

Assembly Language Each statement in an assembly language program consists of four parts or fields.

The x86 Architecture

Constants and. Lecture 7: Assembly Language Programs. Expressions (cont.) Constants and. Statements. Expressions

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 2: IA-32 Processor Architecture Included elements of the IA-64 bit

X86 Addressing Modes Chapter 3" Review: Instructions to Recognize"

Computer Architecture and Assembly Language. Practical Session 3

We will first study the basic instructions for doing multiplications and divisions

Language of x86 processor family

ELEC VIDEO BIOS ROUTINES

Assembly Language for Intel-Based Computers, 4 th Edition

CSC 2400: Computer Systems. Towards the Hardware: Machine-Level Representation of Programs

Low Level Programming Lecture 2. International Faculty of Engineerig, Technical University of Łódź

ECOM 2325 Computer Organization and Assembly Language. Instructor: Ruba A.Salamah INTRODUCTION

Assembly Language for Intel-Based Computers, 4 th Edition. Chapter 8:Advanced Procedures

Experiment 3. TITLE Optional: Write here the Title of your program.model SMALL This directive defines the memory model used in the program.

Stack -- Memory which holds register contents. Will keep the EIP of the next address after the call

Scott M. Lewandowski CS295-2: Advanced Topics in Debugging September 21, 1998

Dr. Ramesh K. Karne Department of Computer and Information Sciences, Towson University, Towson, MD /12/2014 Slide 1

Basic Execution Environment

EECE.3170: Microprocessor Systems Design I Summer 2017 Homework 4 Solution

Addressing Modes on the x86

22 Assembly Language for Intel-Based Computers, 4th Edition. 3. Each edge is a transition from one state to another, caused by some input.

Assembly Language. Lecture 2 - x86 Processor Architecture. Ahmed Sallam

CMSC 313 Lecture 08 Project 2 Questions Recap Indexed Addressing Examples Some i386 string instructions A Bigger Example: Escape Sequence Project

Assembly Language for Intel-Based Computers, 5 th Edition. Chapter 9: Strings and Arrays

GLOBAL EDITION. Assembly Language. for x86 Processors SEVENTH EDITION. Kip R. Irvine

CSC 8400: Computer Systems. Machine-Level Representation of Programs

Reverse Engineering II: The Basics

Advanced Procedures. Computer Organization and Assembly Languages Yung-Yu Chuang 2005/11/24. with slides by Kip Irvine

Intel Architecture Segment:Offset Memory Addressing

Assembly Language. Lecture 2 x86 Processor Architecture

Transcription:

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 46 Lab 5: Input/Output using a Library of Procedures Contents 5.1. Using an External Library of Procedures for Input and Output 5.2. Writing Characters, Strings, and Integers to Standard Output 5.3. Displaying Memory/Registers and Setting Text Color 5.4. Reading Characters, Strings, and Integers from Standard Input 5.5. Generating Random Numbers and Delaying Program Execution 5.1 Using an External Library of Procedures for Input and Output The Irvine32 library, authored by Kip Irvine, provides a number of useful procedures that can be used for basic input and output. First, we need to define few terms: Console: This is the Command Prompt window running in color text mode under MS-Windows. The console can execute 32-bit protected-mode programs as well as 16-bit real-address mode programs. The console window is divided into rows and columns. There are 25 rows and 80 columns by default, but it can be resized. Standard Output: by default, the console defines standard output as the screen display device, although standard output can be also redirected to write to a file. Standard Input: By default, the console defines standard input as the keyboard device, although standard input can be also redirected to read from a file. Here is the list of output procedures for writing characters, strings, and integers. You can find more details in the textbook and class notes. There is also an online help for the Irvine library that comes with this lab. Procedure Clrscr Crlf WriteChar WriteString WriteHex WriteBin WriteDec WriteInt Description Clears the console and locates the cursor at the upper left corner. Writes end-of-line control chars (CR=13, LF=10) to standard output. Writes a single character in register AL to standard output. Writes a null-terminated string, with address in EDX, to standard output. Writes register EAX in hexadecimal format to standard output. Writes register EAX in binary format to standard output. Writes register EAX in unsigned decimal format to standard output. Writes register EAX in signed decimal format to standard output.

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 47 5.2 Writing Characters, Strings, and Integers to Standard Output TITLE Writing characters, strings, and integers (output.asm) ; Testing Following Procedures in the assembly32.lib Library: ; Clrscr: Clears the console screen ; Crlf: Write CR and LF characters (end-of-line) ; WriteChar: Write a single character to standard output ; WriteString: Write a null-terminated string to standard output ; WriteHex: Write 32-bit integer in eax in hexadecimal format ; WriteBin: Write 32-bit integer in eax in binary format ; WriteDec: Write 32-bit integer in eax in unsigned decimal format ; WriteInt: Write 32-bit integer in eax in signed decimal format.686.model flat, stdcall.stack INCLUDE Irvine32.inc.data CR EQU 0Dh ; carriage return LF EQU 0Ah ; line feed string BYTE "Hello World",CR,LF,0.code main PROC ; Clear the screen call Clrscr ; Call procedure Clrscr ; Write a character to standard output mov al, 'A' ; al = 'A' (or 41h) call WriteChar ; Write character in register al ; Write CR and LF chars (end-of-line) ; Write a null-terminated string to standard output lea edx, string ; load effective address of string into edx ; write string whose address is in edx ; Write an integer to standard output mov eax,0f1a37cbfh ; eax = 0F1A37CBFh call WriteHex ; Write eax in hexadecimal format ; Write CR and LF chars (end-of-line) call WriteBin call WriteDec call WriteInt ; Write eax in binary format ; Write CR and LF chars (end-of-line) ; Write eax in unsigned decimal format ; Write CR and LF chars (end-of-line) ; Write eax in signed decimal format ; Write CR and LF chars (end-of-line) exit main ENDP END main

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 48 5.2.1 Lab Work: Assemble and Link Output.asm 5.2.2 Lab Work: Trace the Execution of Output.exe Guess the Console Output of the above program and write it in the specified box. Console for output.exe Run the 32-bit Windows Debugger. Open the source file output.asm from the File menu if it is not already opened. Watch the registers by selecting Registers in the View menu or by pressing Alt+4. Customize the registers to have registers al, eax, and edx on top of the list. Place the cursor at the beginning of main procedure and press F7 to start debugging it. Press F10 to step through the execution of the program. Watch the changes in the output window. Make the necessary corrections to the Console Output that you have guessed. 5.3 Displaying Memory/Registers and Setting Text Color The following output procedures are used to dump a block of memory, to dump registers, to set the foreground and background colors of text, to display a wait message, and to locate the cursor at a specific row and column. For more details, refer to your textbook, class notes, and online help for the Irvine library. Procedure DumpMem DumpRegs SetTextColor WaitMsg Gotoxy Description Writes a block of memory to standard output in hexadecimal format. The start address of the memory block should be in the ESI register The number of elements to be displayed should be in the ECX register The type of each element should be in the EBX register Writes the EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EFLAGS, and EIP registers in hexadecimal, as well as the Carry, Sign, Zero, and Overflow flags. Sets the foreground and background colors of all subsequent text output. The desired color should be specified in the EAX register before calling this procedure. The least significant 4 bits of EAX specify the text color and the next 4 bits specify the background color. Writes "Press [Enter] to continue " and waits for Enter to be pressed. Locate the cursor at row specified by DH and column specified by DL. The following program demonstrates the use of the above procedures:

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 49 TITLE Setting Text Color, Dumping Memory and Registers (Output2.asm) ; Testing following Output Procedures in the assembly32.lib Library: ; Clrscr: Clears the console screen ; SetTextColor: Set the foreground and background colors of text ; DumpMem: Write a block of memory in hexadecimal ; DumpRegs: Display basic registers and flags in hexadecimal ; WaitMsg: Display a message and wait for Enter key to be pressed ; Gotoxy: Put the cursor at a specific row/column on the console.686.model flat, stdcall.stack INCLUDE Irvine32.inc.data CR EQU 0Dh ; carriage return LF EQU 0Ah ; line feed string BYTE "This is a string", CR, LF, 0.code main PROC ; Clear the screen after setting text color mov eax, yellow+(blue*16) ; yellow = 14 and blue = 1 call SetTextColor ; set yellow text on blue background call Clrscr ; Call procedure Clrscr ; Call DumpMem that display a block of memory to standard output mov esi, OFFSET string ; esi = address of memory block mov ecx, LENGTHOF string ; ecx = number of elements to display mov ebx, TYPE BYTE ; ebx = type of each element call DumpMem ; write 19 bytes of string ; Call WaitMsg that displays "Press [Enter] to continue..." call WaitMsg ; wait for [Enter] key to be pressed ; Call DumpRegs that display the basic registers and flags in hex call DumpRegs ; write basic registers ; Call WaitMsg after locating the cursor on the console mov dh, 10 ; row 10 mov dl, 20 ; column 20 call Gotoxy ; locate cursor call WaitMsg ; wait for [Enter] key to be pressed exit main ENDP END main 5.3.1 Lab Work: Assemble and Link Output2.asm 5.3.2 Lab Work: Trace the Execution of Output2.exe Run the 32-bit Windows Debugger. Open the source file output2.asm from the File menu if it is not already opened. Watch the registers by selecting Registers in the View menu or by pressing Alt+4. Place the cursor at the beginning of main procedure and press F7 to start debugging it. Press F10 to step through the execution of the program. Watch the changes in

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 50 the registers as well as the output window. When the program displays the Wait message Press [Enter] to continue... it is waiting for your input. Click inside the Console output and press Enter. The program will advance to the next instruction. Go back to the program and click F10 to continue tracing it. Write below the final Console output: Console for output2.exe You can also run the program Output2.exe from a command prompt to check its output. 5.4 Reading Characters, Strings, and Integers from Standard Input The following input procedures are used to read characters, integers, and strings: Procedure ReadChar ReadString ReadHex ReadInt Description Reads a character from standard input and returns it in AL register. The character is NOT echoed on the screen. Reads a string from standard input. Reading stops when the user presses the [Enter] key. Before calling ReadString, EDX should contain the address of the array of bytes where the input characters should be stored, and ECX should contain the maximum number of bytes to be read plus one extra byte for the null character to terminate the string. This procedure returns a count of the actual number of bytes read in the EAX register. Reads a hexadecimal string from standard input, converts it to a number, and returns it in the EAX register. Reading stops when the user presses the [Enter] key. A maximum of eight hex digit chars should be entered. The hex digits: 0-9, a-f, and A-F may be used only. Leading spaces are not allowed. No error checking is performed and no error messages are displayed. If an invalid hex string is entered then it will not be converted properly. Reads a signed integer string from standard input, converts it to a number, and returns it in the EAX register. Reading stops when the user presses the [Enter] key. An optional leading + or character can be entered by the user. Decimal digits 0-9 can be entered only after the optional sign. Error checking is performed by this procedure. The overflow flag is set and an error message is displayed if the entered number is invalid or out-of-range and cannot be represented as a signed 32-bit integer. The following program demonstrates the use of the above procedures:

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 51 TITLE Reading characters, strings, and integers (input.asm) ; Testing Following Procedures in the assembly32.lib Library: ; ReadChar: Read a single character from standard input ; ReadString: Read a null-terminated string from standard input ; ReadHex: Read hexadecimal integer from standard input ; ReadInt: Read signed decimal integer from standard input.686.model flat, stdcall.stack INCLUDE Irvine32.inc.data charvar BYTE 0 ; Character variable string BYTE 21 DUP(0) ; Extra byte for null char bytecount DWORD 0 ; Count of bytes read in string hexvar DWORD 0 ; Unsigned integer variable intvar SDWORD 0 ; Signed integer variable prompt1 BYTE "Enter a character (char will not appear): ",0 prompt2 BYTE "Enter a string (max 20 chars): ",0 prompt3 BYTE "Enter a hexadecimal number (max 8 digits): ",0 prompt4 BYTE "Enter a decimal number with optional sign: ",0.code main PROC call Clrscr ; Display prompt1 lea edx, prompt1 ; Read a character (without echo) from standard input call ReadChar ; character is returned in AL mov charvar, al ; save character in charvar ; Write end-of-line after reading character ; Display prompt2 lea edx, prompt2 ; Read a null-terminated string from standard input lea edx, string ; edx = address of storage area for string mov ecx, SIZEOF string ; ecx = max characters to be stored call ReadString ; read string from standard input mov bytecount, eax ; eax = actual number of chars read ; Display prompt3 lea edx, prompt3 ; Read a hexadecimal string and convert it to a number call ReadHex ; number is returned in EAX register mov hexvar, eax ; save number in hexvar ; Display prompt4 lea edx, prompt4 ; Read a signed decimal string and convert it to a number call ReadInt ; number is returned in EAX register mov intvar, eax ; save number in intvar exit main ENDP END main

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 52 5.4.1 Lab Work: Assemble and Link Input.asm 5.4.2 Lab Work: Trace the Execution of Input.exe Run the 32-bit Windows Debugger. Open the source file input.asm from the File menu if it is not already opened. Watch the registers by selecting Registers in the View menu or by pressing Alt+4. Customize the registers to have registers al, eax, ecx, edx on top of the list. Select Memory from the View menu, or press Alt+5 to view memory. Type string in the virtual address box to view the string variable in memory. Select Watch from the View menu, or press Alt+2 to open the Watch window. Watch the values of the variables charvar, bytecount, hexvar, and intvar by inserting their names. Place the cursor at the beginning of main procedure and press F7 to start debugging it. Press F10 to step through the execution of the program. When the program asks to Enter a character (char will not appear): then enter character A in the console window then press F10 to step through call ReadChar in the program. When the program asks to Enter a string (max 20 chars): then enter My String and press enter. When the programs asks to Enter a hexadecimal number (max 8 digits): then enter ab09f and press enter. When the program asks to Enter a decimal number with optional sign: then enter 12345678 and press enter. Show the values of the following variables, just before exiting the program: 1) charvar (in hex and as a character) = 2) 12 bytes of string (in hex) 3) bytecount (in decimal) = 4) hexvar (in hex) = 5) intvar (in decimal) = 5.4.3 Lab Work: Invalid Input Repeat the program execution entering invalid input. For the string, enter a string longer than 20 characters. For the hexadecimal number, enter more than 8 digits and try also invalid characters. For the signed integer, try long integers that are outside the range 2,147,483,648 to +2,147,483,647. Also try invalid input and see what happens. What happens when entering a string longer than 20 characters? What happens when entering an invalid hexadecimal number? What happens when entering an invalid decimal number?

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 53 5.5 Generating Random Numbers and Delaying Program Execution The following miscellaneous procedures are defined in the Irvine32.lib library and can be of practical use to some programs: Procedure Random32 RandomRange Randomize Delay GetMseconds Description Generates a 32-bit pseudorandom integer in the range 0 to FFFFFFFFh, and returns it in the EAX register. When called repeatedly, Random32 generates a pseudorandom sequence of integers. Generates a pseudorandom integer from 0 to n 1. Before calling RandomRange, n should be passed in the EAX register. RandomRange returns its result in the EAX register. Seeds the random number generators Random32 and RandomRange with a unique value. The seed is initialized from the time of the day obtained from the system. This procedure virtually ensures that each time you run a program, the sequence of random integers will be different. You need to call Randomize once at the beginning of your program. Delay program execution for specified n milliseconds. The register EAX should be set to the desired value of n before calling the Delay procedure. Return the number of milliseconds that have elapsed since midnight. The return value is in the EAX register. This procedure is useful when you want to measure the time between two events such as the beginning and end of program execution. The following program illustrates the use of the above procedures: TITLE Generating random numbers and delaying execution (rand.asm) ; Testing Following Procedures in the assembly32.lib Library: ; Randomize: Seeds the random number generator with a unique value ; Random32: Generates 32-bit random integer between 0 and FFFFFFFFh ; RandomRange: Generates a random integer between 0 and n-1 ; Delay: Delay program execution for specified n milliseconds ; GetMseconds: Number of milliseconds that have elapsed since midnight.686.model flat, stdcall.stack INCLUDE Irvine32.inc.data CR EQU 0Dh ; carriage return LF EQU 0Ah ; line feed rand1 BYTE "Generating 5 pseudo-random integers ", "between 0 and FFFFFFFFh", CR, LF, 0 rand2 BYTE "Generating 5 pseudo-random integers ", "between 0 and 999", CR, LF, 0 time BYTE "Execution time in milliseconds: ",0 start DWORD? ; start execution time

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 54.code main PROC ; Get starting execution time call GetMseconds ; EAX = number of msecs since midnight mov start, eax ; save starting execution time ; Seeds the random number generator from the time of the day call Randomize ; different seed for each run ; Display message rand1 mov edx, OFFSET rand1 ; Generate 5 random integers between 0 and FFFFFFFFh. ; Put a delay between each. mov ecx,5 ; loop counter L1: mov eax, 1000 ; 1000 milliseconds call Delay ; pause for 1 second call Random32 ; EAX = random integer call WriteHex ; display ax hexadecimal integer ; advance cursor to next line Loop L1 ; Display message rand2 mov edx, OFFSET rand2 ; Generate 5 random integers between 0 and 999. ; Put a delay between each. mov ecx,5 ; loop counter L2: mov eax, 1000 ; 1000 milliseconds call Delay ; pause for 1 second mov eax,1000 ; indicate top of range + 1 call RandomRange ; EAX = random integer call WriteDec ; display as unsigned decimal ; advance cursor to next line Loop L2 ; Compute and display execution time mov edx, OFFSET time call GetMseconds ; EAX = number of msecs since midnight sub eax, start ; difference since starting time call WriteDec exit main ENDP END main 5.5.1 Lab Work: Assemble and Link Rand.asm 5.5.2 Lab Work: Run Rand.asm Run the rand.exe program from the Command Prompt twice and watch the console output. What changes need to be done to the rand.asm program to generate the same random sequence every time the program is executed?

COE 205 Lab Manual Lab 5: Input/Output using a Library of Procedures - Page 55 Review Questions 1. Which procedure in the Irvine link library displays Press [Enter] to continue? 2. Which procedure writes an integer in unsigned decimal format to standard output? 3. Which procedure generates a random integer within a selected range? 4. Which procedure places the cursor at a specific console window location? 5. What are the required input parameters for the ReadString Procedure? 6. Locate and examine the Irvine.inc file. What type of statements are inside this file? Programming Exercises 1. Write a program that uses a loop to input ten signed 32-bit integers from the user, stores the integers in an array, and redisplays the integers. 2. Write a program that displays the string Assembly Language is COOL in four different colors. Each word should be displayed in a different color of your choice. 3. Write a program that clears the screen, places the cursor near the middle of the screen, prompts the user for two integers, adds the integers, and displays their sum. 4. Write a program that generates and displays 50 random integers between -20 and +20. 5. Write a program that generates and displays twenty random strings, each consisting of ten random capital letters {A.. Z}. 6. Write a program that displays a single character * at 100 random screen locations. Use a delay of 100 milliseconds before displaying the * at the next random screen location.