我有这段短代码,其目的是求和负值并计算正数,向量初始化其他地方
;sum all negative values and count positive values
;let eax hold sum and ebx hold number of positives
CALL crlf
mov ecx, VectorSize
mov eax, 0
mov ebx, 0
mov edx, 0
sumMe:
cmp Vector[edx * TYPE Vector], 0
jge pos
;neg
add eax, Vector[edx * TYPE Vector]
INC edx
loop sumMe
pos:
INC ebx
INC edx
loop sumMe
这段代码正常工作,除非负值是数组中的最后一个值,即使像-1 -1 -1 -1 5
这样的东西也可以。但是,如果我在最后一个位置有一个负值,程序崩溃。
任何帮助将不胜感激
答案 0 :(得分:3)
假设最后有ret
或其他东西:
当ecx达到零时loop
做什么:执行失败。如果最后一个元素为负数,则loop
指令使ecx
为零后跟pos:
。
当loop
与ecx=0
一起开始运行时,ecx
换行到0xFFFFFFFF
并跳转。 loop
就像do{}while(--ecx);
的底部。
如果您使用调试器单步执行最后一次迭代,那么所有这些都是显而易见的,因为您已经知道问题出现在具有负元素的数组的末尾。