You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86汇编数组求和异常:预期100000h却得到A0000求助

汇编计算结果异常问题解析

问题描述

我定义了一个DWORD类型变量:var2 DWORD 10000h,20000h,30000h,40000h,对应的汇编程序如下:

.data
var2 DWORD 10000h,20000h,30000h,40000h

.code
main PROC

mov eax, 0
mov ebx, 0
mov ecx, 0
mov edx, 0
mov eax, [var2]
mov ebx, [var2+4]
mov ecx, [var2+8]
mov edx, [var2+12]
add eax,ebx
add ecx, edx
add ecx, eax


call DumpRegs

exit

main ENDP
END main

按计算逻辑10000h + 20000h + 30000h + 40000h,我预期得到100000h并存储在ECX寄存器中,但实际运行后ECX的值为A0000h。尝试更换寄存器、将结果存入变量再移入寄存器,问题仍未解决。

问题原因与解答

你的程序运行结果是正确的,问题出在你对十六进制加法的预期计算错误:

  • 十六进制中,数字10用字符A表示,因此1h+2h+3h+4h=Ah
  • 所有变量都是xxxx0000h格式,因此总和为Ah后接4个0,即A0000h

你误以为结果是100000h,是混淆了十进制与十六进制的计数规则:十进制的10对应十六进制的Ah,而非10h(十六进制10h等于十进制的16)。四个变量的总和换算为十进制是655360,对应十六进制就是A0000h,和程序运行结果完全一致。

你的代码逻辑没有问题:

  1. eax = 10000h + 20000h = 30000h
  2. ecx = 30000h + 40000h = 70000h
  3. ecx = 70000h + 30000h = A0000h

如果确实需要得到100000h,需调整变量值,例如将最后一个数改为60000h,此时10000h+20000h+30000h+60000h=100000h。

内容的提问来源于stack exchange,提问作者Akshit Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:56:52