⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdu.c

📁 32cpu的代码
💻 C
字号:
#include <stdio.h>
#include <math.h>


long mult_hi(long opa,long opb){
long  opa_abs,opb_abs,result_hi,result_lo;
long  mult_hi_i,mult_hi_j;
unsigned long result_temp_hi,result_temp_lo;

unsigned long opa_hi,opb_hi,opa_lo,opb_lo;
unsigned long result_aaa,result_bbb,result_ccc;
//  opa=-1;
//  opb=0x10000000;
// printf("888888888888888888888888888888888888888888888");
  result_lo=0;
  result_hi=0;
  result_temp_lo=0;
  result_temp_hi=0;
  if(opa<0){
  opa_abs=0 - opa;
  }else{
  opa_abs=opa;
  }
  if(opb<0){ 
  opb_abs=0 - opb;
  }else{
   opb_abs=opb;
  }
//printf("0x%08x\n",opa_abs);
//printf("0x%08x\n",opb_abs);

   opa_hi=(opa_abs>>16)&(0x0000ffff);
   opb_hi=(opb_abs>>16)&(0x0000ffff);
   opa_lo=opa_abs&(0x0000ffff);
   opb_lo=opb_abs&(0x0000ffff);
   result_aaa=opa_hi*opb_hi;
   result_bbb=opa_hi*opb_lo + opa_lo*opb_hi;
   result_ccc=opa_lo*opb_lo;
   result_temp_hi=result_aaa + ((result_bbb>>16)&(0x0000ffff));
   result_temp_lo=result_ccc + ((result_bbb<<16)&(0xffff0000));

   if((result_bbb < (opa_hi*opb_lo)) || (result_bbb < (opa_lo*opb_hi))){
   	 result_temp_hi=result_temp_hi + 0x10000;
   	}
   if((result_temp_lo < result_ccc) || (result_temp_lo < ((result_bbb<<16)&(0xffff0000)))){
   	 result_temp_hi=result_temp_hi + 1;
   	}

//printf("0x%08x\n",result_temp_hi);
//printf("0x%08x\n",result_temp_lo);
  if(((opa>0)&&(opb<0))||((opa<0)&&(opb>0))){
	  if(result_temp_lo==0){
	           result_lo=~result_temp_lo + 1;
		       result_hi=~result_temp_hi + 1;
	  }else{
	           result_lo=~result_temp_lo + 1;
		       result_hi=~result_temp_hi;
	  }
  }else{
	           result_lo=result_temp_lo;
		       result_hi=result_temp_hi;
  }
//printf("result_hi=0x%08x\n",result_hi);
//printf("result_lo=0x%08x\n",result_lo);
  return(result_hi);

}




long mult_lo(long opa,long opb){
long  opa_abs,opb_abs,result_hi,result_lo;
long  mult_lo_i,mult_lo_j;
unsigned long result_temp_hi,result_temp_lo;

unsigned long opa_hi,opb_hi,opa_lo,opb_lo;
unsigned long result_aaa,result_bbb,result_ccc;
//  opa=0xfff4524f;
//  opb=0x4534545;
  result_lo=0;
  result_hi=0;
  result_temp_lo=0;
  result_temp_hi=0;
  if(opa<0){
  opa_abs=0 - opa;
  }else{
  opa_abs=opa;
  }
  if(opb<0){ 
  opb_abs=0 - opb;
  }else{
   opb_abs=opb;
  }
//printf("0x%08x\n",opa_abs);
//printf("0x%08x\n",opb_abs);


   opa_hi=(opa_abs>>16)&(0x0000ffff);
   opb_hi=(opb_abs>>16)&(0x0000ffff);
   opa_lo=opa_abs&(0x0000ffff);
   opb_lo=opb_abs&(0x0000ffff);
   result_aaa=opa_hi*opb_hi;
   result_bbb=opa_hi*opb_lo + opa_lo*opb_hi;
   result_ccc=opa_lo*opb_lo;
   result_temp_hi=result_aaa + ((result_bbb>>16)&(0x0000ffff));
   result_temp_lo=result_ccc + ((result_bbb<<16)&(0xffff0000));

   if((result_bbb < (opa_hi*opb_lo)) || (result_bbb < (opa_lo*opb_hi))){
   	 result_temp_hi=result_temp_hi + 0x10000;
   	}
   if((result_temp_lo < result_ccc) || (result_temp_lo < ((result_bbb<<16)&(0xffff0000)))){
   	 result_temp_hi=result_temp_hi + 1;
   	}

//printf("0x%08x\n",result_temp_hi);
//printf("0x%08x\n",result_temp_lo);
  if(((opa>0)&&(opb<0))||((opa<0)&&(opb>0))){
	  if(result_temp_lo==0){
	           result_lo=~result_temp_lo + 1;
		       result_hi=~result_temp_hi + 1;
	  }else{
	           result_lo=~result_temp_lo + 1;
		       result_hi=~result_temp_hi;
	  }
  }else{
	           result_lo=result_temp_lo;
		       result_hi=result_temp_hi;
  }
  return(result_lo);
//printf("0x%08x\n",result_hi);
//printf("0x%08x\n",result_lo);
}


