汇编语言循环

时间:2013-10-01 17:48:42

标签: assembly x86

我遇到了一些麻烦,试图让我的循环正常工作。这就是我需要做的事情

将3添加到i1并将结果存储到i1中  将i2乘以3并将结果存储到i2

如果i1大于100则终止循环或如果以下两个都为真,则终止循环:循环超过15次迭代且i2已达到至少999999的值。

尚未完成,但我想知道是否可以在循环中使用2个CMP? 这是我到目前为止所做的:

        {
unsigned long i1;
unsigned long i2;
unsigned long i3;
unsigned long i4;
_asm
    {
    mov     i1, 1
    mov     i2, 1
    mov     eax, i1
    mov     ebx, i2
    mov     ecx, 3
Start:
    add     eax, ecx
    cmp     eax, 100
    jnz     Start
    jge     Done


Start2:
    imult   ebx, ecx
    cmp     ebx, 999999



Done:
    mov     i1, eax
    }
    cout << "results are "  << (unsigned long) i1 << ", "
                            << (unsigned long) i2 << ", "
                            << (unsigned long) i3 << ", "
                            << (unsigned long) i4 << endl;

}

1 个答案:

答案 0 :(得分:1)

你有两个不同的程序cmp(不是循环,如@harold提到的)。在cmp Start2之后,你可能想要某种跳跃,否则你只会回到Done。但是,基于999999立即,看起来这就是意图。因此,如果尚未达到该值,则可以跳回“循环”。否则,如果您达到该值,请转到Done