我尝试用循环编写代码,但我是这种语言的新手,我找不到如何实现它。
所以我要编写的代码是关于斐波那契数列的。
问题是我希望循环重复一些用户输入(他想打印多少个斐波那契数),但我找不到怎么做。
代码适用于 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`
它等效于 C 中的以下 for 循环:
for (i = 0; i < n; i++) {
// Your cool code here
}
如果你想要一个 do while like 循环,你只需要删除无条件跳转语句,使它成为一个退出控制循环。