如果最后一个数组值为负

时间:2018-02-09 03:22:02

标签: assembly masm irvine32

我有这段短代码,其目的是求和负值并计算正数,向量初始化其他地方

;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这样的东西也可以。但是,如果我在最后一个位置有一个负值,程序崩溃。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:3)

假设最后有ret或其他东西:

当ecx达到零时loop做什么:执行失败。如果最后一个元素为负数,则loop指令使ecx为零后跟pos:

loopecx=0一起开始运行时,ecx换行到0xFFFFFFFF并跳转。 loop就像do{}while(--ecx);的底部。

如果您使用调试器单步执行最后一次迭代,那么所有这些都是显而易见的,因为您已经知道问题出现在具有负元素的数组的末尾。