【发布时间】:2013-11-14 01:05:16
【问题描述】:
我尝试使用循环在汇编中编写代码,但我是这种语言的新手,我不知道如何实现它。
所以我要编写的代码是关于斐波那契数列的。
问题是我希望循环重复一些用户输入 (他想打印多少个斐波那契数字)但我找不到怎么做。
代码适用于 x86 架构。
【问题讨论】:
-
你想在什么架构下编写汇编代码?
-
哦,是的,我忘了.. 它的 x86 架构
我尝试使用循环在汇编中编写代码,但我是这种语言的新手,我不知道如何实现它。
所以我要编写的代码是关于斐波那契数列的。
问题是我希望循环重复一些用户输入 (他想打印多少个斐波那契数字)但我找不到怎么做。
代码适用于 x86 架构。
【问题讨论】:
如果我对您的问题的理解没有错,它会询问“如何编写循环?”
所以,这是一个基本循环的框架,它迭代 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循环,你只需要去掉无条件跳转语句,让它变成一个退出控制循环。
【讨论】:
我很久没有接触 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 另外我假设您已经拥有获取用户输入的代码,否则需要更多的汇编代码
【讨论】: