问题- 使用 Intel86 模拟器,给定三个单字节数字 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 For j <-- k 到零 d <-- (d d) % Z IF Y1 == 1 then d <-- (d X) % Z 结果在 d 中。
问问题
50 次
2 回答
1
似乎该算法措辞不佳,而且也是倒退的,假设目标是反复平方 X mod Z 以加快该过程。
R = 1;
goto loop1;
loop0:
if(Y & 1) /* if least signficant bit of Y is set */
R = (R * X) % Z;
X = (X * X) % Z
Y = (Y >> 1) /* logical (unsigned) shift right) */
loop1:
if(Y != 0)
goto loop0;
DL = R;
于 2015-04-28T02:32:56.453 回答
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 回答