
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.