任何人都明白这些说明是什么,并知道如何在汇编中写这个?

时间:2015-04-28 01:07:18

标签: assembly intel computer-architecture modular-arithmetic

  

问题 - 使用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中。

2 个答案:

答案 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;是...; - )