首页
社区
课程
招聘
[求助]我这段程序是使用NASM编译在X86 32位保护模式下运行的,出现了一些问题
发表于: 2016-3-27 15:19 5664

[求助]我这段程序是使用NASM编译在X86 32位保护模式下运行的,出现了一些问题

2016-3-27 15:19
5664
我正在开发操作系统
我这段程序是使用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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
太底层了
2016-3-27 22:56
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这里不就是讨论系统底层的吗
2016-3-28 13:14
0
游客
登录 | 注册 方可回帖
返回
//