这几个例题来自我们的上机实验,通过这几个例题基本上能掌握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

arm汇编几个经典例题的更多相关文章

  1. ARM汇编指令的一些总结-转

    ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了.比较有用的是MOV B BL LDR STR还是通过具体汇编代码来学习吧.@ disable watch ...

  2. ARM 汇编的mov操作立即数的疑问

    1. 因为对arm汇编有些指令还不能理解,特别是一些相似功能指令间的区别.偶然在网上搜到"faq ARM assembly",其中描述的几个问题还是值得好好研究一下. 2. 慢慢的 ...

  3. 生成ARM汇编

    使用ndk即可生成arm汇编 1.首先写好hello.c 2.编写makefile #ndk根目录 NDK_ROOT=E:\Android\android-ndk-r10b #编译器根目录 TOOLC ...

  4. ARM汇编指令调试方法

    学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...

  5. C语言经典例题100

    C语言经典例题100 来源 http://www.fishc.com 适合初学者 ----------------------------------------------------------- ...

  6. ARM汇编

    ARM汇编 ISA ISA即指指令集架构(Instruction Set Architecture)是与程序设计有关的计算机架构的一部分,包括本地数据类型.指令.寄存器.地址模式.内存架构.中断和意外 ...

  7. 3.1 ARM汇编编程概述

    1. 汇编编程 为什么要学习汇编 1). Bootloader初始化 2). Linux kernel 3). 高效 2. ARM汇编分类 1. ARM标准汇编:ARM公司得汇编器适合在Windows ...

  8. arm汇编进入C函数分析,C函数压栈,出栈,传参,返回值

    环境及代码介绍 环境和源码 由于有时候要透彻的理解C里面的一些细节问题,所有有必要看看汇编,首先这一切的开始就是从汇编代码进入C的main函数过程.这里不使用编译器自动生成的这部分汇编代码,因为编译器 ...

  9. GNU风格 ARM汇编语法指南

    汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设置页表.操作 ARM的协处理器等.这些初始化工作完成后就可以跳转到C代码main函数中执行. 1.  GNU汇编语言语句格式 任何Linux汇编 ...

随机推荐

  1. 2020/2/6 PHP编程学习

    今天把后台数据库处理好了,用了框架后真就是搬砖的一天..晚上继续刷题,明天把数据库处理完,这样一个商城框架就有了:

  2. 洛谷 P5662 纪念品

    题目传送门 解题思路: 一道DP,完全背包,不过有点不同于模板.因为本题的每件物品可自由在不同的时间买卖,且不同时间价格不同. 这道题的关键在于要明白一个非常傻逼的性质,就是我在某天买了第i个物品,然 ...

  3. 配置gitlab代码提交之后自动触发jenkins

    https://www.cnblogs.com/bugsbunny/p/7919993.html

  4. Cavace 自定义View绘制

    一.开发资料与实例教程1.跟囧猫学之Canvas.Matrix 倒影实例教程 http://www.eoeandroid.com/thread-158506-1-1.html 2.Gridview 控 ...

  5. mysql 去除重复 Select中DISTINCT关键字的用法(查询两列,只去掉重复的一列)

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...

  6. Asp.NET CORE安装部署

    先安装IIS再安装这两个,不然后面各种bug HTTP 错误 500.19 代码 0x8007000d 解决方案 for win7_64 asp.net core IIS Web Core 1.比如最 ...

  7. D语言-变量、输入、输出、注释

    Part 1:变量 D语言的变量有很多类型,这里只讨论几个基本类型 §1.1变量的定义方法 在D语言中,变量的定义方法是这样子的: [typename] [var1,var2,var3...] 其中, ...

  8. Centos7下yum安装软件报错解决办法

    Traceback (most recent call last): File "/usr/bin/yum", line 29, in yummain.user_main(sys. ...

  9. 吴裕雄--天生自然 JAVASCRIPT开发学习: DOM - 改变 HTML

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Necroptosis|Apoptosis|CTC|

    大数据-外周血研究 Necroptosis与Apoptosis...区别:肿瘤导致和自身凋亡. CTC,肿瘤细胞脱落进入外周血,CTC(循环肿瘤细胞,CirculatingTumorCell)是存在于 ...