ARM编程实例.docx
- 文档编号:9349827
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:8
- 大小:16.07KB
ARM编程实例.docx
《ARM编程实例.docx》由会员分享,可在线阅读,更多相关《ARM编程实例.docx(8页珍藏版)》请在冰点文库上搜索。
ARM编程实例
ARM编程实例
ARM汇编编程-实现双层for循环
;
AREA Block, CODE ; 声明代码段
ENTRY
; for(i=0;i<10;i++)
; for(j=i+1;j<=10;j++)
; z+=1
START
MOVR1,#0 ;i=0
MOVR0,#0 ;Z
LOOP
CMPR1,#10 ;i<10
BEQSTOP
ADDR2,R1,#1 ;j=i+1
LOOP1
CMPR2,#10+1 ;j<=10
ADDNER0,R0,#1 ;z+=1
ADDNER2,R2,#1 ;j++
BNELOOP1
ADDR1,R1,#1 ; i++
BLOOP
STOP
MOVR0,#0x18
LDRR1,=0x20026
SWI0x123456
END
;
; 数据块拷贝,利用LDR/STR指令
;
numEQU 10
AREA BlockData, DATA ; 声明数据段
src DCD 0,1,2,3,4,5,6,7,8,9 ; 定义十个数
dst SPACE 10*4
AREA Block, CODE ; 声明代码段
ENTRY
START
LDR R1,=src
LDRR2,=dst
MOVR3,#num
LOOP
LDRR0,[R1],#4
STRR0,[R2],#4
SUBSR3,R3,#1
BNELOOP
STOP
MOVR0,#0x18
LDRR1,=0x20026
SWI0x123456
END
汇编语言程序示例
;例五:
利用跳转表实现程序跳转
;项目名:
Example5.mcp,文件名:
Example5.s
———————————————————————————————————————
AREA Jump, CODE, READONLY
num EQU 2
ENTRY
start
MOV R0, #0
MOV R1, #3
MOV R2, #2
BL arithfunc
B .
arithfunc
CMP R0, #num
MOVHS PC, LR
ADR R3, JumpTable
LDR PC, [R3,R0,LSL#2]
JumpTable
DCD DoAdd
DCD DoSub
DoAdd
ADD R0, R1, R2
MOV PC, LR
DoSub
SUB R0, R1, R2
MOV PC, LR
END
3、 存储器从0x400000开始的100个单元中存放着ASCII码,编写程序,将其所有的小写字母转换成大写字母,对其它的ASCII码不做变换。
解:
MOV R0,#0x400000
MOV R1,#0
LP
LDRB R2,[R0,R1]
CMP R2,#0x61
BLO NEXT
CMP R2,#0x7B ;0x61---0x7A为小写字母的ASC
SUBLO R2, R2,#0x20
STRBLO R2,[R0,R1]
NEXT
ADD R1, R1,#1
CMP R1,#100
BNE LP
8、 编写一简单ARM汇编程序段,实现1+2+…+100的运算。
解:
MOV R2,#100
MOV R1,#0
LOOP
ADD R1,R1,R2 ;R1中为累加和
SUBS R2,R2,#1 ;R2控制循环
BNE LOOP
4、 编写程序,比较存储器中0x400000和0x400004两无符号字数据的大小,并且将比较结果存于0x400008的字中,若两数相等其结果记为0,若前者大于后者其结果记为1,若前者小于后者其结果记为-1。
解:
MOV R0,#0x400000
LDR R1,[R0] ;取第1个数
LDR R2,[R0,#4] ;取第2个数
CMP R1,R2 ;两个数相比较
MOVHI R1,#1 ;R1大
MOVLO R1,#-1 ;R1小
MOVEQ R1,#0 ;两个数相等
STR R1,[R0,#8]
7、 编写一程序,存储器中从0x400200开始有一个64位数。
(1)将取反,再存回原处;
(2)求其补码,存放到0x400208处。
解:
LDR R0,=0x400200
LDR R2,=0xFFFFFFFF
LDR R1,[R0] ;取低32位数
EOR R1,R1,R2 ;取反
STR R1,[R0] ;存低32位反码
ADDS R1,R1,#1 ;又加1为求补
STR R1,[R0,#8] ;存低32位补码
LDR R1,[R0,#4] ;取高32位数
EOR R1,R1,R2 ;取反
STR R1,[R0,#4] ;存高32位反码
ADC R1,R1,#0 ;高32位求补
STR R1,[R0,#12] ;存高32位补码
Example7Example7.OC
例七:
汇编语言与C/C++的混和编程
项目名:
Example7.mcp
文件名:
Example7_asm.s
文件名:
Example7_c.c
———————————————————————————————————————
;Example7_asm.s
AREA Asm_C, CODE, READONLY
ENTRY
LDR SP,=0x4000
IMPORT __main
BL __main
B .
END
———————————————————————————————————————
#include
intmain()
{
printf("Helloworld\n");
return0;
}
4.4 系统的初始化过程
◆ 初始化代码直接对ARM微处理器内核及硬件控制器编程,多采用汇编语言编程,初始化代码一般应包含如下典型任务:
● 定义程序入口点
● 设置异常向量;
● 初始化存储器系统;
● 初始化堆栈指针寄存器;
● 初始化临界I/O设备;
● 初始化C代码的运行环境;
● 改变处理器的运行模式和状态;
● 使能中断;
● 进入C代码运行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 编程 实例