首先创建项目:
1.选择并配置芯片和运行环境:
2.添加编写.s文件
这里是一个排序然后选出中位数的汇编程序:
AREA MYDATA, DATA
AREA EXAMPLE, CODE,READONLY
ENTRY
EXPORT __main
__main
MOV R0,#9; SORT number
LDR R2,=0x40000000 ; start address
SUB R1,R0,#1; r1 <- 8
MOV R4,#4 ;r4 <- 4
MLA R3,R1,R4,R2 ;r3<- r1*r4+r2 = r2+32
SUB R4,R3,#4 ;r4 <- r2+28
LOOPA
ADD R5,R2,#4 ;r5 <- r2+4
LOOPB
LDR R6,[R2]
LDR R7,[R5]
CMP R6,R7
STR R6,[R5]
STR R7,[R2] ;swap
ADD R5,R5,#4 ; change inner address to next one
CMP R5,R3
BLS LOOPB
ADD R2,R2,#4 ;change outter address to next one
CMP R2,R4
BLS LOOPA
LDR R2,=0x40000000
MOV R0,R0,LSR #1 ;R0 <- R0>>1
MOV R4,#4 ; R4 <- 4
MLA R3,R0,R4,R2 ;r3<- r1*r4+r2
LOOPC
LDR R1,[R3]
MOV R0,#100
B .
在进行调试的时候遇到这个问题,进不了主函数:
这需要在target选项卡里面勾选microlib
后面就正常debug:
可以看到寄存器的值确实按照我们编写的汇编代码发生改变
生成的hex文件如下:
hex文件由记录组成,每行代表一个记录
以第一行数据为例解释下:0x020000040800F2
把它当成字符串拆分为0x02,0x00,0x00,0x04,0x08,0x00,0xF2,因为对应各自的含义和作用:
0x02:本行有两个数据
0x00,0x00:本行数据起始地址位
0x04:标记拓展线性地址的记录
0x08,0x00:就是在开头0x02指出的本行包含的2个具体数据
0xF2:校验和