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

    一事无成的上午..就安了框架解决了一些报错信息 下面简单了解一下 安装一下框架: 什么是路由: 系统从URI(唯一资源定位器)参数中分析出当前请求的分组(平台),控制器和操作方法的过程就是路由. UR ...

  2. hook截获自定义消息

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  3. hook鼠标

    library dllMouse; uses SysUtils, Classes, UnitHookDLL in 'UnitHookDLL.pas', UnitHookConst in 'UnitHo ...

  4. tfield的字段名和显示名

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  5. ADS1.2 调试问题

    最近一个程序需要用到ADS1.2这个软件,在使用过程中出现了如下问题: 1.由于以前用的是KEIL,所以没找到文件的工程,查资料才发现,这个工程文件打开的文件是MCP格式的文件: 2.调试的时候,没找 ...

  6. Element.shadowRoot

    Element.shadowRoot http://www.zhuyuntao.cn/shadow-dom的样式/ Shadow DOM的样式 我们已经可以使用原生的操作DOM的方式和使用模板的方式来 ...

  7. 将hello程序作为驱动程序编译进系统内核

    0x00开始 恩,可能是我比较愚钝,一个内核编译搞了一天,各种问题,各种bug,几度无奈,也是因为我突发奇想,并没有按照原来的那种操作,我直接把helloworld程序放到内核模块中编译成了一个驱动程 ...

  8. 38. docker cloud 简介及 关联 git hub

    1.概念 提供 容器的管理, 编排, 部署 的托管服务 2.功能 image 管理 创建 stack 创建服务 service 添加 节点 作为 docker host 自动关联云服务商 AWS  A ...

  9. share团队冲刺2

    团队冲刺第二天 昨天:在网上学习app开发的简单操作代码,实现了简单的输出界面,学会了添加按钮控件. 今天:继续昨天的进度,先进行登陆界面窗口的制作. 问题:目前只能在activity添加简单代码,复 ...

  10. web项目servlet&jsp包失效问题

    今天偶然遇到这样的一个问题,故做个总结. javaee开发只用到serlet和jsp两个包.而sun提供的jdk只是javase部分的包,对于se部分只提供了规范,而包由容器给出. 由于自己在新建好一 ...