首页 > 其他 > 详细

tricore 读取A11方法,CSA机制 ,ld中切分内存

时间:2021-03-05 22:20:09      阅读:63      评论:0      收藏:0      [点我收藏+]

#define __GETA11(tin) \
{ \
__asm__ ("mov.d \t%0,%%a11":"=d" (tin)); \
}

顺便列举几个学到的汇编指令

mov.d  用于从通用地址寄存器拷贝到通用数据寄存器  a->d

mov.a  反过来

函数体最后都会有个RET指令,会从A11中取出要返回的地址。

若进入trap中,返回指令是RFE (return from excption)也是从A11中获取地址,A11即RA

在此之前尝试了很多种方法,系统提供的mfcr指令无法读出A11,如果用指针读A11地址会进入trap,非法访问(一定要用汇编指令去取)

仿照mfcr接口制作的接口编译不过,

(__extension__({ \
unsigned __res; \
__asm__ volatile ("mfcr %0, LO:" __STRINGIFY (regaddr) \
: "=d" (__res) :: "memory"); \
__res; \
}))  

 

貌似这个叫做老式的汇编语法   :::这种固定格式

__asm__ volatile ("svlcx" ::: "memory"); //用于 加载上下文

__asm__ volatile ("nop" ::: "memory"); //用于 等待几个指令的时间

 

上下文CSA的构成 如图

其中D15被称为隐式寄存器,或内部寄存器,一种用法是局部变量

 

tricore 读取A11方法,CSA机制 ,ld中切分内存

原文:https://www.cnblogs.com/yyyyloveu/p/14488213.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!