找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 76|回复: 4
打印 上一主题 下一主题

内嵌汇编指令的应用举例

[复制链接]

161

主题

526

帖子

1209

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1209
跳转到指定楼层
1#
发表于 2016-7-13 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
下面是在C语言程序中嵌入式汇编程序的例子。通过这几个例子,可帮助用户更好地理解内嵌汇编的特点及用法。
(1)
字符串复制
本例主要介绍如何使用指令BL调用子程序。
注意,在内嵌的SWI和BL指令中,除了正常的操作数域外,还必须增加3个可选的寄存器列表。在这个程序中就能体现这一点。
示例 使用指令BL调用子程序
#include <stdio.h>
void my_strcpy(char *src,const char *dst)
{
int ch;
__asm
{
loop:
#ifndef _asm            /ARM版本/
LDRR ch,[src],#1
STRB ch,[dst],#1
#else                   /Thumb版本/
LDRB ch,[src]
ADD dst,#1
#endif
CMP ch,#0
BNE loop
}
}
int main
{
const char *a="Hello world!";
char b[20];
__asm
{
MOV R0,a                /设置入口设置/
MOV R1,b
BL my_strcpy,{R0,R1}    /调用my_strcpy()函数/
}
printf("Original string:%s\n",a);
printf("Copied string:%s\n",b);
return 0;
}
在这个例子中,主函数main()中的“BL_strcpy,{R0,R1}”指令的输入寄存器列表为{R0,R1},没有输出寄存器列表。子程序使用的工作寄存器位ATPCS默认工作寄存器R0~R3、R12、LR以及PSR。
2)使能和禁止中断
本例主要介绍如何利用内嵌汇编程序来使能和禁止中断。
使能和禁止中断是通过修改CPSR寄存器中的位7完成的。这些操作必须在特权模式下进行,因为在用户模式下不能使用修改CPSR寄存器中的控制位。
示例 中断的使能和禁止
__inline void enable_IRQ(void)
{
int tmp;
__asm
{
MRS tmp,CPSR
BIC tmp,tmp,#0x80
MSR CPSR_c,tmp
}
}
__inline void disable_IRQ(void)
{
int tmp;
__asm
{
MRS tmp,CPSR
ORR tmp,tmp,#0x80
MSR CPSR_c,tmp
}
}
int main(void)
{
disable_IRQ();
enable_IRQ();
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

155

主题

662

帖子

1191

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1191
2#
发表于 2016-7-14 08:49 | 只看该作者
支持一下,很不错哦!

156

主题

503

帖子

1186

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1186
3#
发表于 2016-7-14 15:08 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈

165

主题

528

帖子

1255

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1255
4#
发表于 2016-7-18 19:12 | 只看该作者
支持楼主!谢谢分享!

156

主题

559

帖子

1202

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1202
5#
发表于 2016-9-8 14:42 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-23 04:24 , Processed in 0.056726 second(s), 31 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表