long div_hi(long opa,long opb)
{
long result_div_hi,result_div_lo;

  result_div_lo=opa/opb;
  result_div_hi=opa%opb;
return(result_div_hi);
}


long div_lo(long opa,long opb)
{
long result_div_hi,result_div_lo;

  result_div_lo=opa/opb;
  result_div_hi=opa%opb;
return(result_div_lo);
}



long multu_hi(unsigned long opa,unsigned long opb){

unsigned long opa_abs,opb_abs;
unsigned long  mult_hi_i,mult_hi_j;
unsigned long result_temp_hi,result_temp_lo;
//  opa=0xfff4524f;
 // opb=0x4534545;

unsigned long opa_hi,opb_hi,opa_lo,opb_lo;
unsigned long result_aaa,result_bbb,result_ccc;
  result_temp_lo=0;
  result_temp_hi=0;
  opa_abs=(unsigned long)opa;
  opb_abs=(unsigned long)opb;
//printf("0x%08x\n",opa_abs);
//printf("0x%08x\n",opb_abs);
   opa_hi=(opa_abs>>16)&(0x0000ffff);
   opb_hi=(opb_abs>>16)&(0x0000ffff);
   opa_lo=opa_abs&(0x0000ffff);
   opb_lo=opb_abs&(0x0000ffff);
   result_aaa=opa_hi*opb_hi;
   result_bbb=opa_hi*opb_lo + opa_lo*opb_hi;
   result_ccc=opa_lo*opb_lo;
   result_temp_hi=result_aaa + ((result_bbb>>16)&(0x0000ffff));
   result_temp_lo=result_ccc + ((result_bbb<<16)&(0xffff0000));
   if((result_bbb < (opa_hi*opb_lo)) || (result_bbb < (opa_lo*opb_hi))){
   	 result_temp_hi=result_temp_hi + 0x10000;
   	}
   if((result_temp_lo < result_ccc) || (result_temp_lo < ((result_bbb<<16)&(0xffff0000)))){
   	 result_temp_hi=result_temp_hi + 1;
   	}

//printf("0x%08x\n",result_temp_hi);
//printf("0x%08x\n",result_temp_lo);

  return(result_temp_hi);

}


long multu_lo(unsigned long opa,unsigned long opb){

unsigned long opa_abs,opb_abs;
unsigned long  mult_hi_i,mult_hi_j;
unsigned long result_temp_hi,result_temp_lo;
//  opa=0xfff4524f;
 // opb=0x4534545;

unsigned long opa_hi,opb_hi,opa_lo,opb_lo;
unsigned long result_aaa,result_bbb,result_ccc;
  result_temp_lo=0;
  result_temp_hi=0;
  opa_abs=(unsigned long)opa;
  opb_abs=(unsigned long)opb;
//printf("0x%08x\n",opa_abs);
//printf("0x%08x\n",opb_abs);
   opa_hi=(opa_abs>>16)&(0x0000ffff);
   opb_hi=(opb_abs>>16)&(0x0000ffff);
   opa_lo=opa_abs&(0x0000ffff);
   opb_lo=opb_abs&(0x0000ffff);
   result_aaa=opa_hi*opb_hi;
   result_bbb=opa_hi*opb_lo + opa_lo*opb_hi;
   result_ccc=opa_lo*opb_lo;
   result_temp_hi=result_aaa + ((result_bbb>>16)&(0x0000ffff));
   result_temp_lo=result_ccc + ((result_bbb<<16)&(0xffff0000));

   if((result_bbb < (opa_hi*opb_lo)) || (result_bbb < (opa_lo*opb_hi))){
   	 result_temp_hi=result_temp_hi + 0x10000;
   	}
   if((result_temp_lo < result_ccc) || (result_temp_lo < ((result_bbb<<16)&(0xffff0000)))){
   	 result_temp_hi=result_temp_hi + 1;
   	}

//printf("0x%08x\n",result_temp_hi);
//printf("0x%08x\n",result_temp_lo);

  return(result_temp_lo);

}


long divu_hi(unsigned long opa,unsigned long opb)
{
unsigned long result_div_hi,result_div_lo;
  if(opb == 0){
  	result_div_lo=result_div_lo;
  	result_div_hi=result_div_hi;
   }else{
      result_div_lo=opa/opb;
      result_div_hi=opa%opb;
   }

return(result_div_hi);
}


long divu_lo(unsigned long opa,unsigned long opb)
{
unsigned long result_div_hi,result_div_lo;

  if(opb == 0){
  	result_div_lo=result_div_lo;
  	result_div_hi=result_div_hi;
   }else{
      result_div_lo=opa/opb;
      result_div_hi=opa%opb;
   }
return(result_div_lo);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -