ARM指令集笔记
来源:互联网 发布:vb.net 新建文件夹 编辑:程序博客网 时间:2024/05/29 12:23
ARM指令的基本格式:<opcode>{<cond>}{S}<Rd>,<Rn>{,<opcode2>}
cond:
EQZ=1
NEZ=0
CSC=1
CCC=0
GTZ=0,N=V
LEZ=1,N!=V
AL\
LDMIA R0,{R1-R4} :R0没变
LDMIA R0!,{R1-R4} :R0变了
MOV R0 , #8;R0=8
MOV R0 , R1;R0<---R1
MOV R0 , R1,LSL #3;R0<---(R1<<3)
MOV PC, LR;R15<---R14
ADD R0, R1,#1;R0<---(R1+1)
ADDS R0, R1,#1;会影响CPSR的标记位
BIC R0,R0,#0xF;clear bits
ORR R0, R0, #0xF ;SET BITS
MRS R0, CPSR;R0<---CPSR
BIC R0,R0, #0x1F
ORR R0, R0,#0xD3
MSR CPSR_cxsf , R0
mrc p15, 0, r0, c1, c0, 0;r0<---c1
mcr p15, 0, r0, c1, c0, 0;c1<---r0
mov r1, #9 ;r1<--9
mov r2, r1 ;r2<--r1
mov r2, r1, lsl #3 ;r2<--(r1<<3)
ldr r1, [r0] ;r1<--[r0]
swp r2, r2, [r1] ;r2<--(r2<-->[r1])
ldr r1, [r0, #4] ;r1<--[r0+4]
stmfd sp!, {r0-r2} ;入栈,sp跟新
ldmfd sp!, {r0-r2} ;出栈,sp跟新
GET 2440addr.inc
AREA Init, CODE, READONLY
ENTRY
END
一.Symbol Definition////////////////////////////////////////////////////
1.GBLA/GBLL/GBLS//////////////////////////
GBLA Number1
Number1 SETA 0xaa
GBLL True1
True1 SETL {TRUE}
GBLS String1
String1 SETS "Testing"
2.LCLA/LCLL/LCLS//////////////////////////
LCLA Number2
Number2 SETA 0xaa
LCLL True2
True2 SETL {TRUE}
LCLS String2
String2 SETS "Testing"
3.RLIST//////////////////////////
RegList RLIST {R0-R5,R8,R10}
STMFD SP!,RegList
二.Data Definition////////////////////////////////////////////////////
1.DCB//////////////////////////
Sting DCB "This is a test!"
Parameter DCB 0x33,0x44,0x55
DCB -1,-2,0,1,2
2.DCW//////////////////////////
Data DCW 0,1,2,3
3.DCD//////////////////////////
Data DCD 3,4,5,6
4.DCFD//////////////////////////
Fdata DCFD 0,2E115,-5E7
5.DCFS//////////////////////////
Sdata DCFS 1,2E5,-5E7
6.DCQ//////////////////////////
Data DCQ 100,1000
7.DCDO//////////////////////////
IMPORT externsys
Data DCDO externsys
8.DCI//////////////////////////
MACRO
newinstr $Rd,$Rm
DCI 0Xe15f0f10: CR: (8$Rd: SHL: 12): OR: $Rm
9.SPACE//////////////////////////
DataSpace SPACE 1000
10.MAP//////////////////////////
MAP 0x10 ,R0
11.FIELD//////////////////////////
MAP 0x100
A FIELD 16
B FIELD 32
S FIELD 256
12.LTORG//////////////////////////
LDR R0,=0x12345
ADD R1,R1,R0
MOV PC,LR
LTORG
...
三.Assembly Control////////////////////////////////////////////////////
1.IF/ELSE/ENDIF//////////////////////////
IF Version="V1"
......
ELSE
..........
ENDIF
2.WHILE/WEND//////////////////////////
WHILE Counter<10
.......
WEND
3.MACRO/MEND//////////////////////////
MACRO
CODE_1
LDR R0,=rPDATG
LDR R1,[R0]
ORR R1,R1,#0X01
SRT R1,[R0]
MEND
4.MEXIT//////////////////////////
5.AREA/ALIGN/CODE16/CODE32/ENTRY/END/EQU/EXPORT(GLOBAL)/IMPORT/GET(INCLUDE)/INGBIN/RN/ROUT
AREA Init,CODE,READONLY
AREA Init,CODE,READONLY,ALIGN=3
CODE32
.....
CODE16
.....
ENTRY
END
ABCE EQU label+8
Test EQU 50
Addr EQU 0x55,CODE32
EXPORT main
IMPORT main
GET a1.s
GE T C:\a2.s
INCBIN a1.dat
INCBIN C:\a2.txt
INCBIN a3.bin
Counter RN R0
四.Programming////////////////////////////////////////////////////
1.program structure//////////////////////////
AREA Init,CODE,READONLY
ENTRY
Start
LDR R0,=0x3FF5000
LDR R1,0xFF
STR R1,[R0]
LDR R0,=0x3FF5008
LDR R1,0x01
STR R1,[R0]
...
END
2.Subroutine call//////////////////////////
AREA Init,CODE,READONLY
ENTRY
Start
LDR R0,=0x3FF5000
LDR R1,0xFF
STR R1,[R0]
LDR R0,=0x3FF5008
LDR R1,0x01
STR R1,[R0]
BL PRINT_TEXT
...
PRINT_TEXT
...
MOV PC,BL
..
END
3.macro definition//////////////////////////
MACRO
CALLSubfunction $Funtion,$dat1,$dat2
IMPORT $Funtion
MOV R0,$dat1
MOV R1,$dat2
BL Funtion
MEND
...
CALL FADD1,#3,#2
4.Compare And B//////////////////////////
CMP R5,#10
BEQ BRANCH1
...
CMP R1,R2
ADDHI R1,R1,#1
ADDLS R1,R1,#2
...
ANDS R1,R1,#0x80
BNE WAIT
5.LOOP//////////////////////////
MOV R0,#10
LOOP
...
SUBS R0,R0,#1
BEN LOOP
...
6.Data Block Copy//////////////////////////
LDR R0,=DATA_DST
LDR R1,=DATA_SRC
MOV R10,#10
LOOP LDMIA R1!,{R2-R9}
STMIA R0!,{R2,R9}
SUBS R10,R10,#1
BNE LOOP
...
7.Stack Operation//////////////////////////
OUTDAT
STMFD SP! {R0-R7,LR}
...
BL DELAY
...
LDMFD SP! {R0-R7,PC}
8.Table Look//////////////////////////
...
LDR R3,=DISP_TAB
LDR R2,[R3,R5,LSL,#2]
...
DISP_TAB DCD 0xC0, 0xF9, 0xA4, 0x99, 0x92
DCD 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83
DCD 0xC6, 0xA1, 0x86, 0x8E, 0xFF
9.Long Jump//////////////////////////
ADD LR, PC, #4
LDR PC,=JUMP_FUNC
DCD RET_FUNC
...
DCD JUMP_FUNC
10.Samaphore support//////////////////////////
DISP_SEM EQU 0x40002A00
...
DISP_WAIT MOV R1,#0
LDR R0,=DISP_SEM
SWP R1,R1,[R0]
CMP R1,#0
BEQ DISP_WAIT
11.Register//////////////////////////
WDTC EQU 0xE000000
...
LDR R0,=WDTC
MOV R1,#12
STR R1,[R0]
12.Piece of external parts//////////////////////////
LDR R0,=GPIO_BASE
MOV R1,#0x00
STR R1,[R0,#0x04]
MOV R1,#0x10
STR R1,[R0,#0x0C]
- ARM指令集笔记
- arm学习笔记三(arm指令集)
- S3C6410 Memory Map & ARM 指令集 笔记
- (学习笔记)ARM汇编指令集
- ARM 指令笔记
- arm汇编指令笔记
- ARM裸机开发笔记5(ARM指令集)
- arm学习笔记四(arm伪指令)
- ARM指令集--移位指令
- ARM 指令集>>跳转指令
- ARM指令集 LDR指令
- ARM 指令集 比较指令
- arm指令集比较指令
- arm指令集分支指令
- ARM汇编伪指令笔记
- ARM汇编伪指令笔记
- GD32F130FXP6学习笔记四:ARM 汇编指令集初识
- ARM指令集
- Android clipboard setPrimaryClip
- 到底EJB是什么
- HttpURLConnection和HTTPClient的比较
- ubuntu下adsl拨号上网
- 说说发货设计个萨达话费谁都会让你
- ARM指令集笔记
- java中判断字符串是否为数字的三种方法
- 外部排序
- Calendar.set用法的深入探讨
- CodeForces 414B--Mashmokh and ACM (dp)
- Namenode recovery, How does namenode recovery works?
- [leetcode] Best Time to Buy and Sell Stock II
- 黑马程序员 第23天 异常总结
- Flex4 List项 增加 删除 变色等简单实现