ARM指令例子
来源:互联网 发布:mac os x ei 编辑:程序博客网 时间:2024/06/05 01:36
;判断当前ARM处理器是ARM状态还是THUMB状态,如果是ARM状态,请设置为USR模式
MRS R0, CPSR
TST R0,#0x20
ANDEQ R0, #0xFFFFFFE0
ORREQ R0, #0X10
MSREQ CPSR_fxsc, R0
================================================================================
load/store架构------》 数据加载和存储指令
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
LDR R0, =src
LDR R2, =dest
LDR R1, [R0]
STR R1, [R2]
STOP
B STOP
src DCD 0x1
AREA |.data| ,data, READWRITE
dest SPACE 8
END
===================================================================================
//pre、post index
LDR R0, =src
LDR R2, =dest
; LDR R1, [R0, #4]!
; LDR R1, [R0, #4]
LDR R1, [R0], #4
==================================================================================
本汇编实现数组求和(不使用函数调用)
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
LDR R0, =src
LDR R1, =dest
MOV R2, #4
LOOP
CMP R2, #0
BEQ STR_WRITE
LDR R3, [R0], #4
ADD R4, R4, R3
SUB R2, #1
B LOOP
STR_WRITE
STR R4, [R1]
STOP
B STOP
src DCD 0x1, 0x2, 0x3, 0x4
;src DCB "helloworld"
AREA |.data| ,data, READWRITE
dest SPACE 128
END
=========================================================================
本程序实现求取最大公约数(不使用函数调用)
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
MOV R0, #12
MOV R1, #24
LOOP
CMP R0, R1
BEQ WRITE
SUBHI R0, R0, R1
SUBCC R1, R1, R0
B LOOP
WRITE
MOV R2, R0
STOP
B STOP
AREA |.data| ,data, READWRITE
END
=============================================================================
本程序实现求取最大公约数(使用函数调用)
AAPCS函数调用标准规定(函数调用:只能使用R0 - R3 这四个寄存器传参,多出4个请用堆栈)
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
MOV R0, #12
MOV R1, #24
LOOP
CMP R0, R1
BEQ WRITE
SUBHI R0, R0, R1
SUBCC R1, R1, R0
B LOOP
WRITE
MOV R2, R0
STOP
B STOP
AREA |.data| ,data, READWRITE
END
LDR R1, [R0], #4
==================================================================================
块数据传输
; LDR R0, =src
LDR R4, =dest
; LDMIA R0!, {R1 - R3}
; STMIA R4!, {R1, R2, R3}
; LDMIB R0!, {R1 - R3}
LDR R0, =src
ADD R0, #12
LDMDA R0!, {R3, R2, R1}
=================================================================================
ARM汇编多层函数调用要使用堆栈
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
LDR SP, =STACK_T
MOV R0, #1
BL FUNC
MOV R1, #0XFF
B STOP
FUNC
MOV R2, #5
STMFD SP!, {R0 - R9, LR}
BL FUNC1
MOV R3, #0XFF
LDMFD SP!, {R0 - R9, PC}
FUNC1
MOV R2, #0X2
MOV R5, 0XFF000000
BX LR
STOP
B STOP
src DCD 0X1, 0X2, 0X3, 0X4
AREA |.data| ,data, READWRITE
SPACE 128
STACK_T
SPACE 128
TT
END
MRS R0, CPSR
TST R0,#0x20
ANDEQ R0, #0xFFFFFFE0
ORREQ R0, #0X10
MSREQ CPSR_fxsc, R0
================================================================================
load/store架构------》 数据加载和存储指令
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
LDR R0, =src
LDR R2, =dest
LDR R1, [R0]
STR R1, [R2]
STOP
B STOP
src DCD 0x1
AREA |.data| ,data, READWRITE
dest SPACE 8
END
===================================================================================
//pre、post index
LDR R0, =src
LDR R2, =dest
; LDR R1, [R0, #4]!
; LDR R1, [R0, #4]
LDR R1, [R0], #4
==================================================================================
本汇编实现数组求和(不使用函数调用)
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
LDR R0, =src
LDR R1, =dest
MOV R2, #4
LOOP
CMP R2, #0
BEQ STR_WRITE
LDR R3, [R0], #4
ADD R4, R4, R3
SUB R2, #1
B LOOP
STR_WRITE
STR R4, [R1]
STOP
B STOP
src DCD 0x1, 0x2, 0x3, 0x4
;src DCB "helloworld"
AREA |.data| ,data, READWRITE
dest SPACE 128
END
=========================================================================
本程序实现求取最大公约数(不使用函数调用)
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
MOV R0, #12
MOV R1, #24
LOOP
CMP R0, R1
BEQ WRITE
SUBHI R0, R0, R1
SUBCC R1, R1, R0
B LOOP
WRITE
MOV R2, R0
STOP
B STOP
AREA |.data| ,data, READWRITE
END
=============================================================================
本程序实现求取最大公约数(使用函数调用)
AAPCS函数调用标准规定(函数调用:只能使用R0 - R3 这四个寄存器传参,多出4个请用堆栈)
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
MOV R0, #12
MOV R1, #24
LOOP
CMP R0, R1
BEQ WRITE
SUBHI R0, R0, R1
SUBCC R1, R1, R0
B LOOP
WRITE
MOV R2, R0
STOP
B STOP
AREA |.data| ,data, READWRITE
END
LDR R1, [R0], #4
==================================================================================
块数据传输
; LDR R0, =src
LDR R4, =dest
; LDMIA R0!, {R1 - R3}
; STMIA R4!, {R1, R2, R3}
; LDMIB R0!, {R1 - R3}
LDR R0, =src
ADD R0, #12
LDMDA R0!, {R3, R2, R1}
=================================================================================
ARM汇编多层函数调用要使用堆栈
ARM
AREA |.text| ,code , READONLY
ENTRY
PRESERVE8
main
LDR SP, =STACK_T
MOV R0, #1
BL FUNC
MOV R1, #0XFF
B STOP
FUNC
MOV R2, #5
STMFD SP!, {R0 - R9, LR}
BL FUNC1
MOV R3, #0XFF
LDMFD SP!, {R0 - R9, PC}
FUNC1
MOV R2, #0X2
MOV R5, 0XFF000000
BX LR
STOP
B STOP
src DCD 0X1, 0X2, 0X3, 0X4
AREA |.data| ,data, READWRITE
SPACE 128
STACK_T
SPACE 128
TT
END
0 0
- ARM指令例子
- ARM汇编指令 具体操作例子
- ARM NOEN vfmaq_laneq_f32与vextq_f32指令例子
- linux kernel 对 ARM 未定义指令扩展的例子
- arm指令
- ARM指令
- arm 指令
- ARM指令
- arm指令
- arm指令
- arm指令
- ARM指令
- ARM 指令
- ARM 指令
- ARM指令
- arm 指令
- ARM指令
- ARM-指令
- 今天开通我的博客啦~
- POJ 3744 Scout YYF I (矩阵优化的概率DP)
- MySQL/事务
- SIFT算法综述
- 微信小程序开发之搭建腾讯云ubuntu开发环境PHP+MYSQL+APACHE2
- ARM指令例子
- 分布式计算、并行计算及集群、网格、云计算的区别
- Nginx+uwsgi部署django项目
- 心跳机制、轮询、长连接的概念
- 5. Longest Palindromic Substring
- poj 1837 dp推方案数
- 国产优化
- autobahn-python的使用——sendMessage()和断线自动重连
- iTween插件的使用