是否可以在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;
}
}
}
答案 0 :(得分:13)
当然,这是可能的。由于每个计算机程序最终归结为汇编 - 它自然是最强大的语言(不包括直接位操作)。
实际代码取决于您的系统,编译器和应用的优化,但基本上应该是这样的(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:
注意,您不需要本地变量,您可以使用通用寄存器来满足您的需要。如果您坚持使用变量,则可以使用内存地址并使用寄存器指针进行读/写。