?? alu.cpp
字號:
#include "iostream.h"
//#include "stdafx.h"
//using namespace std;
int C=0,Z=0,V=0,S=0;
int y[16]={0};
int SST,SSH,SCI,i8_6,i5_3,i2_0;
int q[16]={0},port[16][16]={0};
int f[16]={0};
int a=0,b=0;
int i[9]={0};
int r[16]={0},s[16]={0};
int ctemp=0,cyr=0,ov=0,f15=0,zr=0;
int c_r=0,c_l=0;
int sum;
int c0;
void move()
{
switch(SSH)
{
case 0:if(i8_6==5)port[b][0]=false;
else if(i8_6==7)port[b][15]=false;break;
case 1:if(i8_6==5)port[b][0]=C;
else if(i8_6==7)port[b][15]=C;break;
case 2:if(i8_6==4){port[b][0]=f[15];q[0]=port[b][15];}
else if(i8_6==6){port[b][15]=q[0];q[15]=f[0];}break;
case 3:if(i8_6==4){port[b][0]=f[0];q[0]=port[b][15];}break;
}
}
int Cal(int *d,int *cntl)
{
int sst[3],ssh[2],sci[2];
int m;
for(m=0;m<=8;m++)
{
if(cntl[m]==0) i[8-m]=0;
else i[8-m]=1;
}
for(m=9;m<=11;m++)
{
if(cntl[m]==0) sst[11-m]=0;
else sst[11-m]=1;
}
if(cntl[12]==0) sci[1]=0;else sci[1]=1;
if(cntl[13]==0) sci[0]=0;else sci[0]=1;
if(cntl[14]==0) ssh[1]=0;else ssh[1]=1;
if(cntl[15]==0) ssh[0]=0;else ssh[0]=1;
a=cntl[16]*8+cntl[17]*4+cntl[18]*2+cntl[19];
b=cntl[20]*8+cntl[21]*4+cntl[22]*2+cntl[23];//處理數據
SST = sst[2]*4+sst[1]*2+sst[0];
SSH = ssh[1]*2+ssh[0];
SCI = sci[1]*2+sci[0];
i8_6 = i[8]*4+i[7]*2+i[6];
i5_3 = i[5]*4+i[4]*2+i[3];
i2_0 = i[2]*4+i[1]*2+i[0];
int cin;
switch(SCI)
{
case 0:cin=0;break;
case 1:cin=1;break;
case 2:cin=C;break;
case 3:cin=c0;break;
}
int k;
switch(i2_0)
{
case 0:for(k=0;k<=15;k++)
{
r[k]=port[a][k];s[k]=q[k];
}break;
case 1:for(k=0;k<=15;k++)
{
r[k]=port[a][k];s[k]=port[b][k];
}break;
case 2:for(k=0;k<=15;k++)
{
r[k]=0;s[k]=q[k];
}break;
case 3:for(k=0;k<=15;k++)
{
r[k]=0;s[k]=port[b][k];
}break;
case 4:for(k=0;k<=15;k++)
{
r[k]=0;s[k]=port[a][k];
}break;
case 5:for(k=0;k<=15;k++)
{
r[k]=d[k];s[k]=port[a][k];
}break;
case 6:for(k=0;k<=15;k++)
{
r[k]=d[k];s[k]=q[k];
}break;
case 7:for(k=0;k<=15;k++)
{
r[k]=d[k];s[k]=0;
}break;
}
sum=0;
switch(i5_3)
{
case 0:
for(k=15;k>=0;k--)
{
ctemp=cin;
f[k]=r[k]+s[k]+cin;
if(f[k]>=2)
{
f[k]=f[k]-2;cin=1;
}
else cin =0;
if(k==3) c0=cin;
}
cyr=cin;
if(ctemp==cin) ov=0;
else ov=1;
f15=f[0];
for(k=0;k<16;k++) sum+=f[k];
if(sum==0) zr=1;
else zr=0;break;
case 1:f[15]=s[15]-r[15]-(1-cin);
if(f[15]<0){ f[15]=f[15]+2;cin=1;}
else cin=0;
for(k=14;k>=0;k--)
{
ctemp=cin;
f[k]=s[k]-r[k]-cin;
if(f[k]<0){ f[k]=f[k]+2;cin=1;}
else cin=0;
if(k==3) c0=cin;
}
cyr=1-cin;
if(cin==ctemp) ov=0;
else ov=1;
f15=f[0];
for(k=0;k<16;k++) sum+=f[k];
if(sum==0) zr=1;
else zr=0;break;
case 2:f[15]=r[15]-s[15]-(1-cin);
if(f[15]<0){ f[15]=f[15]+2;cin=1;}
else cin=0;
for(k=14;k>=0;k--)
{
ctemp=cin;
f[k]=r[k]-s[k]-cin;
if(f[k]<0){ f[k]=f[k]+2;cin=1;}
else cin=0;
if(k==3) c0=cin;
}
cyr=1-cin;
if(cin==ctemp) ov=0;
else ov=1;
f15=f[0];
for(k=0;k<16;k++) sum+=f[k];
if(sum==0) zr=1;
else zr=0;break;
case 3:for(k=15;k>=0;k--)
{
f[k]=r[k]|s[k];
}
ov=0;
cyr=0;
f15=f[0];
for(k=0;k<16;k++) sum+=f[k];
if(sum==0) zr=1;
else zr=0;
break;
case 4:for(k=15;k>=0;k--)
{
f[k]=r[k]&s[k];
}
ov=0;
cyr=0;
f15=f[0];
for(k=0;k<16;k++) sum+=f[k];
if(sum==0) zr=1;
else zr=0;break;
case 5:for(k=15;k>=0;k--)
{
f[k]=(~r[k])&s[k];
}
ov=0;
cyr=0;
f15=f[0];
for(k=0;k<16;k++) sum+=f[k];
if(sum==0) zr=1;
else zr=0;break;
case 6:for(k=15;k>=0;k--)
{
f[k]=r[k]^s[k];
}
ov=0;
cyr=0;
f15=f[0];
for(k=0;k<16;k++) sum+=f[k];
if(sum==0) zr=1;
else zr=0;break;
case 7:for(k=15;k>=0;k--)
{
f[k]=!(r[k]^s[k]);
}
ov=0;
cyr=0;
f15=f[0];
for(k=0;k<16;k++) sum+=f[k];
if(sum==0) zr=1;
else zr=0;break;
}
switch(i8_6)
{
case 0:for(k=0;k<=15;k++)
{
q[k]=f[k];y[k]=f[k];
}break;
case 1:for(k=0;k<=15;k++)
{
y[k]=f[k];
}break;
case 2:for(k=0;k<=15;k++)
{
port[b][k]=f[k];y[k]=port[a][k];
}break;
case 3:for(k=0;k<=15;k++)
{
port[b][k]=f[k];y[k]=f[k];
}break;
case 4:c_r=q[15];
for(k=15;k>0;k--)
{
port[b][k]=f[k-1];
q[k]=q[k-1];y[k]=f[k];
}
y[0]=f[0];
move();break;
case 5:c_r=port[b][15];
for(k=15;k>0;k--)
{
port[b][k]=f[k-1];y[k]=f[k];
}
y[0]=f[0];
move();break;
case 6:c_l=port[b][0];
for(k=0;k<15;k++)
{
port[b][k]=f[k+1];
q[k]=q[k+1];
y[k]=f[k];
}
y[15]=f[15];
move();
break;
case 7:c_l=port[b][0];
for(k=0;k<15;k++)
{
port[b][k]=f[k+1];
y[k]=f[k];
}
y[15]=f[15];
move();
break;
}
switch(SST)
{
case 0:break;
case 1:C=cyr;Z=zr;V=ov;S=f15;break;
case 2:C=0;Z=0;V=0;S=0;break;
case 3:C=false;break;
case 4:C=true;break;
case 5:C=c_r;break;
case 6:C=c_l;break;
case 7:C=c_r;break;
}
return 0;
}
void reset()
{
C=0,Z=0,V=0,S=0;
for(int n=0;n<=15;n++)
{
y[n]=0; f[n]=0;
q[n]=0; i[n]=0;
r[n]=0; s[n]=0;
}
SST=0,SSH=0,SCI=0,i8_6=0,i5_3=0,i2_0=0;
for(int m=0;m<=15;m++)
for (n=0;n<=15;n++)
port[m][n]=0;
ctemp=0,cyr=0,ov=0,f15=0,zr=0;
c_r=0,c_l=0;
cin=0;
c0=0;
sum=0;
}
int main()
{
int j;
char cp,lop;
char input_d;
int count=0;
int d[16]={0},cntl[24]={0};
do{
cout<<"是否輸入D?(y or n)";
cin>>input_d;
if(input_d=='y'||input_d=='Y')
{
cout<<"輸入16位二進制數D:";
char temp1[16];
cin >> temp1;
for (int i = 0; i < 16; i++)
d[i] = temp1[i] - 48;
}
cout<<"輸入24位控制位:(依次為I8-I0,sst2-sst0,sci1-sci0,ssh1-ssh0,A口,B口)"<<endl;
char temp2[30];
cin >> temp2;
for (int i = 0; i < 24; i++)
cntl[i] = temp2[i] - 48;
cout<<endl;
do{
int tempc=cyr,tempz=zr,tempv=ov,temps=f15;
Cal(d,cntl);
count++;
cout<<endl;
if(count<2) {C=tempc; Z=tempz; V=tempv; S=temps;}
cout<<"CZVS:"<<C<<Z<<V<<S<<endl;
cout<<"ALU輸出:";
for(j=0;j<=15;j++)
{
cout<<y[j];
}
cout<<endl;
cout<<"是否start?(y or n)";
cin>>cp;
}while(cp=='y'||cp=='Y');
count=0;
cout<<"是否繼續(xù)?(y or n)";
cin>>lop;
}while(lop=='y'||lop=='Y');
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -