这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [原创]经典的测试ldmfd程序

共1条 1/1 1 跳转至

[原创]经典的测试ldmfd程序

菜鸟
2006-08-05 22:58:56     打赏


/** 想检测哪个指令的用法,只要把0改为1就行了,0K */

.global _main
.text
_main:

ldr r0,=0x8040
ldr r1,=0x10000
mov r5,#0x05
mov r6, #0x06
mov r7,#0x07

mov sp,#0x400

mov r8,#0x8
mov r9,#0x9
mov r10,#0x10
mov r11,#0x11


.equ y, 0x40

# 下面是堆栈的指令掌握


str r6, [sp]
str r11,[sp,#0x04]
str r10,[sp,#0x08]
str r8,[sp,#0xc]

str r10,[sp,#-0x04]
str r9,[sp,#-0x8]
str r11,[sp,#-0xc]


.ifeq y-0x40

stmfd sp!,{r5-r7}
mov r5,#0xf
ldmfd sp!,{r5-r7} /*是从栈顶开始,向上,SP最后指向出栈的下一个数据*/
ldmed sp!,{r5-r7} /*是栈顶的上一个位置开始,最后指向最后出栈的数据*/
.endif


.if 0
ldmea sp!,{r5-r7} /* 从栈顶的下一个位置开是保存寄存器,最后指向出栈的数据*/
ldmfa sp!,{r5-r7} /*栈顶的位置开是保存寄存器,最后指向存入的数据的下一个*/

.endif

#3:存储都是从栈顶的相邻数据(要么上一个或者下一个)开始的,SP指想最后一个进入栈的数据(F)
/* stmfa sp!,{r5-r7}*/
/* stmfd sp!,{r5-r7}*/


#4:存储都是从栈顶开始的(要么向下,要么向上),SP指想最后一个进入栈的数据的下一个或上一个(E)
/*stmed sp!,{r5-r7} */
/* stmea sp!,{r5-r7}*/


#下面是多寄存器的传输测试;WEILCOME TO TEST TI ;HOPE IT IS USEFUL TO YOU ;
/*** 这两个是一类的 ***/
.if 0
str r5,[r0,#-0x04]
str r7,[r0,#-0x0c]
LDMDB r0!,{R5-R7}
stmdb r1!,{r5-r7}
.endif


.if 0
str r5,[r0,#0x04]
str r7,[r0,#0x0c]
ldmib r0!,{R5-R7} /* 检测LDMIB的用法,指针是指向读写的数据的;*/
stmib r1!,{r5-r7}
.endif
/*** WELCOME TO USE IT **/



/** 下面是一类的,**/
.if 0
stmda r0!, {r5-r7}
ldmda r1!, {r5-r7}
.endif


.if 0
stmia r0!,{r5-r7} /*#检测STMIA 看看R0的最后地址;就明白了;*/
ldmia r1!,{r5-r7} /* #;检测LDMIA,这两个的指针(R0,R1)是指向下一个*/
.endif

/*** welcome TO use it ***/

stop:
b stop
.end

[em19][em19][em19][em19][em19][em19][em30][em27]



关键词: 原创     经典     测试     ldmfd     程序     r5-r7    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]