3

是否可以在 x86 汇编语言中创建嵌套循环?

我想将此 psedocode 转换为正确的 x86 汇编代码(使用MASM语法),但我不确定如何在此处初始化每个循环计数器。甚至可以在 x86 程序集中声明局部变量(就像在大多数其他编程语言中一样)?

for (var i = 0; i < 10; i++){
    for(var j = 0; j < 10; j++){
        for(var k = 0; k < 10; k++){
            mov eax, i + j + k;
        }
    }
}
4

1 回答 1

16

当然,这是可能的。由于每个计算机程序最终都归结为汇编 - 它自然是最强大的语言(不包括直接位操作)。

实际代码取决于您的系统、编译器和应用的优化,但基本上应该是这样的(例如 2 个嵌套循环,而不是 3 个):

           mov ecx, 0

outerLoop:

           cmp ecx, 10
           je done
           mov ebx, 0

innerLoop:
           mov eax, ecx        ; do your thing here
           add eax, ebx

           cmp ebx, 10
           je innerLoopDone
           inc ebx
           jmp innerLoop

innerLoopDone:

           inc ecx
           jmp outerLoop
done:

请注意,您不需要局部变量,您可以使用通用寄存器来满足您的需求。如果您坚持使用变量,则可以为此使用内存地址并使用寄存器指针进行读/写。

于 2013-04-14T04:24:07.020 回答