Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在数组x86中添加值时出现问题_Arrays_Assembly_X86_Irvine32 - Fatal编程技术网

Arrays 在数组x86中添加值时出现问题

Arrays 在数组x86中添加值时出现问题,arrays,assembly,x86,irvine32,Arrays,Assembly,X86,Irvine32,我尝试获取一个数组,添加其中的所有值,然后显示它们。不幸的是,即使生成了以下代码,输出也没有返回我期望的值 例如,有一次我运行它时 -211290202 还有一次我 -1280521519 我想这是有逻辑的,但这对我没有帮助 INCLUDE Irvine32.inc .386 .stack 4096 ExitProcess proto,dwExitCode:dword .data array SBYTE 26, -81, -104, -57 total_sum SWORD ? .code

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

例如,有一次我运行它时

-211290202

还有一次我

-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之前解决其余问题。

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

add ebp, [esi]
与:


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

你没有一个调试器可以让你单步执行代码、检查寄存器等吗?是的,我有。然而,我现在在弄清楚它时遇到了一些小问题。问问你自己,
会从
[esi]
添加多少数据到
ebp
?提示:它不是一个字节…比我的解决方案好得多,效率更高,感谢您指出我的错误(+1)。有一次我在考虑是否需要使用堆栈,尽管这会给我带来问题。谢谢你告诉我,我离我最初的想法没有那么远。
movsx edx, byte ptr [esi]
add ebp, edx