精华内容
下载资源
问答
  • MSR指令杂谈

    2020-05-14 17:10:25
    msr指令杂谈1. 汇编 rdmsr, wrmsr2内核微码更新举例2.1 linux内核 intel 微码更新2.2 linux内核 amd 微码更新2.3 winxp sp3 amd msr特性更新2.4 winxp sp3 intel 1. 汇编 rdmsr, wrmsr 1.1 MSR简介 MSR 总体来是为了...

    1. 汇编 rdmsr, wrmsr

    1.1 MSR简介
    MSR 总体来是为了设置CPU 的工作环境和标示CPU 的工作状态,包括温度控制,性能监控 cpu温度 cpu频率 微码更新 获取CPU特性 电压信息 cache控制等

    1.2 汇编指令简介
    MSR 是CPU 的一组64 位寄存器,可以分别通过RDMSR 和WRMSR 两条指令进行读和写的操作,前提要在ECX 中写入MSR 的地址。MSR 的指令必须执行在level 0 或实模式下。
    RDMSR 读模式定义寄存器。对于RDMSR 指令,将会返回相应的MSR 中64bit 信息到(EDX:EAX)寄存器中
    WRMSR 写模式定义寄存器。对于WRMSR 指令,把要写入的信息存入(EDX:EAX)中,执行写指令后,即可将相应的信息存入ECX 指定的MSR 中。

    2内核微码更新举例

    2.1 linux内核 intel 微码更新

    #==========================================================================
    P:\huge_CHM\linux-2.6.34\arch.chm
    arch/x86/kernel/microcode_intel.c
    #intel 微码更新
    static int apply_microcode(int cpu)
    {
    		....
         wrmsr(MSR_IA32_UCODE_WRITE,
                  (unsigned long) mc_intel->bits,
                  (unsigned long) mc_intel->bits >> 16 >> 16);
            wrmsr(MSR_IA32_UCODE_REV, 0, 0);
    		....
    }
    #注意微码的校验的过程:
    static int microcode_sanity_check(void *mc
    

    2.2 linux内核 amd 微码更新

    #amd 微码更新的函数
    arch/x86/kernel/microcode_amd.c
    static int apply_microcode_amd(int cpu)
    {
    		....
            wrmsrl(MSR_AMD64_PATCH_LOADER, (u64)(long)&mc_amd->hdr.data_code);
            /* get patch id after patching */
            rdmsr(MSR_AMD64_PATCH_LEVEL, rev, dummy);
    		....
    }
    

    2.3 winxp sp3 amd msr特性更新

    #win sp3, 下 amdk6.sys
    位于 路径 C:\Windows\System32\drivers\amdk6.sys
    DriverEntry
    ProcessorPowerStateCallback #主机电源回调函数
    ProcessorDispatchPower
    ProcessorQueryPowerState # 查询电源状态状态
    HandleSystemPowerIrp
    ProcessResumeFromSleepState
    EnableGeminiTransitionsMSR
    WriteMSR # GeminiTransitions 通过msr函数更新

    2.4 winxp sp3 intel

    2.xp初始化流程
    内核文件在 C:\Windows\System32\ntoskrnl.exe
    KeInitSystem-> //windows 系统初始化
    KiInitMachineDependent-> //特定架构的初始化函数
    KiRestoreFastSyscallReturnState-> //内核快速系统调用
    KiLoadFastSyscallMachineSpecificRegisters-> //调用特定x86构架下的处理器寄存器
    WRMS

    展开全文
  • MRS和MSR指令

    千次阅读 2019-08-01 09:11:47
    ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图 分成了4部分: 1,条件标志位 N(Negative), Z(Zero), C(Carry), V...

    一:下面先来说说状态寄存器

    ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。
    针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图
    在这里插入图片描述
    在这里插入图片描述
    分成了4部分:

    1,条件标志位

    N(Negative), Z(Zero), C(Carry), V(Verflow)统称为条件标志位。ARM指令可以根据CPSR中的这些条件标志位来选择性的执行。

    2,Q标志位

    ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位。主要用于指示增强的DSP指令是否发生了溢出。

    3,控制位

    I, F, T以及M[4:0]统称为控制位。当异常中断发生时,这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。

    下表示控制位M[4:0]的含义:

    在这里插入图片描述
    4,保留位
    用于将来ARM版本的扩展。

    二:状态寄存器访问指令仅有两条:

    MRS: 状态寄存器到通用寄存器的传送指令。
    MRS:({R0-R12}⬅CPSR,SPSR)
    MSR: 通用寄存器到状态寄存器的传送指令。
    MRS:(CPSR,SPSR⬅{R0-R12})

    展开全文
  • ARM汇编:MRS和MSR指令

    万次阅读 2018-11-13 21:06:54
    ARM汇编:MRS和MSR指令 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。 一:下面先来说说状态寄存器 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图: 分成了4部分...

                            ARM汇编:MRS和MSR指令

    ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。

    一:下面先来说说状态寄存器

    针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图:


    分成了4部分:

    1,条件标志位

    N(Negative), Z(Zero), C(Carry), V(Verflow)统称为条件标志位。ARM指令可以根据CPSR中的这些条件标志位来选择性的执行。

    2,Q标志位

    ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位。主要用于指示增强的DSP指令是否发生了溢出。

    3,控制位

    I, F, T以及M[4:0]统称为控制位。当异常中断发生时,这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。

    下表示控制位M[4:0]的含义:

    4,保留位
     用于将来ARM版本的扩展。


    二:状态寄存器访问指令仅有两条:

    MRS: 状态寄存器到通用寄存器的传送指令。

    MSR: 通用寄存器到状态寄存器的传送指令。

    三:MRS指令用法:


    四:MSR指令用法:

     其中:

    <cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。

    <fields>设置状态寄存器中需要操作的位。状态寄存器的32位可以分为4个8位的域:

        f: 指示bits[31 : 24],又名条件标志位域

        s: 指示bits[23 : 16],又名状态标志位域

        x: 指示bits[15 : 8], 又名扩展位域

        c: 指示bits[7 : 0],又名控制位
    <immediate>为将要传送到状态寄存器中的立即数,该立即数的计算方式可以去照看<ARM+Architecture+Reference+Manual.pdf>

    <Rm>寄存器包含将要传送到状态寄存器中的数据。

    指令的操作伪代码:


    展开全文
  • MSR指令什么意思

    千次阅读 2016-09-24 16:35:56
    在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。 由于xPSR寄存器代表了CPU的...
    在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。
    由于xPSR寄存器代表了CPU的状态,其每个位有特殊意义,在执行对xPSR状态寄存器写入时(读取时不存在该用法),为了防止误操作和方便记忆,将xPSR里32位分成四个区域,每个区域用小写字母表示:
    
    c  控制域屏蔽 psr[7..0]
    
    x  扩展域屏蔽 psr[15..8]
    
    s  状态域屏蔽 psr[23..16]
    
    f  标志域屏蔽 psr[31..24]
    
    注意:区域名必须为小写字母
    
    向对应区域进行执行写入时,使用xPSR_x可以指定写入区域,而不影响状态寄存器其它位,如:
    
    使能IRQ中断:
    
    ENABLE_IRQ
    
        MRS    R0, CPSR            ; 将CPSR寄存器内容读出到R0
    
        BIC    R0, R0,#0x80     ; 清掉CPSR中的I控制位
    
        MSR    CPSR_c,R0          ; 将修改后的值写回 CPSR寄存器的对应控制域
    
        MOV    PC,LR                       ; 返回上一层函数
    
    禁用IRQ中断:
    
    DISABLE_IRQ
    
        MRS    R0 CPSR                          ; 将CPSR寄存器内容读出到R0
    
        ORR    R0, R0,#0x80    ; 设置CPSR中的I控制位
    
        MSR    CPSR_c,R0          ; 将修改后的值写回 CPSR寄存器的对应控制域
    
        MOV    PC,LR                          ; 返回上一层函数
    展开全文
  • MSR指令

    千次阅读 2013-04-09 15:20:44
    MSR指令的格式为: MSR{条件} 程序状态寄存器(CPSR或SPSR)_,操作数 MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。用于设置程序状态寄存器中需要操作的位...
  • ++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: ... ++++++++++++++++++++++++++++++++++++++++++ 1.1.1 ARM处理器模式切换(含MRS,MSR指令) 除
  • 【ARM】MRS MSR指令

    2020-06-19 11:20:56
    MSR3.1 指令的语法格式3.2 应用示例04. 综合应用4.1 使能 IRQ 中断4.2 禁止 IRQ 中断4.3 堆栈指令初始化05. 附录 01. 状态操作指令概述 ARM 指令集提供了两条指令,可直接控制程序状态寄存器(Program State ...
  • MRS,MSR指令详解

    万次阅读 2011-08-31 21:51:23
    在ARM处理器中,只有MRS(Move to Register from State register)指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常...
  • MSR指令用于将通用寄存器的内容或一个立即数传送到状态寄存器中。 指令的编码格式 指令的源操作数为通用寄存器时,指令编码格式如下: 指令的源操作数为立即数时,指令编码格式如下: 指令的语法格式 MSR{< ...
  • ++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: ...++++++++++++++++++++++++++++++++++++++++++1.1.1 ARM处理器模式切换(含MRS,MSR指令) 除了用户模式和
  • MRS,状态寄存器传送至通用寄存器类指令功能:将状态寄存器的内容传送至通用寄存器。 格式: MRS{<条件码>}Rd,CPSR}SPSR其中:Rd 目标寄存器,Rd不允许R15。R=0 将CPSR中的内容传送目的寄存器。R=1 将SPSR中...
  • 1.MSR和MRS指令介绍 MRS 指令: 对状态寄存器CPSR和SPSR进行读...MSR指令: 对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/...
  • ARM中MRS和MSR汇编指令

    万次阅读 2017-04-02 15:50:42
    ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图:   分成了4部分: 1,条件标志位 N(Negative), Z(Zero), C(Carry), V...
  • MSR寄存器的基本操作示例,用C语言完成,对刚开始接触系统层面编程的战友,或许会有一定帮助!
  • MSR和MRS指令

    2014-04-14 15:55:13
    1 状态寄存器传送至通用寄存器类指令 功能:将状态寄存器的内容传送至通用寄存器。 格式: MRS{}Rd,CPSR}SPSR 其中: Rd 目标寄存器,Rd不允许R15。 R=0 将CPSR中的内容传送目的寄存器。 R=1 将SPSR中的内容...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,224
精华内容 3,689
关键字:

msr指令