80.1k views
2 votes
In a masm program I have to calculate an average grade of 4 tests, the array values are already declared so no inputs are needed. How do I do that without needing a loop since I’m not allowed to

User TomaszKane
by
8.1k points

1 Answer

3 votes


\bf \red {Answer}

If you're not allowed to use a loop, one way to calculate the average grade of 4 tests is to add up all the values in the array and then divide by 4. Here's an example MASM program that does this:

```

.586

.model flat,stdcall

.stack 4096

ExitProcess PROTO,dwExitCode:DWORD

.data

tests DWORD 80, 90, 85, 95

numTests DWORD 4

average DWORD ?

.code

main PROC

; Calculate the sum of all test scores

mov eax, 0

add eax, tests[0]

add eax, tests[4]

add eax, tests[8]

add eax, tests[12]

; Divide sum by 4 to get average

mov ebx, numTests

cdq

idiv ebx

mov average, eax

; Display the average

mov eax, average

call DumpRegs ; Replace with your own code to display the average

; Exit the program

INVOKE ExitProcess,0

main ENDP

END main

```

The program declares an array `tests` with 4 values, a variable `numTests` with the number of tests (4), and a variable `average` to store the calculated average grade. It then calculates the sum of all test scores by adding up the values in the array using the `add` instruction. It divides the sum by 4 to get the average using the `idiv` instruction, which divides the double-word in `edx:eax` by the value in `ebx`, storing the quotient in `eax` and the remainder in `edx`. It stores the calculated average in the `average` variable and displays it using `DumpRegs`. Finally, it exits the program using the `ExitProcess` function.

Note that this program assumes that the array `tests` contains exactly 4 values. If you have a different number of values or if the number of values can vary, you will need to modify the program accordingly.

User Otis Wright
by
8.3k points