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

时间:2013-11-14 01:05:17

标签: loops assembly x86

我尝试用循环组装代码,但我是这种语言的新手,我找不到如何实现它。

所以我想要的代码是关于Fibonacci序列。

问题是我想要为许多用户输入重复循环 (他想要打印多少斐波纳契数字),但我找不到如何做。

代码适用于x86架构。

2 个答案:

答案 0 :(得分:0)

我没有长时间触摸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 另外我假设你已经有了获取用户输入的代码,否则需要更多的汇编代码

答案 1 :(得分:0)

如果我对你的问题的理解没有错,它会问“如何写一个循环?” 所以,这是一个基本循环的框架,它迭代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`

它等同于C中的以下for循环:

for (i = 0; i < n; i++) {
    // Your cool code here
}

如果你想要类似循环,你只需删除无条件跳转语句,使它成为一个退出控制循环。