義守大學電機系

授課教師:陳慶瀚

E-mail : pierre@isu.edu.tw   

11. ALU Simulator(ALU模擬器)

 

1. 設計一個N位元的ALU,成員變數包含A,B兩個輸入暫存器和輸出的ACC累加暫存器:

class ALU

{

public :

   int *A,*B,*ACC;

   int N;

}

設計一個成員函式

   void Initialize( int num_bits)

對N進行初始化以及配置A,B,ACC的動態記憶體。

以及

   void Display( )

可在螢幕顯示ACC的位元內容。

 

2. 設計三個成員函式

   void Clear()

   void Set()

   void Randomize()

可設定累加暫存器ACC的初值。Clear()將ACC所有位元設為0,Set()將ACC所有位元設為1,Randomize()則是以亂數隨機設定ACC每一個位元值為0或1,例如:

   ACC[i]=rand()%2

參考範例程式alu.cpp

3. 設計一個成員函式

 void Load(long x)

可讓使用者傳入一個長整數x,將其轉為二進位後填入ACC。

參考範例程式

#include <iostream.h>
void main()
{
   int x;
   cin>>x;
   int y,r;
   while(1)
   {
      y=x/2;
      r=x%2;
      cout<<r;
      if(y==0)break;
      x=y;
   }
}

成員函式範例

 

4.設計一個成員函式

 long getDecimal()

ACC的二進位內容轉為十進位後傳回

參考範例程式

#include <iostream.h>
#include <math.h>
void main()
{
   int ACC[4]={0,0,0,1};
   int i,X=0;
   for(i=0;i<4;i++)
   {
      if(ACC[i]==1)

      {

         X=X+pow(2,i);
      }

   }
   cout<<X<<endl;
}

成員函式範例

 

5.設計以下邏輯運算的成員函式:

   void and(int *a)

   void or(int *a)

   void xor(int *a)

   void not( )

除了not( )之外,其他成員函式都需要傳入一個二值陣列,再與ACC的資料執行邏輯運算。

 

6. 設計以下位元移位的成員函式:

   void ShiftL(int num)

   void ShiftR(int num)

分別將ACC的位元值向左(右)移num個位元

 

7. 模擬二進位的加法設計一個成員函式(加設所有資料均為正整數)

   void ADD(int *a )

 

 

 

 


計算機程式

義守大學電機系 陳慶瀚
2004.10. 20更新