帮我用Masm写一个关于输入6个学生成绩(成绩为100以内的数),成绩之间空格隔开,按Enter结束输入,最后输出结果的在masm环境下的代码
时间: 2023-11-28 08:50:51 浏览: 38
以下是使用 MASM 汇编语言编写的程序,实现输入6个学生成绩并输出结果:
```
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
.data
prompt1 db "Please input 6 student scores (separated by spaces): ", 0
prompt2 db "The average score is: ", 0
scores db 6 dup(0)
count dw 0
sum dw 0
result dd 0.0
buf db 256 dup(0)
crlf db 0dh,0ah,0
.code
main PROC
; Display prompt to input scores
mov edx, OFFSET prompt1
call WriteString
; Read input from user
mov edx, OFFSET buf
mov ecx, 256
call ReadString
; Parse input and calculate average score
xor eax, eax
xor ebx, ebx
mov esi, OFFSET buf
mov edi, OFFSET scores
mov count, 0
parse_input:
mov bl, [esi]
cmp bl, 0
je calculate_average
cmp bl, ' '
je next_score
cmp bl, '0'
jb invalid_input
cmp bl, '9'
ja invalid_input
mov al, bl
sub al, 30h
mov [edi], al
inc edi
inc count
next_score:
inc esi
jmp parse_input
invalid_input:
mov edx, OFFSET prompt1
call WriteString
jmp main
calculate_average:
mov ecx, count
mov esi, OFFSET scores
mov sum, 0
xor eax, eax
calculate_sum:
mov al, [esi]
add sum, ax
add esi, 1
loop calculate_sum
mov result, sum
fild result
fild count
fdiv
fstp result
; Display result
mov edx, OFFSET prompt2
call WriteString
mov eax, result
call WriteInt
; Exit program
invoke ExitProcess, 0
main ENDP
WriteString PROC
push ebp
mov ebp, esp
mov edx, [ebp + 8]
mov eax, 4
mov ebx, 1
mov ecx, edx
int 80h
pop ebp
ret
WriteString ENDP
ReadString PROC
push ebp
mov ebp, esp
mov edx, [ebp + 8]
mov eax, 3
mov ebx, 1
mov ecx, edx
int 80h
pop ebp
ret
ReadString ENDP
WriteInt PROC
push ebp
mov ebp, esp
mov eax, [ebp + 8]
mov ebx, 10
xor ecx, ecx
push eax
cmp eax, 0
jge convert
neg eax
mov al, '-'
call WriteChar
pop eax
convert:
convert_digit:
xor edx, edx
div ebx
push edx
inc ecx
test eax, eax
jne convert_digit
print_digit:
pop eax
add al, 30h
call WriteChar
loop print_digit
pop ebp
ret
WriteInt ENDP
WriteChar PROC
push ebp
mov ebp, esp
mov dl, [ebp + 8]
mov eax, 4
mov ebx, 1
mov ecx, edx
int 80h
pop ebp
ret
WriteChar ENDP
END main
```
运行程序后,会提示用户输入6个学生成绩,用户输入完毕后,程序会计算输入的6个成绩的平均值,并输出结果。如果用户输入的不是数字或者超出了100的范围,程序会提示用户重新输入。