汇编与C混合编程(6.19)

来源:互联网 发布:js div height 编辑:程序博客网 时间:2024/05/20 23:06
一  异常放回


<1>IRQ/FIRQ 
pc <- lr - 4
 
<2>软中断异常
pc <- lr
 
<3>预取指令终止异常
 
指令1
指令2 <-没有取到指令
指令3
指令4 <-pc
 
lr : 保存的是指令3的地址
 
pc <- lr - 4 [没有取到指令,需要再次去取]
 


<4>取数据终止异常
 
指令1
指令2 <-没有取到数据 (在指令2执行结束的时候,产生异常)
指令3
指令4 
指令5 <- pc 
 
lr : 保存的是指令4的地址
 
pc <- lr - 8  [没有取到数据,需要再次去取]
 
<5>未定义异常


指令1
指令2 <-无法识别,产生未定义异常
指令3
指令4 <-pc
 
lr : 保存的是指令3的地址
 
pc <- lr 



二、汇编与C混合编程


1.ATPCS标准


[1]参数的传递
函数参数传递的时候,前4个参数通过r0-r3来传递,超过4个的参数通过堆栈来传递
 
 
[2]函数返回值
通过r0带回
 
注意:调用C语言之前,必须先设置sp


 
2.内联汇编(在C语言中内嵌一段汇编代码)


asm(
"指令1\n"
"指令2\n"
...
:输出列表
:输入列表
:修改列表

);



[1]输出列表: 将寄存器值输出到c变量
int c;
int d;

输出列表
:"=r"(c),"=r"(d)


[2]输入列表 : 将c变量输入到寄存器
int a = 10;
int b = 20;

输入列表
:"r"(a),"r"(b)


[3]修改列表:在内联汇编的时候,发生修改的寄存器


例如:在指令中使用了r0,r1,r2

修改列表

:"r0","r1","r2"

int  add(int a,int b){int c;asm("add r0,%1,%2\n""mov %0,r0\n":"=r"(c):"r"(a),"r"(b):"r0");}
注意:C变量的引用,从输入列表、输出列表开始编号:第一个C变量 %0,第二个c变量%1,...


练习:实现以下函数

int disable_irq(void){int statu;return statu;}int enable_irq(void){int statu;return statu;}int main(){disable_irq();//cpsr I:7bit -> 1enable_irq(); //cpsr I:7bit -> 0return 0;}

三、volatile 含义 


volatile 修饰一个变量,防止编译器优化,告诉编译器每次在使用这个变量的时候,必须从变量所在的内存中重新读值。


面试问题:在有中断处理函数代码中使用全局变量,有什么需要注意的地方?
         定义全局变量的时候,需要加volatile修饰
                 
                 
四、思考:如何判断数据指定为是否为0?

   int flag = 0;      flag = data & (1 << 1);      data的第1位为0   flag = 0      data的第1位为1   flag = 2           1    0000010  循环判断第1位是否为0 do{ flag = data & (1 << 1); }while(!flag);

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝买东西扣了银行卡两次钱怎么办 拼多多同一个订单支付了两次怎么办 京东手机号服务密码忘记了怎么办 京东买的东西转手给别人保修怎么办 改了无线网密码还是上不去网怎么办 买的京东e卡丢了怎么办 已认证未抵扣的发票发生退货怎么办 办的消费卡不给退怎么办 银行卡密码忘了手机号也换了怎么办 公务卡在当当购物的刷卡单怎么办 杭州市网签提示住宅均价异常怎么办 吃鸡账号没有绑定手机就买了怎么办 微信绑定的银行卡密码错误怎么办 淘宝单张券已领取达上限怎么办 去办公室给领导送礼总有人怎么办 招行信用卡临时额度到期后怎么办 中银e令不想用了怎么办 中银e令密码忘了怎么办 银行卡预留手机号改了支付宝怎么办 手机一直收到支付验证码短信怎么办 微信绑定银行卡手机号码换了怎么办 银行卡网银登录输错密码锁了怎么办 中行信用卡主付卡的付卡怎么办停 在苏宁网购的移动空调要退货怎么办 单位发的购物卡掉了怎么办 支付宝ofo退押金后余额怎么办 e招贷分期多还了怎么办 别人用我的手机号贷款不还怎么办 电脑文件夹怎么设密码忘记了怎么办 苹果手机id有分机和主机怎么办 绝地求生号被盗了邮箱被改了怎么办 微信邮箱怎么接收不到验证码怎么办 要申请一个特定的qq邮箱号怎么办 中银e贷额度为0怎么办 中银e贷被冻结了怎么办 中国银行e贷款填错了被拒怎么办 中银e贷逾期2天怎么办 大学生助学贷款网站密码忘了怎么办 乳晕毛囊挤压捏起来有小硬节怎么办 手机版模拟人生孕妇任务卡死怎么办 百度网盘的表格没保存怎么办