这几个例题来自我们的上机实验,通过这几个例题基本上能掌握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. Android群英传知识点回顾——第十章:Android性能优化

    10.1 布局优化 10.1.1 Android UI渲染机制 10.1.2 避免Overdraw 10.1.3 优化布局层级 10.1.4 避免嵌套过多无用布局 10.1.5 Hierarchy V ...

  2. trove database功能总结

    我曾经以为trove只负责数据库(datastore)的部署,最近才发现trove可以进行数据库(database)的创建. 首先是列出某个实例上(instance)数据库(datastrore)上的 ...

  3. 自己简单配置webpack

    第一步 // 1.在新建文件夹中,npm init -y,生成package.json文件 // package.json 文件内容 { "name": "02webpa ...

  4. leetcode--200--python(深度广度优先遍历实现代码)

    点滴积累,厚积薄发,做好每一天,向时间要效率,向生命要质量. 一.深度优先搜索和广度优先搜索DFS(Depth-First-Search),是盲目搜索算法的一种.常常用在树的遍历及图的处理上.假设当前 ...

  5. 1.4CAD2017绘图基础

    1.新建(ctrl+n) 命令:new 回车——默认样板(acadiso.dwt) 2.打开(ctr+o) 3.保存(ctrl+S) 4.鼠标的应用: 左键:点击拖选等: 中间滚轮:a.滚动,放大缩小 ...

  6. 当初希望自己是如何投入这个专业的学习的?曾经做过什么准备,或者立下过什么FLAG吗?

    学习好累,打游戏好爽  我不爱学习 认真勤勉投入学习 精心准备,刻苦学习 我的flag   作为大学生,需要了解今后职场社会,对职业方向有了进一步的认识.社会对于人才的要求在某些方面都是不谋而合的,比 ...

  7. 干货 | CDN搭配OSS最佳实践 ——搭建动静态分离的应用架构

    一.传统架构及痛点 传统的网站产品应用架构,所有资源部署在应用服务器本地存储或挂载的数据存储区,对于动静态资源不作分离, 产品架构如下图所示: 该架构存在诸多问题: ● 系统性能会随着系统访问量的增长 ...

  8. NFS 文件共享

    备注:NFS 文件共享需设置两部分:服务端和客户端 一.服务端设置 1.1.查看nfs包是否安装,未安装则重新安装 [root@localhost ~]# rpm -qa|grep rpcbind r ...

  9. 题解 P5837 【[USACO19DEC]Milk Pumping】

    这题其实想法挺简单的,因为他只需要简单的把每个点的花费和流量用dp记下来就好了 1.怎么记: 首先考虑dp的状态.由于所在的点和流量都要记,所以dp开二维,一维记所在的点,另一维记去哪 //dp[i] ...

  10. SRS|Stratified sampling|系统抽样|Cluster sampling|multistage sampling|

    生物统计学 总体和抽样 抽样方法: ========================================================= 简单随机抽样SRS:随机误差,系统误差 标准误, ...