QUESTION

# MARIE Lists (35 marks) This section will ask you to prepare a MARIE program which is capable of computing the range (difference between the minimum...

2.MARIE Lists ​(35 marks)

This section will ask you to prepare a MARIE program which is capable of computing the range (difference between the minimum and maximum element) of a list of items. It is broke up into smaller steps for you below.

Most of the tasks require you to write code and test cases. The code must contain               comments and should be submitted as. mas files together with the rest of your assignment. The test cases should also be working, self-contained MARIE assembly files.

In-Class interviews: ​​You will be required to demonstrate your code to your tutor after the              submission deadline. Failure to demonstrate will lead to ​zero marks ​​being awarded for the             part 2 and 3 of this assignment.

Background - Lists of data in computer programming, quite often we have to deal with lists of numbers (or other types of data). There are different approaches to store lists in computer memory. The approach we will study here works like this: All data in the list is stored sequentially in memory, i.e. the list will occupy a contiguous block of memory. Other than list data, we also need to keep a record of list size. It will be useful whenever we have to process all the items in a list.

In a MARIE program, a list of four numbers can be defined as below. Note how we have to store size in a separate variable.

Size, Dec 4

List, Dec 2

Dec -4

Dec -1

Dec 7

Note that ADR is used to load the address of a label into another label. For example,

assuming label List ends up in memory at address 2A. Now if we want to use indirect

keyword will be helpful here, So the line ListAddr, ADR List will result in the value 2A

being placed at the label ListAddr. So now we can use an instruction like

LoadI ListAddr in order to indirectly load from the list. Try this out in the simulator to get

an idea how it works.

2.1.1 Reading in a list of integers (7 marks)

Prepare a MARIE program which first reads in a positive integer, Size (representing the

number of items which will be received) and then reads in a group of integers one item at a time until there are Size of them and stores these into memory sequentially, starting from

After entering all the value, display the list (use output).

2.1.2 ListInput Subroutine (4 marks)

Convert the above program into a subroutine called ListInput. When the main program

runs, it should call the subroutine to get size and list numbers as input from user. After

entering all the values, display the list (use output).

2.2 Finding the minimum and maximum (14 marks)

Prepare a MARIE subroutine FindMinMax which takes the size and address of a list

(ListAddr), and iterates over the list items to find (display) the minimum and maximum

value.

As a hint, you may assume the first read item is the maximum (and minimum) and then

update the maximum (or minimum) if you find any later elements exceed it (or smaller). A

pseudo code of this method is given below

let min = first_item, max = first_item, count = size

while count > 0

item = get_next_item_from_list

if (item > max)

max = item

if (item < min)

min = item

count = count - 1

end_while

In the main program, call the FindMinMax subroutine and output the minimum and

maximum values obtained respectively. For this task, hard code the list and the size of the

list, the size should be greater than 3.

2.3 Finding the range (3 marks)

Prepare a MARIE program which takes the maximum and minimum of the list of items (as

determined by your code in parts 2.2) and computes the difference between them (maximum

- minimum) and outputs them (minimum, maximum and range respectively). This is called

range in statistics.

A pseudo code of this method is given below

2.4 Bringing it all together (7 marks)

Prepare a MARIE program that gives user a choice of reading in a list or compute the range

of list. If user inputs '1', you should call ListInput subroutine. When user inputs '2' you

should use the FindMinMax subroutine to find the minimum and maximum, and to calculate

the range of the numbers. Display these 3 values on the output (minimum, maximum and

range respectively). The program will continue in an infinite loop always asking user to enter

a choice (1 or 2). If the user input '2' before '1', your program should include hard code list

with minuman of 4 items to work with.

3. ROT-10 Cipher in MARIE (10 Marks)

In this task, you will implement a variation of classical Caesar Cipher in MARIE. In this

method, a given piece of text in encrypted such that each letter is replaced by another letter

some fixed number of positions down the alphabet. We will specifically work with ROT-10,

i.e. letter 'a' is replaced by 'k' (which occurs 10 positions later) and so on, as shown below

Your program should proceed as below

- Receive the original text as input from the user letter by letter. You may wish to keep

track of size of list (as done in 2.1)

- User will indicate end of string by entering a '0' character (as Unicode input)

- Once all the input is complete, display the input data in the output (as Unicode)

- Calculate ROT-10 encryption on the data

- Only lower-case letters should be encrypted. All other characters should be left as-is.

- Display encrypted text in output in a new line

- The '0' character should not be displayed.

Note that you can switch the input box in the MARIE simulator into different modes: use the Unicode mode to enter and display the characters.

Below is an example of input text and encryption result. Note how capital letters and

numbers remain unencrypted.

Hint: All lower-case letters appear in a sequence in the Unicode/ASCII table from hex 61 to

hex 7A.