首页 > 其他分享 >msr读取CPU温度

msr读取CPU温度

时间:2023-08-13 19:32:06浏览次数:27  
标签:读取 MSR msr TEM 寄存器 include CPU 温度


一 MSR寄存器介绍

MSR寄存器简介MSR(Model Specific Register)是一类x86CPU提供的特殊寄存器,可以用来存储各种模型特定的数据,如配置、状态等信息。

温度相关MSR寄存器在Intel CPU中,和温度检测相关的MSR寄存器主要有:

IA32_THERM_STATUS (0x19C) : 包含温度数据

IA32_TEMPERATURE_TARGET (0x1a2) : 温度目标值

读取MSR寄存器需要使用rdmsr/wrmsr汇编指令来读取/写入MSR寄存器。例如:

mov ecx, 0x19C ; 温度状态MSR 
rdmsr ; 读取温度寄存器值
mov ecx, 0x1a2 ; 温度目标MSR 
wrmsr ; 写入温度目标

温度转换公式从0x19C寄存器读取的温度数据需要按公式转换:

Temp = ((MSR值 >> 16) & 0xFF) - 100即温度 = 第16-23位的值 - 100

问题及注意事项

需要Ring 0特权级才能访问MSR寄存器

不同CPU型号MSR寄存器可能不同,需要区分

读取MSR需要使用rdmsr指令,写入使用wrmsr指令


二 Dos系统下读取msr温度的示例代码:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<dos.h>
#include<math.h>

//#define DEBUG

typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;

//----------------------------------------------------------
//Get temperature
//----------------------------------------------------------
WORD getTemp()
{
    WORD i;

    __asm{
        mov ecx,0x19c
        rdmsr
        mov i,eax
       }

    return i;
}

void main(){
    WORD TEM;
    TEM = (getTemp()>>16)&0xff;
    TEM = 0x64-TEM;

    printf("\nCPU Temperature:%d C\n\n",TEM);
}


运行结果图:

msr读取CPU温度_#include

标签:读取,MSR,msr,TEM,寄存器,include,CPU,温度
From: https://blog.51cto.com/u_16204156/7069214

相关文章

  • 读取CMOS数据
    一CMOS介绍CMOS(ComplementaryMetal-OxideSemiconductor)是一种常见的半导体芯片技术,广泛用于各种微处理器和外设中。在PC系统中,CMOS芯片主要用于实现实时时钟(RTC)和存储BIOS设置。CMOS内含有一小块SRAM芯片和电池,可以在系统断电时保持数据。二CMOS数据的读取要读取CMOS中......
  • CPUID的读取
    一CPUID介绍CPUID是一个用于获取中央处理单元(CPU)相关信息的指令。它通常在x86架构的计算机上使用,通过读取CPU寄存器中的特定值来提供关于CPU特性、制造商、型号和支持的功能的信息。CPUID指令返回的信息对于操作系统、编程、性能优化以及硬件识别非常有用。以下是有关CP......
  • 10 张图帮你搞定 TensorFlow 数据读取机制
    一、tensorflow读取机制图解首先需要思考的一个问题是,什么是数据读取?以图像数据为例,读取数据的过程可以用下图来表示:假设我们的硬盘中有一个图片数据集0001.jpg,0002.jpg,0003.jpg……我们只需要把它们读取到内存中,然后提供给GPU或是CPU进行计算就可以了。这听起来很容易,但事实远没有......
  • SpringBatch读取mysql数据
    1.在本地数据库创建user表建表语句:createtable`user`(`id`bigintnotnullauto_incrementcomment'主键',`name`varchar(32)defaultnullcomment'用户名',`age`intdefaultnullcomment'年龄',primarykey(id))engine=innodbde......
  • 10 张图帮你搞定 TensorFlow 数据读取机制
    在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解。确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料。今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下tensorflow的数据读取机制,文章的最后还会给出实战代码以供参考。一、tensorflow读取......
  • # yyds干货盘点 #通过pandas读取列的数据怎么把一列中的负数全部转为正数?
    大家好,我是皮皮。一、前言前几天在Python最强王者群【wen】问了一个pandas数据处理的问题,一起来看看吧。二、实现过程这里【隔壁......
  • # yyds干货盘点 # 盘点一个dataframe读取csv文件失败的问题
    大家好,我是皮皮。一、前言前几天在Python钻石群【心田有垢生荒草】问了一个Pandas数据处理的问题,一起来看看吧。大佬们求教个方法 现在有个数据量很大的dataframe 要吐csv格式 但结果总是串行 加了encoding='utf-8'还是没解决 还有其他方法么?下图是他提供的图片:二、实现......
  • Python 读取 Arduino 串口数据
    serial读取串口数据初始化serimportserialser=serial.Serial('com1',9600,timeout=1)初始化的参数ser=serial.Serial(port=None,#numberofdevice,numberingstartsat#zero.ifeverythingfails,theuser#canspecifyadevicestring,......
  • 1.文件读取
    fs文件读取的方法有两种readFile(异步)和readFileSync(同步)方法1.创建index.js文件,在统计目录下创建xxx.txt文件用以测试。代码如下异步方法//1.导入fsconstfs=require("fs");//2.异步读取fs.readFile("./xxx.txt",(err,data)=>{if(err){//判断是否报错re......
  • 资源过滤器—MVC中使用资源过滤器实现不执行Action方法体读取缓存信息返回
    前言上两篇文章分享了过滤器实现JWT进行鉴权,分别是通过授权过滤器和操作过滤器实现,这两个过滤器也是最常用的。文章链接:授权过滤器—MVC中使用授权过滤器实现JWT权限认证,操作过滤器—MVC中使用操作过滤器实现JWT权限认证,接下来将简单的谈谈资源过滤器在MVC中如何使用,一般项目中这......