2015-04-28 38 views
-5

問題 - 使用Intel86模擬器,給定的3個1字節數X,Y和Z (1<X,Y,Z<100), 編寫計算模冪運算 X ^ý模Z(實施例的代碼,X = 4,Y = 3,Z = 5結果= 4)。 X,Y和Z在 存儲位置107H,108H和109H你的程序中找到,所以請確保你 不使用這些字節的指示。計算結果 必須存儲在DL中。用於計算 的算法代碼模冪的模數爲:d,1。假設Y是由比特Yk,Yk-1,Yk-2,... Y0表示的 ,對於j < -k低至零 d <-(d d)%Z 如果Y1 == 1則d < - (d X)%Z結果在d中。任何人都能理解這些指令的要求,並知道如何在彙編中編寫這些指令?

+1

如果你不明白你的任務,你應該跟你的導師關於它。 [所以]不是免費完成作業的地方。 –

+0

考慮訪問http://stackoverflow.com/tour,瞭解SO的工作原理。 – brodoll

+0

只需詢問某人是否可以比我的「導師」更好地將這個問題轉化爲我。 – Ian

回答

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; 
0

我想有一個錯字「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模擬器」是... ;-)