VS C++是否提供Aarch64架构MSR/MRS指令的intrinsic?
针对Aarch64系统寄存器的Visual Studio C++ Intrinsic支持
是的,Visual Studio的C++编译器提供了读写Aarch64系统寄存器的intrinsic,主要分为两类:
通用系统寄存器读写
- 读操作:使用
__arm_rsr系列intrinsic,例如读取CurrentEL寄存器可写为__arm_rsr("CurrentEL") - 写操作:使用
__arm_wsr系列intrinsic,例如写入SCTLR_EL1寄存器可写为__arm_wsr("SCTLR_EL1", value)
这类intrinsic需要传入寄存器的字符串名称,支持多数Aarch64架构定义的系统寄存器。注意:部分寄存器的读写要求对应异常级别的权限,运行时权限不足会触发错误。
特定功能的专用intrinsic
除通用读写接口外,VS还提供了针对特定寄存器或功能的专用intrinsic,比如:
- 线程寄存器TPIDR_EL0/TPIDRRO_EL0:
__arm_read_tpidr()、__arm_write_tpidr()、__arm_read_tpidrro() - DAIF标志寄存器:
__arm_read_daif()、__arm_write_daif()
这类intrinsic无需手动指定寄存器名,使用起来更直观。
使用注意事项
- 仅针对Aarch64平台编译时可用,x86/x64架构下无法调用
- 需要项目启用ARM64支持,且编译器版本不低于Visual Studio 2017
- 系统寄存器的读写受Aarch64权限模型约束:用户态程序仅能访问少数寄存器(如TPIDR_EL0),内核态或特权级代码才能访问更多寄存器
内容的提问来源于stack exchange,提问作者c00000fd
相关产品推荐
相关产品推荐

