問題- 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 にあります。
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 に答える