Loops 如何为用户输入编号重复组装循环

Loops 如何为用户输入编号重复组装循环,loops,assembly,x86,Loops,Assembly,X86,我尝试用循环在汇编中生成代码,但我对这种语言还不熟悉,我找不到如何实现它 我要做的代码是关于斐波那契序列的 问题是,我希望对许多用户输入重复循环 (他想打印多少斐波那契数字)但我找不到方法。 代码是针对x86体系结构的。我已经很长时间没有接触x86汇编程序了,但是下面的代码应该可以工作 label: movl $3, %ecx // put 3 into ecx register // your code decl %ecx // decrement value in ecx

我尝试用循环在汇编中生成代码,但我对这种语言还不熟悉,我找不到如何实现它

我要做的代码是关于斐波那契序列的

问题是,我希望对许多用户输入重复循环 (他想打印多少斐波那契数字)但我找不到方法。


代码是针对x86体系结构的。

我已经很长时间没有接触x86汇编程序了,但是下面的代码应该可以工作

label:

movl $3, %ecx  // put 3 into ecx register

// your code

decl %ecx      // decrement value in ecx register
jnz label      // loop back to label if ecx register is not zero
显然,您会将用户输入的数字存储在ecx寄存器中,而不是3
另外,我假设您已经有了获取用户输入的代码,否则需要更多的汇编代码

如果我对您的问题的理解没有错,它会问“如何编写循环?”
因此,这里是一个基本循环的框架,它迭代
n次…

假设您已从用户处接受
n
,并将其存储到
-4(%ebp)

            movl    $0,    -8(%ebp)            # Let's say index i is at -8(%ebp)
            jmp condition                      # unconditional jump for entry-control loop.
for:                                           # Body of the loop
            # Your cool code here...

            addl    $1,    -8(%ebp)            # i++

condition:
            movl    -4(%ebp),    %eax          # Move n into eax
            cmpl    %eax,        -8(%ebp)      # Compare i with eax
            jl      for                        # if i < n jump to the label `for`
movl$0,-8(%ebp)#假设索引i位于-8(%ebp)
jmp条件#入口控制循环的无条件跳转。
for:#循环体
#你的酷代码在这里。。。
加1美元-8%(ebp)#i++
条件:
movl-4(%ebp),%eax#将n移动到eax
cmpl%eax,-8%(ebp)#将i与eax进行比较
jl for#如果我
对于C中的以下for循环,它等效于:

for (i = 0; i < n; i++) {
    // Your cool code here
}
(i=0;i{ //你的酷代码在这里 }

如果你想要一个类似do-while的循环,你只需要删除无条件跳转语句,这样它就会变成一个退出控制循环。

你想在什么体系结构中编写汇编代码?哦,是的,我忘了。。它的x86架构