Assembly Language

 Write an assembly language program that reads move review information from a text file and reports the overall scores for each movie as well as identifying the movie with the highest total score. There are four movie reviewers numbered from 1 to 4. They are submitting reviews for five movies, identified by the letters from “A” through “E”. Reviews are reported by using the letter identifying the movie, the review rating, which is a number from 0 to 100, and the reviewer’s identifying number. For example, to report that movie B was rated a score of 87 by reviewer 3, there will be a line in the text file that looks like this:

B,87,3

The fields within each record are separated from each other by a comma.

Your program must store the movie review scores in a two-dimensional array (4 rows by 5 columns). Each row represents a reviewer. Each column represents a movie. Initialize the array to zeroes and read the movie review information from a file. After reading and processing the whole file, display a report that shows the total score for each movie and the movie that had the highest total score.

Section 9.4 of our textbook discusses two-dimensional arrays. Section 9.4.2 discusses Base-Index Operands and even contains an example of how to calculate a row sum for a two-dimensional array.

Chapter 11 contains an example program named ReadFile.asm that will show you how to prompt the user for a file name, open a file, read its contents, and close the file when you are done. Look in section 11.1.8, Testing the File I/O Procedures.

Each record in a text file is terminated by the two characters, Carriage Return (0Dh) and Line Feed (0Ah).

Assume that you wish to process a text file named “reviews.txt” that is stored on the “C:” drive in the “Data” folder. If you are using a Windows computer, you have two ways to identify the path to the file’s location:

C:/Data/reviews.txt        OR C:\Data\reviews.txt

Double backslash characters () are needed because a single backslash is defined as being the first part of an escape sequence such as newline (n).

This code can be used to load a reviewer’s score into the array of movie reviews:

; Insert score at reviews[rowIndex][colIndex]

mov      edx,rowSize           ; row size in bytes

    mov      eax,rowIndex         ; row index

    mul      edx                   ; row index * row size

    mov      index,eax             ; save row index * row size

    mov      eax,colIndex         ; load col index

    shl      eax,2                 ; eax = colIndex * 4

    add      eax,index             ; eax contains offset

    mov      edx,score             ; edx = reviewer’s score

    mov      ebx,OFFSET reviews   ; array of review scores

    mov      [ebx + eax],edx       ; Store score for movie

Sample Data for Review.txt

D,84,2
A,90,3
A,87,4
B,35,4
B,100,1
C,75,1
D,84,1
B,87,2
A,0,2
C,25,2
D,45,3
E,35,3
A,90,1
B,100,3
C,75,3
E,35,1
C,78,4
E,35,2
D,100,4
E,0,4