-2

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

所以我要编写的代码是关于斐波那契数列的。

问题是我希望循环重复一些用户输入(他想打印多少个斐波那契数),但我找不到怎么做。

代码适用于 x86 架构。

4

2 回答 2

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 我假设您已经拥有获取用户输入的代码,否则需要更多的汇编代码

于 2013-11-14T01:49:07.720 回答
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
}

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

于 2013-11-14T05:39:54.200 回答