【问题标题】:How to make assembly loop repeated for user input number如何为用户输入数字重复组装循环
【发布时间】:2013-11-14 01:05:16
【问题描述】:

我尝试使用循环在汇编中编写代码,但我是这种语言的新手,我不知道如何实现它。

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

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

代码适用于 x86 架构。

【问题讨论】:

  • 你想在什么架构下编写汇编代码?
  • 哦,是的,我忘了.. 它的 x86 架构

标签: loops assembly x86


【解决方案1】:

如果我对您的问题的理解没有错,它会询问“如何编写循环?”
所以,这是一个基本循环的框架,它迭代 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循环,你只需要去掉无条件跳转语句,让它变成一个退出控制循环。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多