ARM基础指令练习题汇总
• 答案:
• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • AREA CMP_subs,CODE,READONLY num EQU 20 ENTRY START LDR r0, =src LDR r1, =dst MOV r2, #num MOV sp, #0x400 Blockcopy MOVS r3,r2, LSR #3 BEQ copywords STMFD sp!, {r4~r11} Octcopy LDMIA r0!, {r4-r11} STMIA r1!, {r4-r11} SUBS r3,r3,#1 BEN Octcopy LDMFD sp!, {r4-r11} Copywords ANDS r2,r2,#7 BEQ STOP Wordcopy LDR r3, [r0],#4 STR r3, [r1],#4 SUBS 2,r2,#1 BEN Wordcopy AREA BlockData,DATA,READWRITE src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END
src DCD 1,2,3,4,5,6,7,8,1,2, 3,4,5,6,7,8,1,2,3,4 dst DCD 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
• 5. 内存数据区定义上。要求将数据从
源数据区复制到目标数据区。复制时, 以8个字为单位进行。对于最后所剩不足 8个字的数据,以字为单位进行复制。
3、循环程序设计
• 例:计算1+2+3+...+100的结果
sum=0; for(i=0; i<100; i++ ) sum=sum+i;
• 答案: • AREA Reycle, CODE, READONLY • ENTRY • MOV R1,#1 • MOV R2,#100 • START • ADD R3,R3,R1 • ADD R1,R1,#1 • CMP R1,#101 • BNE START • STOP • B STOP • END
ldr r0,=_a ldr r1,=_b ldr r2,[r0] ldr r3,[r1]
_loop
cmp r2,r3 beq _store subhi r2,r2,r3 sublo r3,r3,r2 b _loop
_store str r2,[r0] str r3,[r1] stop b STOP END
• 4. C语言:
while (a!=b) { if(a>b) a-=b; else b-=a; }
• 如果用ARM汇编程序来实现,假设两个整数 分别放在寄存器R1和R2中。将结果放到R3中。
• 答案:
• • • • • • • • • • • • • • • • • • • • • • • • • • AREA buf,DATA,READWRITE _a dcd 0x10 _b dcd 0x06 AREA e4,CODE,READONLY ENTRY code32
Array
AREA DCD DCD DCD
Buf,DATA,READWRITE 0x11,0x22,0x33,0x44 0x55,0x66,0x77,0x88 0x00,0x00,0x00,0x00
;定义数据段Buf ;定义12个字的数组Array
Array
AREA Buf,DATA,READWRITE ;定义数据段Buf DCD 0x11,0x22,0x33,0x44 ;定义12个字的数组Array DCD 0x55,0x66,0x77,0x88 DCD 0x00,0x00,0x00,0x00 AREA Example,CODE,READONLY ENTRY CODE32 LDR R0,=Array ;取得数组Array首地址 LDR R2,[R0] ;装载数组第1项字数据给R2 MOV R1,#4 LDR R3,[R0,R1,LSL #2] ;装载数组第5项字数据给R3 ADD R2,R2,R3 ;R2 + R3→R2 MOV R1,#8 ;R1=8 STR R2,[R0,R1,LSL #2] ;保存结果到数组第9项 END
ARM基础指令程序练习
本练习题是学习ARM基础指令之后的一 次汇总练习,欢迎学习嵌入式的同学交 流指导,切勿用于盈利传播,版权所有, 一经发现,违者必受法律严惩。
1、顺序程序设计
例:通过查表操作实现数组中的第1项数据和第5 项数据相加,结果保存到数组中 。
读取第1项数据 保存结果 读取第5项数据 结束 两项数据相加
2、分支程序设计
• 例.判读X、Y两个变量的大小,从而给变量Z 赋予不同的值
变量X、Y赋值
//if-else结构
int x=76,y=88;
X>Y? Z = 50
Yes
Z = 100
No
结束
if(x>y) else
z=100; z=50;
答案: • AREA Recyle_Just,CODE,READONLY • ENTRY • MOV R0,#32 • MOV R1,#46 • Loops • CMP R0,R1 • BEQ Next1 • CMP R0,R1 • BGT SSS • SUBS R1,R1,R0 • MOV R2,R1 • B Loops • SSS • SUBS R0,R0,R1 • MOV R2,R0 • B Loops • Next1 • END