※「セキュリティ保護のため...」というメッセージが出る方・日本語が入力できない方へ
↑ 数字形式変換(MS->IEEE)要Intel


PC98のN88-BASICなどで使用されていたMicrosoft形式の数字データを
現在標準となっている、IEEE形式に変換するものである。一部をアセン
ブラで書いているのでインテルCPU専用とする。

double Ms2Ie2(char* str);    //i2
double Ms2Ie4(char* str);    //R4
double Ms2Ie8(char* str);    //R8

/********************************************************************
* Microsoft形式→IEEE形式変換 (i2)
 *******************************************************************/
double Ms2Ie2(char* str)
{
	short k;
	memcpy(&k, str, 2);
	return((double)k);
}
/********************************************************************
* Microsoft形式→IEEE形式変換 (R4)
 *******************************************************************/
double Ms2Ie4(char* str)
{
    float k;
	unsigned char work[5];
	unsigned short ww2;
	unsigned long ww3;
	memcpy(work, str, 4);
	work[3]-=2;
	work[3]= ((work[3]) & 0x0ff);
	ww2=work[2];
	ww2 = (ww2 << 1);
	ww3=ww2;
	ww3 = ((ww3 & 0x0ff00) | work[3]);
	ww3 = (ww3 << 7);
	work[3]= (unsigned char)(ww3 >>8);
	ww3 = ((ww3 & 0x0ff) << 1) | (ww2 & 0x0ff);
	work[2] = (unsigned char)(ww3 >>1);
	memcpy(&k, work, 4);
	return(k);
}
/********************************************************************
* Microsoft形式→IEEE形式変換 (R8)
 *******************************************************************/
double Ms2Ie8(char* str)
{
    unsigned char B0,B1,B2,B3,B4,B5,B6,B7;
	double kk;
	unsigned char work[8];

    B0=str[0];
    B1=str[1];
    B2=str[2];
    B3=str[3];
    B4=str[4];
    B5=str[5];
    B6=str[6];
    B7=str[7];

    _asm {
          mov  ah,B7
          mov  al,B6
          push ax
          and  al,07fh
          mov  ah,0
          
          shr  al,1
          rcr  ah,1
          shr  al,1
          rcr  ah,1
          shr  al,1
          rcr  ah,1
          mov  B6,al
          mov  cl,5
          shr  ah,cl
          and  ah,07h
          
          mov  al,B5
          shr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          mov  B5,al
          mov  cl,5
          shr  ah,cl
          and  ah,07h
          
          mov  al,B4
          shr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          mov  B4,al
          mov  cl,5
          shr  ah,cl
          and  ah,07h
          
          mov  al,B3
          shr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          mov  B3,al
          mov  cl,5
          shr  ah,cl
          and  ah,07h
          
          mov  al,B2
          shr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          mov  B2,al
          mov  cl,5
          shr  ah,cl
          and  ah,07h
          
          mov  al,B1
          shr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          mov  B1,al
          mov  cl,5
          shr  ah,cl
          and  ah,07h
          
          mov  al,B0
          shr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          rcr  al,1
          rcr  ah,1
          mov  B0,al
          mov  cl,5
          shr  ah,cl
          and  ah,07h
          
          pop  ax
          push ax
          and  al,080h
          mov  ch,al
          pop  ax
          mov  al,ah
          mov  ah,0
          add  ax,37eh
          mov  cl,4
          shl  ax,cl
          or   ah,ch
          mov  B7,ah
          mov  ah,B6
          or   al,ah
          mov  B6,al
    }
    work[0]=B0;
    work[1]=B1;
    work[2]=B2;
    work[3]=B3;
    work[4]=B4;
    work[5]=B5;
    work[6]=B6;
    work[7]=B7;
	memcpy(&kk, work, 8);
	return(kk);

}


↑
(C)copyright ffortune.net 1995-2007 produced by ffortune and Lumi.
お問い合わせはこちらから