簡體   English   中英

確定整數是否是匯編中的完全平方數 (mips32)

[英]Determining if an integer is a perfect square in assembly (mips32)

我知道如何在 c 中做到這一點。 計算平方根,取平方根的模數 10。 如果模數為 0,則它是一個完美的正方形。

但是我怎么能在匯編中做到這一點,因為我不能在其中做平方根。 有更容易的方法嗎?

你看過牛頓法嗎?

http://en.wikipedia.org/wiki/Newton 's_method

和 mips 中的浮點寄存器

http://en.wikipedia.org/wiki/MIPS_architecture#Floating_point

和另一個類似的線程

在 MIPS 程序集上查找整數的平方根

您是否嘗試過自己進行任何編碼? 你的裝配水平是多少?

謝謝。

是的,你可以在組裝中做平方根。 浮點數的平方根,即。 如果您的 MIPS CPU 支持浮點指令(現在大多數都支持),它就有 SQRT.D 命令(double 的平方根)。

如果您需要有關算法其余部分的幫助,例如將通用寄存器復制到浮點寄存器,將整數轉換為浮點並返回,FP 算法,請說出來。

可以用C或C++實現,然后查看反匯編。

為了有效地做到這一點,我建議使用迭代二進制搜索:

int isSquare(unsigned int num)
{
    unsigned int lo = 0;
    unsigned int hi = num;
    do
    {
        unsigned int mid = (hi+lo)/2;
        unsigned int square0 = mid*mid;
        unsigned int square1 = (mid+1)*(mid+1);
        if (num == square0 || num == square1)
            return 1;
        if (num < square0)
            hi = mid;
        else // if (num > square1)
            lo = mid;
    }
    while (lo+1 < hi);
    return 0;
}

請注意,此函數的任何輸入都不能大於2^(num_of_bits_per_int/2+1)-3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM