-5

問題- Intel86 シミュレーターを使用して、3 つの 1 バイト数値 X、Y、および Z (1<X,Y,Z<100)を指定して、モジュラーべき乗 X^y mod Z を計算するコードを記述します (例、X=4、Y=3、Z=5 結果 = 4)。 . X、Y、および Z は、プログラムのメモリ位置 107H、108H、および 109H にあるため、これらのバイトを命令に使用しないように注意してください。計算の結果は DL に保存する必要があります。べき乗剰余 X^y mod Z の計算に使用するアルゴリズム コードは d,1 です。Y がビット Yk、Yk-1、Yk-2、...Y0 で表されると仮定します j <-- k がゼロまで d <-- (d d) % Z IF Y1 == 1 then d <-- (d X) % Z 結果は d にあります。

4

2 に答える 2

1

「IF Y1 ...」が「IF Yj ...」になるはずのタイプミスがあると思います。また、アルゴリズムは不完全です。どこかにシフトがあるはずです。C のアルゴリズムの例を次に示します。

#include <stdio.h>
int main (void)
{
    unsigned char X = 4, Y = 3, Z = 5;

    printf("(%d ^ %d) %% %d = ",X,Y,Z);

    unsigned int d = 1;
    for (int j=7; j>=0; --j)
    {
        d = (d*d) % Z;
        if (Y & 0x80)           // leftest bit (Yj) set?
        {
            d = (d * X) % Z;
        }
        Y <<= 1;
    }

    printf("%d\n", d);

    return 0;
}

「Intel86シミュレーター」が何であるかさえ知っていれば... ;-)

于 2015-04-28T17:18:31.143 に答える