Description
-
Implementing data validation
-
Implementing an accumulator
-
Integer arithmetic
-
Defining variables (integer and string)
-
Using library procedures for I/O
-
Implementing control structures (decision, loop)
Problem Definition
Write a MASM program to perform the following tasks:
Display the program title and programmer’s name.
Display instructions for the user
Repeatedly prompt the user to enter the number. Validate the user input to be in [-100, -1] (inclusive). Count and accumulate the valid user numbers until a non-negative number is entered (The non-negative number is discarded) Calculate the (rounded integer) average of the negative numbers
Display:
the number of negative numbers entered (Note: if no negative numbers were entered, display a special message and display the
goodbye message with the user’s name at the end)
the sum of negative numbers entered
the average, rounded to the nearest integer (e.g., -20.5 rounds to -21)
a goodbye message that includes the user’s name, and terminate the program.
-
The programmer’s name and the user’s name must appear in the output.
-
The main procedure must be modularized into commented logical sections (procedures are not required this time).
-
Recursive solutions are not acceptable for this assignment. This one is about iteration.
-
The program must be fully documented. This includes a complete header block for identification, description, etc., and a comment outline to explain each section of code.
-
The lower limit must be defined and used as a constant.
-
The usual requirements regarding documentation, readability, user-friendliness, etc., apply.
Notes
-
There are no new concepts in this programming assignment. It is given for extra practice, to keep MASM fresh in your mind while we study internal/external data representation and error detection/correction.
-
This is an integer program. Even though it would make more sense to use floating-point computations, you are required to do this one with integers.
Example Program Operation
Welcome to the Integer Accumulator by Austin Miller
What’s your name? Roger
Hello, Roger
Please enter numbers in [-100, -1].
Enter a non-negative number when you are finished to see results.
Enter number: -15
Enter number: -100
Enter number: -36
Enter number: -200
Invalid number, please enter numbers in [-100, -1].
Enter number: -10
Enter number: 0
You entered 4 valid numbers.
The sum of your valid numbers is -161
The rounded average is -40
Thank you for playing Integer Accumulator!
Goodbye, Roger.
(1 pt) Calculate and display the average as a floating-point number, rounded to the nearest .001.
Remember, in order to ensure you receive credit for any extra credit work, you must add one print statement to your program output PER EXTRA CREDIT which describes the extra credit you chose to work on. You will not receive extra credit points unless you do this. The statement must be formatted as follows…
–Program Intro–
**EC: DESCRIPTION
–Program prompts, etc–
Please refer back to the documentation for Program 1 to see a sample of the extra credit format.
Program 3 Rubric
Criteria |
Ratings |
|||
Files Correctly Submitted |
1 pts |
0 pts |
||
Submitted file is correct assignment and is an individual .asm file. |
||||
Full Marks |
No Marks |
|||
Program Assembles & Links |
2 pts |
0 pts |
Submitted program assembles and links without need for clarifying work for |
||
Full Marks |
No Marks |
|
TA and/or messages to the student. |
||
This assumes the program is actually an attempt at the assignment. Non- |
||
attempts which compile/link earn no points. |
||
Documentation – Identification Block – Header |
1 pts |
0 pts |
Name, Date, Program number, etc as per syllabus are included in |
||
Full Marks |
No Marks |
|
Identification Block |
||
Documentation – Identification Block – Program Description |
2 pts |
0 pts |
Description of functionality and purpose of program is included in |
||
Full Marks |
No Marks |
|
identification block. |
||
Documentation – Section Comments |
4 pts |
0 pts |
Code section headers describe functionality and implementation of |
||
Full Marks |
No Marks |
|
program flow. Should mirror the style guide image. |
||
Pts
-
pts
2 pts
-
pts
2 pts
4 pts
|
Criteria |
Ratings |
||
Documentation – In-line Comments |
1 pts |
0 pts |
||
In-line comments contribute to understanding of program flow (from section |
||||
Full Marks |
No Marks |
|||
comments) but are not line-by-line descriptions of moving memory to |
||||
registers. |
||||
Verification – Program Executes |
5 pts |
0 pts |
||
Program executes and makes some attempt at the assigned functionality. |
||||
Full Marks |
No Marks |
|||
Completeness – Displays Programmer Name |
1 pts |
0 pts |
||
Program prints out the programmer’s name. |
||||
Full Marks |
No Marks |
|||
Completeness – Gets / Uses User’s name |
2 pts |
0 pts |
||
Receives input with ReadString. Saves input in a null-terminated BYTE |
||||
Full Marks |
No Marks |
|||
array. Greets user (e.g. “Hello, Username”) |
||||
Completeness – Displays Introduction |
1 pts |
0 pts |
||
Displays program introduction. Program introduction should describe |
||||
Full Marks |
No Marks |
|||
functionality of program. |
||||
Completeness – Prompt for Input |
2 pts |
0 pts |
||
Prompts user to enter data, specifying bounds of acceptable inputs. |
||||
Full Marks |
No Marks |
|||
Pts
1 pts
-
pts
1 pts
2 pts
-
pts
2 pts
Criteria |
Ratings |
Pts |
|||||||||
Completeness – Gets data from user |
1 pts |
0 pts |
|||||||||
Utilizes ReadInt to receive user input. Saves values in appropriately-named |
|||||||||||
Full Marks |
No Marks |
1 pts |
|||||||||
identifiers for validation. |
|||||||||||
Completeness – Validates User Data |
4 pts |
2 pts |
0 pts |
||||||||
Validates that user-entered values are within the advertised limits. |
|||||||||||
Full |
Partial validation |
No |
|||||||||
Marks |
Validates only one end or neglects to check |
Marks |
4 pts |
||||||||
edge cases. |
No |
||||||||||
validation |
|||||||||||
Completeness – Displays Results (number of valid numbers, sum, and |
4 pts |
2 pts |
0 pts |
||||||||
rounded average) |
|||||||||||
Full Marks |
Partial Display |
No Marks |
|||||||||
4 pts |
|||||||||||
display a special message if no negative numbers were entered (-2 if |
|||||||||||
missed) |
|||||||||||
Completeness – Displays Closing Message |
1 pts |
0 pts |
|||||||||
1 pts |
|||||||||||
Full Marks |
No Marks |
||||||||||
Correctness – Number of Valid Numbers |
2 pts |
1 pts |
0 pts |
||||||||
Correct number of valid numbers is displayed. |
|||||||||||
Full |
Incorrect for small numbers |
No |
|||||||||
Marks |
Correct number of valid numbers for values |
Marks |
2 pts |
||||||||
greater than 2, but fails for one or more of the |
|||||||||||
following values (0, 1, 2) |
|||||||||||
Criteria |
Ratings |
Pts |
||||||||
Correctness – Calculation of rounded average is correct |
3 pts |
2 pts |
0 pts |
|||||||
Full Marks |
Calculates average but not rounded |
No Marks |
3 pts |
|||||||
Correctness – Calculation of Sum is correct |
3 pts |
0 pts |
||||||||
3 pts |
||||||||||
Full Marks |
No Marks |
|||||||||
Requirements – Solution is non-recursive |
1 pts |
0 pts |
||||||||
1 pts |
||||||||||
Full Marks |
No Marks |
|||||||||
Lower limit is defined and used as a constant |
1 pts |
0 pts |
||||||||
1 pts |
||||||||||
Full Marks |
No Marks |
|||||||||
Requirements – Well-Modularized |
4 pts |
0 pts |
||||||||
Program is divided into logical sections, separated by Section Comment |
||||||||||
Full Marks |
No Marks |
4 pts |
||||||||
blocks. |
||||||||||
Coding Style – Appropriately named identifiers |
2 pts |
1 pts |
0 pts |
|||||||
Identifiers named so that a person reading the code can intuit the purpose |
||||||||||
Full |
Partial |
No |
||||||||
of a variable, constant, or label just by reading its name. |
Marks |
Some identifiers are named well, with others |
Marks |
2 pts |
||||||
having no relevance to their functionality. |
||||||||||
Criteria |
Ratings |
Pts |
||||
Coding Style – Readabilty |
2 pts |
1 pts |
0 pts |
|||
Program uses readable white-space, indentation, and spacing as per the |
||||||
Full |
Marginally Readable |
No |
||||
Indentation Style Guide. Logical sections are separated by white space. |
Marks |
Program is marginally readable but lacks proper |
Marks |
2 pts |
||
alignment and white space. |
||||||
(1pt) Extra Credit for rounded average |
0 pts |
0 pts |
||||
Rounded average is rounded to the nearest .001. |
||||||
Full Marks |
No Marks |
0 pts |
||||
Late Penalty |
0 pts |
0 pts |
||||
Remove points here for late assignments. (Enter negative point value, 15% |
||||||
Full Marks |
No Marks |
0 pts |
||||
of ‘earned’ points per day late) |
||||||
Total Points: 50