嵌入式汇编.docx
- 文档编号:4273294
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:14
- 大小:15.35KB
嵌入式汇编.docx
《嵌入式汇编.docx》由会员分享,可在线阅读,更多相关《嵌入式汇编.docx(14页珍藏版)》请在冰豆网上搜索。
嵌入式汇编
AUTHOR:
河北大学
01in_out.c
intmain(void)
{
intin=5;
intout;
__asm____volatile__(
"mov%0,%1\n"
:
"=r"(out)
:
"r"(in)
);
printf("out=%d\n",out);
}
02in_out.c
intmain(void)
{
intin=5;
intout;
__asm____volatile__(
"mov%[in],%[out]\n"
:
[out]"=r"(out)
:
[in]"r"(in)
);
printf("out=%d\n",out);
}
03in_out.c
intmain(void)
{
intout;
intin_out=10;
__asm____volatile__(
"mov%1,%0\n"
"mov%0,#20\n"
:
"+r"(in_out),"=r"(out)
);
printf("out=%d\n",out);
printf("in_out=%d\n",in_out);
}
04in_out.c
intmain(void)
{
intin=5;
intout;
__asm____volatile(
"mov%0,%1\n"
:
"+&r"(out)
:
"r"(in)
);
printf("out=%d\n",out);
}
05add.c
intmain(void)
{
intsum=0;
inta=1;
intb=2;
__asm____volatile__(
"movr0,%1\n"
"movr1,%2\n"
"add%0,r0,r1\n"
:
"=r"(sum)
:
"r"(a),"r"(b)
:
"r0","r1"
);
printf("1+2=%d\n",sum);
return0;
}
06sub.c
intmain(void)
{
intsub;
__asm____volatile(
"movr0,#2\n"
"movr1,#3\n"
"sub%0,r1,r0\n"
:
"=r"(sub)
:
:
"r0","r1"
);
printf("3-2=%d\n",sub);
return0;
}
07mul.c
intmain(void)
{
intout=0;
__asm____volatile__(
"movr0,#2\n"
"movr1,#3\n"
"mul%0,r0,r1\n"
:
"=r"(out)
:
:
"r0","r1"
);
printf("2x3=%d\n",out);
return0;
}
08cal.c
intmain(void)
{
inta=1,b=2,c=3,d=5,e=0;
__asm____volatile__(
"addr0,%1,%2\n"
"mulr1,r0,%3\n"
"sub%0,r1,%4\n"
:
"=r"(e)
:
"r"(a),"r"(b),"r"(c),"r"(d)
:
"r0","r1"
);
printf("(1+2)x3-5=%d\n",e);
return0;
}
09cmp.c
intmain(void)
{
intout=0;
__asm____volatile__(
"movr0,#1\n"
"movr1,#2\n"
"cmpr0,r1\n"
"movgt%0,#1\n"
"movle%0,#2\n"
:
"=r"(out)
:
:
"r0","r1"
);
printf("out=%d\n",out);
return0;
}
10sort.c
intmain(void)
{
inta,b,c;
__asm____volatile__(
"movr0,#1\n"
"movr1,#2\n"
"movr2,#3\n"
"cmpr0,r1\n"
"movltr3,r0\n"
"movltr0,r1\n"
"movltr1,r3\n"
"cmpr0,r2\n"
"movltr3,r0\n"
"movltr0,r2\n"
"movltr2,r3\n"
"cmpr1,r2\n"
"movltr3,r2\n"
"movltr2,r1\n"
"movltr1,r3\n"
"mov%0,r0\n"
"mov%1,r1\n"
"mov%2,r2\n"
:
"=r"(a),"=r"(b),"=r"(c)
:
:
"r0","r1","r2","r3"
);
printf("a=%db=%dc=%d\n",a,b,c);
return0;
}
11and.c
intmain(void)
{
inta,b,c,d,e=5;
__asm____volatile__(
"movr0,#0x5\n"
"movr1,#0x6\n"
"and%0,r0,#6\n"
"orr%1,r0,r1\n"
"eor%2,r0,r1\n"
"bic%3,r0,r1\n"
"and%4,#6\n"
:
"=r"(a),"=r"(b),"=r"(c),"=r"(d),"+r"(e)
:
:
"r0","r1"
);
printf("5&6=%d\n",a);
printf("5|6=%d\n",b);
printf("5^6=%d\n",c);
printf("5¬(6)=%d\n",d);
printf("5&6=%d\n",e);
return0;
}
12mrs.c
intmain(void)
{
intcpsr;
__asm____volatile__(
"mrs%0,cpsr\n"
"orr%0,%0,#0x30000000\n"
"msrcpsr,%0\n"
:
"=r"(cpsr)
);
printf("cpsr=%x\n",cpsr);
return0;
}
13logical.c
intmain(void)
{
inta,b,c,d,e;
__asm____volatile__(
"movr0,#0xfc\n"
"movr1,#-10\n"
"mov%0,r0,lsr#1\n"
"mov%1,r0,lsl#1\n"
"mov%2,r1,asr#1\n"
"mov%3,r1,lsr#1\n"
"mov%4,r0,ror#4\n"
:
"=r"(a),"=r"(b),"=r"(c),"=r"(d),"=r"(e)
:
:
"r0","r1"
);
printf("0xfc>>1=%x\n",a);
printf("0xfc<<1=%x\n",b);
printf("-10>>a1=%d\n",c);
printf("-10>>l1=%d\n",d);
printf("0xfcr>>4=%x\n",e);
return0;
}
14b.c
intmain(void)
{
inttext;
#if0
__asm____volatile__(
"mov%0,#15\n"
"bhere\n"
"mov%0,#10\n"
"here:
\n"
:
"=r"(text)
);
printf("text=%d\n",text);
#endif
__asm____volatile__(
"movr0,#1\n"
"movr1,#2\n"
"blhere\n"
"mov%0,r0\n"
:
"=r"(text)
:
:
"r0","r1"
);
printf("text=%d\n",text);
return0;
}
__asm__(
"here:
\n"
"addr0,r0,r1\n"
"movpc,lr\n"
);
15apcs.c
intmain(void)
{
inta;
__asm____volatile__(
"movr0,#1\n"
"movr1,#2\n"
"bladd\n"
"mov%0,r0\n"
:
"=r"(a)
:
:
"r0","r1"
);
printf("a=%d\n",a);
return0;
}
intadd(inta,intb)
{
returna+b;
}
16ldr.c
intmain(void)
{
inta=5;
#if0
__asm____volatile__(
"ldrr0,%0\n"
"addr0,r0,#2\n"
"strr0,%0\n"
:
:
"m"(a)
:
"r0","memeroy"
);
printf("a=%d\n",a);
#endif
intb,c;
__asm____volatile__(
"data:
\n"
".word0x1,0x2,0x3,0x4\n"
//"ldrr0,=data\n"
"adrr0,data\n"
//"ldr%0,[r0]\n"
//"ldr%1,[r0,#4]\n"
"ldr%0,[r0,#4]!
\n"
"ldr%1,[r0,#4]!
\n"
//"ldr%0,[r0],#4\n"
//"ldr%1,[r0]\n"
:
"=r"(a),"=r"(b)
);
printf("a=%d\n",a);
printf("b=%d\n",b);
return0;
}
17list.c
intmain(void)
{
inta;
__asm____volatile__(
"list_create:
\n"
"subsp,sp,#24\n"
"movr0,sp\n"
"movr1,#10\n"
"strr1,[sp]\n"
"addr0,r0,#8\n"
"strr0,[sp,#4]\n"
"movr1,#20\n"
"strr1,[sp,#8]\n"
"addr0,r0,#8\n"
"strr0,[sp,#12]\n"
"movr1,#30\n"
"strr1,[sp,#16]\n"
"movr0,#0\n"
"strr0,[sp,#20]\n"
"list_find:
\n"
"movr4,#340\n"
"movr0,sp\n"
"ldrr1,[r0],#4\n"
"loop:
\n"
"cmpr1,r4\n"
"moveq%0,#1\n"
"movne%0,#0\n"
"beqend\n"
"ldrr3,[r0],#8\n"
"cmpr3,#0\n"
"beqend\n"
"ldrr1,[r3]\n"
"bloop\n"
"end:
\n"
"addsp,sp,#24\n"
:
"=r"(a)
:
:
"r0","r1","r2","r3","r4"
);
printf("a=%d\n",a);
return0;
}
18push.c
intmain(void)
{
inta,b,c,d;
__asm____volatile__(
"movr0,#1\n"
"movr1,#2\n"
"movr2,#3\n"
"movr3,#4\n"
"stmfdsp!
{r0-r3}\n"
"ldmfdsp!
{r4-r7}\n"
"mov%0,r4\n"
"mov%1,r5\n"
"mov%2,r6\n"
"mov%3,r7\n"
:
"=r"(a),"=r"(b),"=r"(c),"=r"(d)
:
:
"r0","r1","r2","r3","r4","r5","r6","r7"
);
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
printf("d=%d\n",d);
return0;
}
19imm.c
intmain(void)
{
__asm____volatile__(
"movr4,#0x00ff00\n"
"msrcpsr,#0x80000000\n"
);
return0;
}
20mod.c
intmain(void)
{
intb,s,g;
__asm____volatile__(
"ldrr0,=0x123\n"
"blmod\n"
"mov%0,r1\n"
"mov%1,r2\n"
"mov%2,r3\n"
:
"=r"(b),"=r"(s),"=r"(g)
:
:
"r0","r1","r2","r3"
);
printf("b=%d\n",b);
printf("s=%d\n",s);
printf("g=%d\n",g);
return0;
}
__asm__(
"mod:
\n"
"andr4,r0,#0xf00\n"
"movr1,r4,lsr#8\n"
"andr4,r0,#0xf0\n"
"movr2,r4,lsr#4\n"
"andr4,r0,#0xf\n"
"movr3,r4,lsr#0\n"
"movpc,lr\n"
);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 汇编