这几个例题来自我们的上机实验,通过这几个例题基本上能掌握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. kuangbin专题——简单搜索

    A - 棋盘问题 POJ - 1321 题意 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大 ...

  2. Codeforces 1290A/1291C - Mind Control

    题目大意: 总共有n个人和n个数字 n个人拍成一队,n个数字也是有顺序的 你排在第m个位置 按照顺序的每个人可以拿走这个序列中的第一个数字或者最后一个数字 你可以在所有人操作开始前说服最多k个人 让他 ...

  3. Maven:Failed to read artifact descriptor for xxx

    Maven多模块项目jar包引用问题: Failed to execute goal on project xxx-service: Could not resolve dependencies fo ...

  4. Python爬虫连载1-urllib.request和chardet包使用方式

    一.参考资料 1.<Python网络数据采集>图灵工业出版社 2.<精通Python爬虫框架Scrapy>人民邮电出版社 3.[Scrapy官方教程](http://scrap ...

  5. 题解 P1317 【低洼地】

    题目 这题挺简单的,没必要用数组 [分析] 需要判断的是低洼地的数量 通过对题目中图进行分析,显然可以发现低洼地的定义: 若数组中存在一个数值相同的连续区间,这个区间端点外相邻两点的数值都大于该区间的 ...

  6. 3.GIT常用命令

    往仓库里面添加文件 将新的文件放到暂存区 git add 文件名(多个文件用空格分隔) git commit -m '说明内容' git commit --amend 此修改一般用于未push之前修改 ...

  7. protobuf 的enum与string转换

    c/c++ enum 介绍 说起c/c++ 的enum,比起python 真的是方便简洁 enum type{ type1 = 0, type2 } enum的元素对应的int 默认从0 开始依次增加 ...

  8. ZJNU 2340/2341/2343 - 罗小黑的“礼物”Ⅰ/Ⅱ/Ⅲ

    把一位数.两位数.三位数……这些所在的范围分开判断 可得1~9这些数范围在[1,9]内 10~99内共有90个数,每个数占两位,所以共有180位在,范围在[10,189]内 同理,100~999内共有 ...

  9. UVA 125 统计路径条数 FLOYD

    这道题目折腾了我一个下午,本来我的初步打算是用SPFA(),进行搜索,枚举出发点,看看能到达某个点多少次,就是出发点到该点的路径数,如果出现环,则置为-1,关键在于这个判环过程,如果简单只找到某个点是 ...

  10. 吴裕雄--天生自然 PHP开发学习:MySQL 插入数据

    <?php $servername = "localhost"; $username = "root"; $password = "admin& ...