在数组 x86 中添加值

Issue adding values in array x86

我正在尝试获取一个数组,添加其中的所有值,然后显示它们。不幸的是,即使构建了以下代码,输出也不会 return 我期望的值。

例如,有一次我 运行 它,我得到了

-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 之前弄清楚其余部分。

如您所暗示的,问题在于您添加的是双字而不是字节。简单的解决方案是在求和之前将字节符号扩展到临时寄存器中。那就是替换这个:

add ebp, [esi]

与:

movsx edx, byte ptr [esi]
add ebp, edx

当然打印你需要使用eax,所以把mov edx, ebp改成mov eax, ebp。或者你可以直接用它来做总结。