【发布时间】:2020-12-29 20:28:36
【问题描述】:
编写一个完整的汇编程序来读取 8 位数字,每个数字与键盘之间用一个空格分隔(使用单键输入功能)。将它们从字符转换为数字,计算平均分、最低分和最高分并显示在屏幕上。
提示:从每个字符中减去
30h以获得实际数字。在显示之前,将30h添加到每个数字。对于除法运算,请使用适当的移位指令。
平均显示错误的答案!我哪里做错了?请帮助我理解 SRH 指令的划分。
Include emu8086.inc
.model small
.stack 100h
.data
.code
mov bh,0
mov bl,9
mov ah,1
mov dh,0
mov cx,0
input:
int 21H
putc 20h
sub al,30h
inc cx
add dh,al
cmp al,bh
JA _max
cmp al,bl
JB _min
cmp cx,8
JB input
print:
mov ah,2
printn
mov dl,bh
add dl,30h
printn "Max: "
int 21h
printn
mov dl,bl
add dl,30h
printn "Min: "
int 21h
AND dh, 0FH
mov Cl,3
shr dh,cl
or dh,30H
printn
mov dl,dh
printn "Avg: "
int 21h
exit:
mov ah,4ch
int 21h
_max:
mov bh,al
cmp al,bl
JB _min
cmp cx,8
jae print
jb input
_min:
mov bl,al
cmp cx,10
jae print
jb input
【问题讨论】:
-
这是
SHR而不是SRH,但这在代码中很好。是的,你可以像这样除以 8。问题是你应该除以总和。此外,总和不应被屏蔽为 4 位。
标签: assembly dos x86-16 emu8086