MASM+Irvine汇编实现商品单价乘数量求和结果错误问题求助
问题排查结果
你的代码存在两处核心逻辑错误:
- 乘积结果读取错误:32位乘法指令
mul ebx执行后,乘积的低32位存储在eax寄存器,高32位存储在edx寄存器,原代码错误地从存储单价的ebx寄存器取值,无法拿到正确的商品总价。 - 未做累加操作:每次计算完单个商品总价后,你直接用
mov subTotal, xxx覆盖了subTotal的原值,没有把当前商品总价累加到总金额中,最终subTotal只会存储最后一个计算的商品总价。
修正后的计算逻辑
替换你原代码中计算小计的部分即可:
;## Display Sub Total ## lea edx, msg31 call writeString lea edx, msg32 call writeString ; 先将总金额初始化为0 mov subTotal, 0 mov eax, Oxfordquantity mov ebx, Oxford mul ebx add subTotal, eax ; 累加当前商品总价到总金额 mov eax, Derbyquantity mov ebx, Derby mul ebx add subTotal, eax mov eax, Blucherquantity mov ebx, Blucher mul ebx add subTotal, eax mov eax, ChelseaBootquantity mov ebx, ChelseaBoot mul ebx add subTotal, eax mov eax, Loaferquantity mov ebx, Loafer mul ebx add subTotal, eax mov eax, Broguesquantity mov ebx, Brogues mul ebx add subTotal, eax ; 输出最终总金额 mov eax, subTotal call WriteDec
修改后即可正确计算累加值,你所描述的测试场景将输出预期的17330结果。
内容的提问来源于stack exchange,提问作者Annonymous1
相关产品推荐
相关产品推荐

