arm汇编几个经典例题

这几个例题来自我们的上机实验,通过这几个例题基本上能掌握arm汇编一些最基本的操作

arm汇编实现1-100的加法

1
2
3
4
5
6
7
8
9
10
11
12
13
	AREA Example1,CODE,READONLY;
ENTRY;
CODE32;
START
MOV R0,#0;总和
MOV R1,#0;遍历数
MOV R2,#100;至多少
TIME
ADDS R1,R1,#1;遍历数自加1
ADDS R0,R0,R1;总和增加
CMP R1,R2;判断
BCC TIME;循环
END;

求一个二进制数中1的个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
	AREA lab2,CODE,READONLY;
ENTRY

start
MOV r1,#0xac
;10101100共4个1
MOV r6,#0;记录1的个数
step
SUB r0,r1,#1;写r1-1到r0
AND r1,r0,r1;对r1与r1-1求与
ADD r6,r6,#1;记录数+1
CMP r1,#0;判断是否取完
BNE step;否则继续

END

求一个二进制数的数组中1的个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
	AREA lab2,CODE,READONLY;
ENTRY

start
LDR r2,=nums
MOV r6,#0;初始化1的个数为0
LDRB r1,[r2],#1
step
SUB r0,r1,#1;写r1-1到r0
AND r1,r0,r1;对r1与r1-1求与
ADD r6,r6,#1;记录数+1
CMP r1,#0;判断一个数是否取完
LDREQB r1,[r2],#1;取完则访问下一个数
CMP r1,#0;判断是否读到最后一个数字
BNE step
MOV r5,r6,LSR #1;将r6最后一位移入标志C位
MOVCS r7,#1;为1则为奇数

AREA data,DATA,READWRITE
nums
;数组
DCB 21
DCB 52
DCB 16
DCB 65
DCB 95
DCB 21
DCB 52
DCB 16
DCB 65
DCB 95
DCB 21
DCB 52
DCB 16
DCB 65
DCB 95
DCB 21
DCB 52
DCB 16
DCB 65
DCB 95
DCB 21
DCB 52
DCB 16
DCB 65大专栏  arm汇编几个经典例题>
DCB 95
DCB 21
DCB 52
DCB 16
DCB 65
DCB 95
DCB 21
DCB 52
DCB 16
DCB 65
DCB 95
DCB 21
DCB 52
DCB 16
DCB 65
DCB 95
DCB 21
DCB 52
DCB 16
DCB 65
DCB 95
DCB 21
DCB 52
DCB 16
DCB 65
DCB 95
DCB 0;

END

arm实现两个数字求最大公约数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
	AREA lab3,CODE,READONLY;
ENTRY

start
LDR r0,=546;初始化第一个数
LDR r1,=999;初始化第二个数
step
CMP r0,r1;比较r0与r1
SUBHI r0,r0,r1;谁大,谁被除
SUBLO r1,r1,r0;谁大,谁被除
BEQ over;相等则求到结果,结束
B step;重复

over
B over

END

arm实现字符串的复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
	AREA lab1,CODE,READONLY;
ENTRY

start
LDR r0,=chars1;传入源字符串
LDR r1,=chars2;传入目标字符串
step
LDRB r2,[r0],#1;递增读取单个字符
STRB r2,[r1],#1;递增写入单个字符
CMP r2,#0;判断是否写到最后最后一个字符
BNE step;否则继续复制


AREA data,DATA,READWRITE
chars1
;源字符串
DCB "abcdefghijklmnopqrstuvwxyz"
DCD 0;

chars2
;目标字符串
DCD 0;

END

arm实现冒泡法排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
	AREA lab4,CODE,READONLY;
ENTRY

start
MOV r7,#7;初始化外层循环计数
out
LDR r0,=nums;初始化内层地址
MOV r6,r7;利用外层初始化内层循环计数
in
LDRB r1,[r0];
ADD r2,r0,#1;
LDRB r3,[r2];
CMP r1,r3;比较前后两个
STRCSB r1,[r2];小的往前放
STRCSB r3,[r0];大的往后放
ADD r0,r0,#1;
SUB r6,r6,#1;
CMP r6,#2;
BNE in;
SUB r7,r7,#1;
CMP r7,#2;外层循环6次
BNE out;

AREA data,DATA,READWRITE
nums
;数组
DCB 2
DCB 4
DCB 10
DCB 8
DCB 14
DCB 1
DCB 20
DCD 0;

END
原文地址:https://www.cnblogs.com/lijianming180/p/12375968.html