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运行.