Эта программа должна рассчитывать средние оценки студентов. Я использую цикл для ввода 5 баллов. Я пытался оставить часть div вне цикла, но это не сработало. Мне пришлось поместить его в цикл, хотя по логике этого не происходит, и он всегда печатает 1.
вот код:
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
вычисление среднего, с div
внутри цикла:
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