我正在尝试获取一个数组,添加其中的所有值,然后显示它们。不幸的是,即使构建了以下代码,输出也不会返回我期望的值。
例如,有一次我跑了它,我得到了
-2112902102
还有一次我得到了
-1280521519
我假设有某种逻辑,但它并没有完全帮助我。
INCLUDE Irvine32.inc
.386
.stack 4096
ExitProcess proto,dwExitCode:dword
.data
array SBYTE 26, -81, -104, -57
total_sum SWORD ?
.code
main proc
mov esi, OFFSET array
mov ecx, LENGTHOF array
mov total_sum, 0
mov ebp,0
L1:
add ebp, [esi]
inc esi
loop L1
mov edx, ebp
call WriteInt
invoke ExitProcess,0
main endp
end main
是的,我知道total_sum在这一点上没有做任何事情,但我首先要在实现total_sum之前计算出其余部分。
答案 0 :(得分:1)
正如您所暗示的,问题是您添加了dwords而不是字节。简单的解决方案是在求和之前将字节扩展到临时寄存器。那就取代了这个:
add ebp, [esi]
使用:
movsx edx, byte ptr [esi]
add ebp, edx
当然,对于打印,您需要使用eax
,因此请将mov edx, ebp
更改为mov eax, ebp
。或者您可以直接使用它来进行总结。