【发布时间】:2016-05-10 18:56:42
【问题描述】:
这个程序应该计算学生的平均成绩。 我正在使用循环让用户输入 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
【问题讨论】:
-
所以它在inside循环中也不起作用。为什么你需要一个循环,因为你有明确的代码来读取 5 个等级中的每一个?
-
这是我教授的指示
-
我非常怀疑您应该使用 [] 从内存中读取 1 到 5 年级。我还觉得您应该只使用第 1 级标签并在每次循环中增加一个寄存器将其作为数组读入 - 这是您的讲师想要的......
-
@MichaelDorgan 非常感谢,迈克尔!我实际上会按照你的指示使用数组,因为我正在考虑它,但我不知道为什么教授要求不要使用数组,但我会做逻辑并提交。感谢收获!
-
如果您只需要计算平均值,则不需要数组:一旦您将输入的数字添加到总和中(您可以在阅读后立即执行),您不需要不再需要它了。
标签: assembly masm irvine32 masm32