问题在数组x86

时间:2016-11-15 17:35:24

标签: arrays assembly x86 irvine32

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

例如,有一次我跑了它,我得到了

  

-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之前计算出其余部分。

1 个答案:

答案 0 :(得分:1)

正如您所暗示的,问题是您添加了dwords而不是字节。简单的解决方案是在求和之前将字节扩展到临时寄存器。那就取代了这个:

add ebp, [esi]

使用:

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

当然,对于打印,您需要使用eax,因此请将mov edx, ebp更改为mov eax, ebp。或者您可以直接使用它来进行总结。