首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C里的汇编解决办法

2012-02-26 
C里的汇编structhdinfo{/*硬盘物理参数结构体*/unsignedintCylinder/*硬盘柱体数*/unsignedcharHead/*面

C里的汇编
struct   hdinfo   {                         /*   硬盘物理参数结构体   */
      unsigned   int   Cylinder;     /*   硬盘柱体数   */
      unsigned   char   Head;           /*   面数   */
      unsigned   int   WP;
      unsigned   int   LZ;
      unsigned   char   Sector;       /*   扇区数   */
      };

struct   TCMOSStruc                     /*   CMOS   RAM信息结构体   */
      {
      unsigned   char   Seconds;             /*   实时钟秒数   */
      unsigned   char   SecondAlarm;     /*   秒报警   */
      unsigned   char   Minutes;             /*   实时钟分数   */
      unsigned   char   MinuteAlarm;     /*   分报警   */
      unsigned   char   Hours;                 /*   实时钟小时数   */
      unsigned   char   HourAlarm;         /*   时报警   */
      unsigned   char   DayOfWeek;         /*   周几   */
      unsigned   char   DayOfMonth;       /*   号数   */
      unsigned   char   Month;                 /*   月份   */
      unsigned   char   Year;                   /*   年份   */
      unsigned   char   StatusRegA;       /*   状态寄存器A   */
      unsigned   char   StatusRegB;       /*   状态寄存器B   */
      unsigned   char   StatusRegC;       /*   状态寄存器C   */
      unsigned   char   StatusRegD;       /*   状态寄存器D   */
      unsigned   char   DiagStatus;       /*   诊断状态   */
      unsigned   char   ShutDownStatus;   /*   关机状态   */
      struct   {
          unsigned   FloppyDrive2   :   4;/*   第二软驱的类型   */
          unsigned   FloppyDrive1   :   4;/*   第一软驱的类型   */
      }   fd;
      unsigned   char   Reserved1;         /*   保留   */
      struct   {
          unsigned   FixedDrive2   :   4;   /*   第二硬盘的类型   */
          unsigned   FixedDrive1   :   4;   /*   第一硬盘的类型   */
      }   hd;
      unsigned   char   Reserved2;         /*   保留   */
      struct   {
            unsigned   diskdrv   :   1;         /*   磁盘驱动器   */
            unsigned   mpu   :   1;                       /*   数学处理器   */


            unsigned     :   2;                       /*   保留   */
            unsigned   videotype   :   2;     /*   当前显示类型   */
            unsigned   numdrive   :   2;       /*   磁盘驱动器的数目   */
      }   equipment;
      unsigned   int   RAM;                       /*   基本内存KB数   */
      unsigned   int   XMS;                       /*   扩充内存KB数   */
      unsigned   char   FixedDriveType1;   /*   驱动器C扩展字节   */
      unsigned   char   FixedDriveType2;   /*   驱动器D扩展字节   */
      unsigned   int   Reserved3;           /*   保留   */
      struct   hdinfo   hd1;                     /*   硬盘C的物理参数   */
      struct   hdinfo   hd2;                     /*   硬盘D的物理参数   */
      unsigned   char   Sys;                     /*   系统字节   */
      unsigned   int   CheckSum;             /*   校验和   */
      unsigned   int   XMS1;                     /*   扩展内存KB数   */
      unsigned   char   DateCentury;     /*   世纪的BCD值   */
      unsigned   char   InfoFlags;         /*   信息标志   */
      unsigned   char   Reserved4[4];   /*   保留   */
      unsigned   char   password[8];     /*   口令字节   */
      };

struct   TCMOSStruc   CMOSRec;
/*   从CMOS内存中读信息   */
void   ReadCMOS()
{
        _asm
        {
          mov   di,offset   CMOSRec//错误         7         error   C2443:   operand   size   conflict         test.cpp         116        

          mov   cx,0x40   /*0x40为十进制64*/
          mov   ah,0
          mov   bx,0
          mov   dx,0x70   /*   CMOS口地址   */
l1:
          mov   al,ah
          out   dx,al
          inc   dx
          in   al,dx
          mov   BYTE   PTR   [di+BX],al//错误         8         error   C2432:   illegal   reference   to   16-bit   data   in   'first   operand '         test.cpp         126        



          inc   ah
          inc   bx
          dec   dx
          loop   l1
        }
}

/*   向CMOS内存写入信息   */
void   WriteCMOS()
{
        _asm
        {
          mov   di,offset   CMOSRec
          MOV   CX,0x40
          MOV   AH,0
          MOV   BX,0
          MOV   DX,0x70
_L1:
          MOV   AL,AH
          OUT   DX,AL
          MOV   AL,BYTE   PTR   [di+BX]
          INC   DX
          OUT   DX,AL
          INC   AH
          INC   BX
          DEC   dX
          loop   _L1
        }
在VC或VS2005里。


[解决办法]
老大,实模式的程序就要用实模式的编译器编译,然后在实模式环境中运行.搞一个TC编译,编译完了以后进实模式dos运行.

热点排行