Starting from:
$35

$29

Assignment 5 Solution

*Overview*




In this assignment, you will rewrite the program you wrote in Assignment

4 using external subroutines instead of internal subroutines. There are

a few minor changes and additional steps.




------------------------------------------------------------------------




*Input*




The input to the program will be a file with an unknown number of records.




The data starts with a number of lines very much like those in the data

for Assignment 4, followed by a line containing the integer -222222222.

This number serves as a delimiter and is not part of the data. After

that are three lines each containing two integers as described below.




Use the following JCL statement to specify the input file:




//FT05F001 DD DSN=KC02314.SPRING18.CSCI360.HW5DATA,DISP=SHR




------------------------------------------------------------------------




*What needs to be done*




* Call the BUILD subroutine to read lines in the file until it find

the delimiter line. Each line contains zero or more integers. Put

the integers in the table. Do not put the delimiter value -222222222

in the table.




* After you find the line containing -222222222, read the next three

lines in the file. Each contains two small nonzero integers which we

can call D1 and H1 (first line), D2 and H2 (second line) and D3 and

H3 (third line). Store these in fullwords for now.




* In the main routine, print a heading saying something like "Table

Contents".




* Now call subroutine PRINT to print the contents of the table with 5

numbers on each line.




* In the main routine, print a heading saying something like

"Multiples of D1" (filling in the value of D1).




* Call subroutine PRINT to print a list of all of the integers which

are multiples of D1 with H1 values on each line. (The last line may

not have as many as H1 values on it.)




* Now repeat the last step with D2 and H2.




* Now repeat the last step with D3 and H3.




------------------------------------------------------------------------




*External Subroutines*




You will need several external subroutines:




* BUILD is a subroutine that will read the input file and build the

table. It will store the address of the last entry in a fullword

passed in as its second parameter.




The arguments for BUILD are:




o the address of the input buffer

o the address of the table

o the address of a fullword containing the address of the next

available entry




* PRINT is a subroutine that will print all numbers in the table that

are multiples of DIV (thus all the numbers if DIV is 1 or -1), with

HOWMANY values per line, starting on a new page and double-spaced.




The arguments for PRINT are:




o the address of the table

o the address of a fullword containing the address of the next

available entry

o the address of a fullword called DIV

o the address of a fullword called HOWMANY




The first time you call PRINT, use the values 1 and 5 for DIV and

HOWMANY. Later, those values will come from input. Before you call

PRINT, copy the values you want into DIV and HOWMANY.




There are several requirements for using an external subroutine:




* Each external subroutine is actually a separate program. You need a

_CSECT_ with the name of the subroutine, as in:




BUILD CSECT




* You need to create a _parameter list_ for the subroutine (a set of

consecutive fullwords, each containing the address of a parameter).

We did this with internal subroutines.




* You need to _call_ the subroutine, as in:




LA 1,BPARMS Parmlist for BUILD

L 15,=V(BUILD) Get the address of BUILD

BALR 14,15 Branch to BUILD




Here the BALR instruction will set register 14 = the address of the

next instruction after the BALR.




* In the subroutine, you need a _register save area_ and _standard

entry linkage_. (You should probably go read about standard entry

linkage.)




* At the end of the subroutine, you need _standard exit linkage_. (You

should probably go read about standard exit linkage.)




------------------------------------------------------------------------




*Other Requirements*




* The JCL for this assignment is the same as the JCL for Assignment 4

except the line above to specify the input file.




* You may assume that the table needs to hold no more than 80 values.

You do not need to count the numbers. Each entry is one fullword.

Initialize the table to the value -128 (as in 80F'-128').




* In the PRINT subroutine, you may assume the value of HOWMANY is

never more than 7.




* In the PRINT subroutine, examine the value of DIV. If it is 1, print

all the numbers in the table. If it is not 1, print only those

numbers which are multiples of DIV. (Actually, everthing is a

multiple of 1.)




* The first time you call PRINT, the value of DIV should be 1 and the

value of HOWMANY should be 5. The second time you call PRINT, the

value of DIV should be D1 and the value of HOWMANY should be H1. The

third time you call PRINT, use the values of D2 and H2 for DIV and

HOWMANY, respectively. You can manage this with one parameter list

containing the addresses of two fullwords, DIV and HOWMANY, and then

change the values of those fullwords as needed.




* In PRINT, double-space between lines of numbers.




* You may use register equates if you want, but it is not required.




* You may use extended mnemonics such as BH, BL, BNE, etc. for branch

instructions.




* Document your program as usual and submit it through Blackboard as

usual.

More products