-
-
[求助]我这段程序是使用NASM编译在X86 32位保护模式下运行的,出现了一些问题
-
发表于:
2016-3-27 15:19
5654
-
[求助]我这段程序是使用NASM编译在X86 32位保护模式下运行的,出现了一些问题
我正在开发操作系统
我这段程序是使用NASM编译在X86 32位保护模式下运行的,这段程序是用来读取CPU 1s的计数从而计算出CPU频率的,但是现在有一个问题:在虚拟机下该程序能正常计算,但是在真机测试时读取CMOS时间经常出错,比如读出这样:23 24 41(错了)。。。一直到下一秒再读取又对一次 导致计数只有250000左右,正常应该在2500000000左右
IO_CMOS_Addr EQU 70H
IO_CMOS_Data EQU 71H
CMOS_Second EQU 00H
Get1sCycle:
;读取CPU1s的计时数
MOV DX,IO_CMOS_Addr
MOV AL,CMOS_Second
OUT DX,AL
MOV DX,IO_CMOS_Data
IN AL,DX
MOV BL,AL
Get1sCycle_Stage1:
IN AL,DX
CMP AL,BL
JZ Get1sCycle_Stage1;等待CMOS时钟开始计下一秒
MOV BL,AL
RDTSC
PUSH EDX
PUSH EAX
MOV DX,IO_CMOS_Data
Get1sCycle_Stage2:
IN AL,DX
CMP AL,BL
JZ Get1sCycle_Stage2;等待CMOS时钟开始计下一秒
RDTSC
SUB EAX,[ESP]
SBB EDX,[ESP+4]
ADD ESP,8
RET
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!