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架构