汇编语言一个简单小程序,调试通过,但是中途结束出错,请高手帮忙解答修正!!!

[复制链接]
查看11 | 回复2 | 2021-1-27 06:05:17 | 显示全部楼层 |阅读模式
要求,计算成绩总分和平均分
键入4个学生成绩,计算总成绩和平均分
我的程序已经写好,总分sum可以算出,但是到平均分average,却运行不出来,直接出错,程序可以编译成功,可以运行,只是到输出average的时候系统就直接跳出关闭,点了就没有了

.386
.MODELFLAT
ExitProcessPROTONEAR32stdcall,dwExitCode:DWORD
INCLUDEio.h
crEQU0dh
LfEQU0ah
.STACK4096
.DATA
number1DWORD?
number2DWORD?
number3DWORD?
number4DWORD?
prompt1BYTE"Thisprogramwillcalculationresultsofthetotalscoreandaverage",cr,Lf,Lf
BYTE"Now,youcanenterthescoresoffourstudents",cr,Lf,Lf
BYTE"Enterfirstscore:",0
prompt2BYTE"Entersecondscore:",0
prompt3BYTE"Enterthirdscore:",0
prompt4BYTE"Enterforthscore:",0
stringBYTE40DUP(?)
label1BYTEcr,Lf,"Thesumis:"
sumBYTE10DUP(?)
BYTEcr,Lf,0
AnswerBYTEcr,Lf,"Theaverageis:"
averageBYTE20DUP(?)
BYTEcr,Lf,0
.CODE
_start:
outputprompt1
inputstring,40
atodstring
movnumber1,eax

outputprompt2
inputstring,40
atodstring
movnumber2,eax

outputprompt3
inputstring,40
atodstring
movnumber3,eax

outputprompt4
inputstring,40
atodstring
movnumber4,eax

moveax,number1
addeax,number2
addeax,number3
addeax,number4
dtoasum,eax
outputlabel1
atodsum
movebx,4
cwd
idivebx
dtoaaverage,eax
outputAnswer
INVOKEExitProcess,0
PUBLIC_start
END
错误信息就是一个窗口
说您的text.exe已经停止工作
出现了一个问题,导致程序停止正常工作。如果有可能的解决方案,Windows将关闭程序并通知您。
调试关闭程序
注:我的asm文件用的是text文件名称,不影响,所以exe也是text文件名
然后,就是运行可以运行
输入四个成绩之后
总成绩sum已经能够算出来
但是平均分abverage却不能算出来,紧接着就出现了那个窗口
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
除数4不应用ebx,更不应该用cwd。cwd应该是对被除数用
回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
cwd是针对word转dword来使用的,你的应该是cdq。32为转为64位的,即eax->edx.eax
不明白再问。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行