微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在程序集x86中计算LCM

如何解决在程序集x86中计算LCM

我有以下汇编代码

.global _start

.section .text
_start:
    movq a,%rax
    movq b,%rbx
    imul %rbx,%rax
    cmp %rbx,%rax
    je gcd_calculated
    ja l1
    sub %rax,%rbx
    jmp _start
l1:
    sub %rbx,%rax
    jmp _start
gcd_calculated:
    div %rax
    movq %rax,(c)
    

a,b是四边形,我需要计算它们的lcm,我需要将结果分配给c

上面的代码我得到错误的结果,我找不到原因。

通常,我中继lcm = (a*b)/gcd,因此我将a * b存储在%rax中,然后计算gcd,它将存储在%eax中,最后在它们之间进行划分。

解决方法

就像1201ProgramAlarm所说,您正在计算和比较循环的每次迭代中ab的原始值。如果要遵循当前的方法,则每次循环之前都必须将这些值存储在内存中。

实际上,我要做的只是先进行gcd计算,然后最后计算(a*b)/gcd

_start:
    movq a(%rip),%rbx
    movq b(%rip),%rcx
gcd:
    cmp %rbx,%rcx
    je gcd_calculated
    ja l1
    sub %rcx,%rbx
    jmp gcd
l1:
    sub %rbx,%rcx
    jmp gcd
gcd_calculated:
    movq a(%rip),%rax
    xor %rdx,%rdx
    div %rbx
    imul b(%rip),%rax
    movq %rax,c(%rip)
,
App\Entities\Category {#2114 ▼
  ...
  #attributes: array:11 [▶]
  #original: array:11 [▶]
  ...
  #relations: array:1 [▼
    "childrenCategories" => Illuminate\Database\Eloquent\Collection {#2118 ▼
      #items: array:4 [▼
        0 => App\Entities\Category {#2133 ▶}
        1 => App\Entities\Category {#2134 ▶}
        2 => App\Entities\Category {#2135 ▼
          ...
          #attributes: array:11 [▶]
          #original: array:11 [▶]
          ...
          #relations: array:1 [▼
            "categories" => Illuminate\Database\Eloquent\Collection {#2138 ▼
              #items: array:1 [▼
                0 => App\Entities\Category {#2157 ▼
                  ...
                  #attributes: array:11 [▶]
                  #original: array:11 [▶]
                  ...
                  #relations: []
                  ...
                }
              ]
            }
          ]
          ...
        }
        3 => App\Entities\Category {#2136 ▶}
      ]
    }
  ]
  ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。