小学文化不懂啥是循环队列,也不懂C语言。
如果是一定地址之间循环的数组的话可以参照下我下面写的。
r4貌似要存不了这么大的数啊
汇编器 arm-none-eabi-as
equ myarray, 0x20000018
equ duiliechangdu, 40
ldr r0, = myarray
ldr r3, = duiliechangdu
mov r1, r3
mov r2, # 0
mov r4, # 0
dd1:
ldr r2, [r0, r1]
add r4, r4, r2
cmp r2, # 0
beq tiaochuqu
subs r1, # 4
bne dd1
mov r1, r3
b dd1
tiaochuqu:
b tiaochuqu
N
EQU
5
;定义N
代表5
AREA
Adding,
CODE,
READONLY
;定义段名Adding
读代码段
ENTRY
;指定程序入口
MOV
R0,#0
;
立即数0加载
R0
MOV指令
能加载8位立即数
MOV
R1,#1
;
立即数1加载
R1
#代表
立即数
REPEAT
;
设置标号
ADD
R0,R0,R1
;
R0
R1项加并存储
R0
ADD
R1,R1,#1
;;
R1
立即数1项加并存储
R1
CMP
R1,#N
;比较R1
立即数N
N前面定义代表5;
BLE
REPEAT
;
相等跳转
标号REPEAT
相等继续往
执行
LDR
R2,=RESULT
;加载表RESULT
址
R2
STR
R0,[R2]
;
R0存储
R2指向
表
HERE
B
HERE
;
B
条件跳转
标号HERE
AREA
DataSpace,
DATA,
READWRITE
;定义段名DataSpace
读写数据段
RESULT
DCD
0;定义表
END
;程序结束
;以下为六种中断堆栈大小定义
UND_Stack_Size EQU 0x00000000 ;EQU是汇编伪指令,可以将它代替为“=”
SVC_Stack_Size EQU 0x00000008
ABT_Stack_Size EQU 0x00000000
FIQ_Stack_Size EQU 0x00000000
IRQ_Stack_Size EQU 0x00000080
USR_Stack_Size EQU 0x00000400
ISR_Stack_Size EQU (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \
FIQ_Stack_Size + IRQ_Stack_Size) ;同上解释
;定义段,名为STACK,未说明是代码段还是数据段,属性为读写,代码对齐方式为2的3次方字节
AREA STACK, NOINIT, READWRITE, ALIGN=3
;SPACE分配一段连续的的存储区域并初始化为0,USR_Stack_Size为要分配的字节数
Stack_Mem SPACE USR_Stack_Size
__initial_sp SPACE ISR_Stack_Size
1A,P1,P2,,P17,P18(以点定义面)
2AADD,NA1,NA2,NA8,NA9(面相加)
3AATT,MAT,REAL,TYPE,ESYS,SECN(指定面的单元属性)
注ESYS为坐标系统号、SECN为截面类型号。
4ABBR,Abbr,String(定义一个缩略词)
5ABBRES,Lab,Fname,Ext(从文件中读取缩略词)
6ABBSAVE,Lab,Fname,Ext(将当前定义的缩略词写入文件)
7ABS,IR,IA,--,--,Name,--,--,FACTA(取绝对值)
注
8ACCAT,NA1,NA2(连接面)
9ACEL,ACEX,ACEY,ACEZ(定义结构的线性加速度)
10ACLEAR,NA1,NA2,NINC(清除面单元网格)
11ADAMS,NMODES,KSTRESS,KSHELL
注
12ADAPT,NSOLN,STARGT,TTARGT,FACMN,FACMX,KYKPS,KYMAC
注
13ADD,IR,IA,IB,IC,Name,--,--,FACTA,FACTB,FACTC(变量加运算)
14ADELE,NA1,NA2,NINC,KSWP(删除面)
注KSWP=0删除面但保留面上关键点、1删除面及面上关键点。
15ADRAG,NL1,NL2,,NL6,NLP1,NLP2,,NLP6(将既有线沿一定路径拖拉成面)
16AESIZE,ANUM,SIZE(指定面上划分单元大小)
17AFILLT,NA1,NA1,RAD(两面之间生成倒角面)
18AFSURF,SAREA,TLINE(在既有面单元上生成重叠的表面单元)
19AFUN,Lab(指定参数表达式中角度单位)
20AGEN,ITIME,NA1,NA2,NINC,DX,DY,DZ,KINC,NOELEM,IMOVE(复制面)
21AGLUE,NA1,NA2,,NA8,NA9(面间相互粘接)
22AINA,NA1,NA2,,NA8,NA9(被选面的交集)
23AINP,NA1,NA2,,NA8,NA9(面集两两相交)
24AINV,NA,NV(面体相交)
25AL,L1,L2,,L9,L10(以线定义面)
26ALIST,NA1,NA2,NINC,Lab(列表显示面的信息)
注Lab=HPT时,显示面上硬点信息,默认为空。
27ALLSEL,LabT,Entity(选择所有实体)
注LabT=ALL(指定实体及其所有下层实体)、BELOW(指定实体及其下一层实体);
Entity=ALL、VOLU、AREA、LINE、KP、ELEM、NODE。
28AMESH,NA1,NA2,NINC(划分面生成面单元)
AMESH,AREA,KP1,KP2,KP3,KP4(通过点划分面单元)
29/AN3D,Kywrd,KEY(三维注释)
30ANCNTR,NFRAM,DELAY,NCYCL(在POST1中生成结构变形梯度线的动画)
31ANCUT,NFRAM,DELAY,NCYCL,QOFF,KTOP,TOPOFF,NODE1,NODE2,NODE3(在POST1中生成等势切面云图动画)
32ANDATA,DELAY,NCYCL,RSLTDAT,MIN,MAX,INCR,FRCLST,AUTOCNTRKY(生成某一范围内的结果数据的顺序梯度线动画)
33ANDSCL,NFRAM,DELAY,NCYCL(在POST1中生成结构变形的动画)
34ANFLOW,NFRAM,DELAY,NCYCL,TIME,SPACING,SIZE,LENGTH(生成粒子流或带电粒子运动的动画)
35/ANGLE,WN,THETA,Axis,KINCR(绕指定轴旋转视图)
36ANHARM,NFRAM,DELAY,NCYCL(生成谐波分析的动画)
37ANIM,NCYCL,KCYCL,DELAY(动画显示图形序列)
注
38ANISOS,NFRAM,DELAY,NCYCL(在POST1中生成等势面云图动画)
39ANMODE,NFRAM,DELAY,NCYCL,KACCEL(在POST1中生成结构变形模态的动画)
40/ANNOT,Lab,VAL1,VAL2(激活图形显示注释)
注Lab=OFF、ON、DELE、SAVE、SCALE、XORIG、YORIG、SNAP、STAT、DEFA、REFR、TMODE。
41ANORM,ANUM,NOEFLIP(重新定义面的法线方向)
注NOEFLIP=0、1。
42ANTIME,NFRAM,DELAY,NCYCL,AUTOCNTRKY,RSLTDAT,MIN,MAX(在指定时间段内生成动画)
43ANTYPE,Antype,Status,LDSTEP,SUBSTEP,Action(定义分析类型)
注Label=STATIC、BUCKLE、MODAL、HARMIC、TRANS;
Status=NEW、REST;
Action=CONTINUE、ENDSTEP、RSTCREATE。
44/ANUM,NUM,TYPE,XHOT,YHOT(指定注释的数目、类型和热点位置)
45AOFFST,NAREA,DIST,KNIC(偏移生成面)
46AOVLAP,NA1,NA2,,NA8,NA9(面搭接)
47APLOT,NA1,NA2,NINC,DEGEN,SCALE(显示所选面)
48APPEND,Lstep,SBSTEP,FACT,KIMG,TIME,ANGLE,NSET(读入载荷结果数据)
49APTN,NA1,NA2,,NA8,NA9(面间相互分割)
50AREFINE,NA1,NA2,NINC,LEVEL,DEPTH,POST,RETAIN(将面附近的单元网格细化)
注LEVEL:指定细化的程度(1、2、3、4、5);DEPTH:指定细化的深度;
POST=CLEAN(对细化区域进行光滑和清理工作)、SMOOTH(只作光滑工作)、OFF;
RETAIN=ON(对于全是四边形的网格,细化不会将三角形引入)、OFF(可能将三角形引入)
51AREVERSE,ANUM,NOEFLIP(将面的法线方向反向)
52AROTAT,NL1,NL2,NL3,NL4,NL5,NL6,PAX1,PAX2,ARC,NSEG(绕轴旋转生成面)
注PAX1,PAX2为定义轴的关键点;ARC为旋转角度。
53ARSCALE,NA1,NA2,NINC,RX,RY,RZ,KINC,NOELEM,IMOVE(面缩放)
54ASBA,NA1,NA2,SEPO,KEEP1,KEEP2(面减面)
55ASBL,NA,NL,SEPO,KEEP1,KEEP2(面减线)
56ASBV,NA,NV,SEPO,KEEP1,KEEP2(面减体)
57ASBW,NA,SEPO,KEEP(工作平面分离面)
58ASEL,Type,Item,Comp,VMIN,VMAX,VINC,KSWP(选择面)
注Item=HPT时,选择包含硬点的面。
59ASKIN,NL1,NL2,,NL8,NL9(通过引导线由蒙皮生成光滑曲面)
60ASUB,NA1,P1,P2,P3,P4(选择面的一部分生成新面)
61ARSYM,Ncomp,NA1,NA2,NINC,KINC,NOELEM,IMOVE(面镜像)
62ATRAN,KCNTO,NA1,NA2,NINC,KINC,NOELEM,IMOVE(将面转化到另一坐标系)
63/AUTO,WN(启动自动调整模式)
64AUTOTS,Key(设定自动时间步长)
65AVPRIN,KEY,EFFNU(指定在同一节点处先计算主应力或矢量和,再进行平均)
66/BATCH,Lab(进入批处理模式)
注Lab=LIST(批处理的输出包括输入文件列表)、black。
67BF,NODE,Lab,VAL1,VAL2,VAL3,PHASE(在节点上施加体载荷)
68BFA,AREA,Lab,VAL1,VAL2,VAL3,PHASE(在面上施加体载荷)
69BFADELE,AREA,Lab(删除面上的体载荷)
70BFALIST,AREA,Lab(列表显示面上的体载荷)
71BFCUM,Lab,Oper,FACT,TBASE(设置节点上体载荷的施加方式)
注Oper=REPL(后定义的值替换原值)、ADD(后定义的值与原值相加)、IGNO(忽略后值);
72BFDELE,NODE,Lab(删除节点上的体载荷)
73BFE,ELEM,Lab,STLOC,VAL1,VAL2,VAL3,VAL4(在单元上施加体载荷)
74BFECUM,Lab,Oper,FACT,TBASE(设置单元上体载荷的施加方式)
75BFEDELE,ELEM,Lab(删除单元上的体载荷)
76BFELIST,ELEM,Lab(列表显示单元上的体载荷)
77BFESCALE,Lab,FACT,TBASE(按比例缩放节单元上的体载荷)
78BFK,KPOI,Lab,VAL1,VAL2,VAL3,PHASE(在关键上施加体载荷)
79BFKDELE,KPOI,Lab(删除关键点上的体载荷)
80BFKLIST,KPOI,Lab(列表显示线关键点上的体载荷)
81BFL,LINE,Lab,VAL1,VAL2,VAL3,PHASE(在线上施加体载荷)
82BFLDELE,Line,Lab(删除线上的体载荷)
83BFLIST,NODE,Lab(列表显示节点上的体载荷)
84BFLLIST,LINE,Lab(列表显示线上的体载荷)
85BFSCALE,Lab,FACT,TBASE(按比例缩放节点上的体载荷)
86BFTRAN(将实体模型中的体载荷转换到有限元模型)
87BFUNIF,Lab,VALUE(在所有节点施加均匀的体载荷)
88BFV,VOLU,Lab,VAL1,VAL2,VAL3,PHASE(在体上施加体载荷)
89BFVDELE,VOLU,Lab(删除体上的体载荷)
90BFVLIST,VOLU,Lab(列表显示体上的体载荷)
91BLC4,XCORNER,YCORNER,WIDTH,HEIGHT,DEPTH(指定角点位置生成矩形或长方体)
92BLC5,XCENTER,YCENTER,WIDTH,HEIGHT,DEPTH(指定中心位置生成矩形或长方体)
93BLOCK,X1,X2,Y1,Y2,Z1,Z2(根据两角点生成长方体)
94BOPTN,Label,Value(对布尔运算进行设置)
注Label=KEEP,设定是否保留源图元,Value(YES、NO)
Label=PTOL,设定警告或错误信息,Value(0、2、-1)
Label=NWARN,设定布尔运算程序版本,Value(RV52、RV51)
Label=VERSION,设定运算公差,Value
95BSPLIN,P1,P2,P3,P4,P5,P6,XV1,YV1,ZV1,XV6,YV6,ZV6(拟合样条曲线)
ADD proc
arg_C equ 0xC
arg_8 equ 8
arg_4 equ 4
arg_0 equ 0
MOV R12, SP
STMFD SP!, {R0-R3} ;四个参数
STMFD SP!, {R4-R10,R12,LR}
SUB SP, SP, #0x10
LDR R0, [SP,#0x34+arg_0]
LDR R1, [SP,#0x34+arg_4]
LDR R2, [SP,#0x34+arg_8]
ADD R0, R0, R1
ADD R0, R0, R2
ADD SP, SP, #0x10
LDMFD SP, {R4-R10,SP,PC}
ENDP
如果参数传递大于 4 个,那么你在 BL 的地方应使用:
STR R0, [SP,#0x8] ;第七个
STR R0, [SP,#0x4] ;第六个
STR R0, [SP,#0x0] ;第五个
============================================
我理解你的意思了
LDR r0,=0x1
LDR r1,=0x2
LDR r2,=0x3
BL add
改为:
LDR r0,=0x1
STR R0, [SP,#0x0]
LDR r1,=0x2
STR R1, [SP,#0x4]
LDR r2,=0x3
STR R2, [SP,#0x8]
BL ADD
你是这个意思吧
------------
int a = R0
int b = R1
int c = R2
以上就是关于写一段 ARM汇编程序:循环累加队列myarray中的所有元素,直到碰上零值元素,结果放在r4中.全部的内容,包括:写一段 ARM汇编程序:循环累加队列myarray中的所有元素,直到碰上零值元素,结果放在r4中.、帮忙解释一下这段ARM汇编程序代码,谢谢!、关于ARM启动代码的简单问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)