问题 - 使用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表示对于j <-k,降至零 d&lt; - (d d)%Z 如果Y1 == 1则d < - (d X)%Z结果在d中。
答案 0 :(得分:0)
似乎该算法措辞不佳,并且也向后,假设目标是重复平方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;
答案 1 :(得分:0)
我想有一个拼写错误&#34; IF Y1 ...&#34;应该是&#34;如果你...&#34;。算法也不完整,任何地方都应该有转变。以下是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;
}
如果我只知道什么&#34; Intel86模拟器&#34;是...; - )