Dieses Programm sollte die durchschnittlichen Noten von Studenten berechnen. Ich benutze eine Schleife für den Benutzer, um 5 Noten einzugeben. Ich habe versucht, den Div-Teil außerhalb der Schleife zu halten, aber es hat nicht funktioniert. Ich hatte es in der Schleife zu setzen, obwohl logisch nicht da macht und druckt es immer 1.Berechnung von Studenten avg mit Schleife
hier ist der Code:
include irvine32.inc
; Write a MASM program that calculates the avg grade of a student(Five grades are inputted by the user).
.data
mesg byte " *********This program calculates average grades of students *********", 0dh, 0ah, 0
mesg1 byte "Enter 5 grades: ", 0dh, 0ah, 0
mesg2 byte "The average grade is: ", 0dh, 0ah, 0
grade1 dword ?
grade2 dword ?
grade3 dword ?
grade4 dword ?
grade5 dword ?
.code
main proc
mov eax, 0
mov edx, OFFSET mesg
call writestring
mov edx, OFFSET mesg1
call writestring
mov ecx, 5
myLoop :
call readint
mov grade1, eax
call readint
mov grade2, eax
call readint
mov grade3, eax
call readint
mov grade4, eax
call readint
mov grade5, eax
add eax, grade1
add eax, grade2
add eax, grade3
add eax, grade4
mov grade5, eax
call writeint
call dumpregs
LOOP myLoop
mov edx, OFFSET mesg2
call writestring
mov eax, grade5
mov cl, 5
sub edx, edx
div cl
call writeint
call dumpregs
exit
main endp
end main
Berechnung avg, mit dem div
innerhalb der Schleife :
include irvine32.inc
; Write a MASM program that calculates the avg grade of a student(Five grades are inputted by the user).
.data
mesg byte " *********This program calculates average grades of students *********", 0dh, 0ah, 0
mesg1 byte "Enter 5 grades: ", 0dh, 0ah, 0
mesg2 byte "The average grade is: ", 0dh, 0ah, 0
grade1 dword ?
grade2 dword ?
grade3 dword ?
grade4 dword ?
grade5 dword ?
.code
main proc
mov eax, 0
mov edx, OFFSET mesg
call writestring
mov edx, OFFSET mesg1
call writestring
mov ecx, 5
myLoop:
call readint
mov grade1, eax
call readint
mov grade2, eax
call readint
mov grade3, eax
call readint
mov grade4, eax
call readint
mov grade5, eax
add eax, grade1
add eax, grade2
add eax, grade3
add eax, grade4
mov grade5, eax
call writeint
call dumpregs
mov edx, OFFSET mesg2
call writestring
mov eax, grade5
mov ebx, 5
sub edx, edx
div ebx
call writeint
call dumpregs
LOOP myLoop
exit
main endp
end main
So funktioniert es nicht * innerhalb * der Schleife, entweder. Warum brauchen Sie überhaupt eine Schleife, da Sie einen expliziten Code haben, um jede der 5 Klassen zu lesen? –
Es ist mein Professor Anweisungen –
Ich habe einen sehr starken Verdacht, Sie sollten [] verwenden, um aus dem Speicher für Note1 bis 5 zu lesen. Ich denke auch, dass Sie nur die Note1 Label verwenden und ein Register jedes Mal durch die Schleife zu lesen es als ein Array - was dein Lehrer wollte ... –