在数组 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
。或者你可以直接用它来做总结。
我正在尝试获取一个数组,添加其中的所有值,然后显示它们。不幸的是,即使构建了以下代码,输出也不会 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
。或者你可以直接用它来做总结。