ARM 学习笔记1-开始汇编
目标:
1 熟悉ADS编译器和编辑环境
2 熟悉AXD如何调试汇编代码
3 熟悉几条汇编指令
4 熟悉一个汇编程序的基本元素
5 在AXD中使用ARMulate仿真如何确认结果
以下是以上目标的展开!
1 熟悉ADS编译器和编辑环境
使用了ADS1.2,很简单的界面,没有什么环境配置,已经包含有汇编编译器armasm;
C/C++语言编译器tcc;连结器armlink等等.
建立一个工程后,既可以写汇编代码,也可以写C/C++代码.不过编辑器有点丑陋.
开始第一个汇编程序,出现了以下几个问题:
1)Error : All63E:Unknown opcode
代码如下: AREA Block, CODE, READONLY
解决:编译器太弱了,原来是是指令不能在第一列.按了一个TAB后,好了.
但是标号(label)可以放在第一列.
2)Error : All63E:Unknown opcode
代码如下: num EQU 20
解决:编译器太弱了,我已经空了一列了,还有错.
但是放在第一列后问题解决,所以发现伪操作等不能空.
2 熟悉AXD如何调试汇编代码
可以通过ADS启动调试,也可以在AXD中打开文件调试.
调试和GDB一样,很方便.
我调试了一段代码,是COPY STRING的,因为无法输出到console,所以就
确认目标地址的内存中的值是不是和源地址的值一样.
在调试的过程中最好:
1)打开source code
2)打开disasmble code
3)打开processor register
4)如果需要还可以观察memory windows
3 熟悉几条汇编指令
1) LDR r0,=src
这是一条伪指令,读的是src的地址到r0中.
2)STMFD sp!,{r4-r11}
用于调用函数保存栈.
把REGISTER LIST的内容保存到连续的内存sp中,并且sp地址会更新.
FD:FULL DESCENDANT,所以对于BASE ADDRESS sp来说,保存一个值,则地址-4.
向下增长吗.
3)LDMIA r0!,{r4-r11}
把r0 为BASE ADDRESS内存的VALUE装载到REGISTER LIST中,并且r0地址会更新.
IA:INCREMENT AFTER,所以对于BASE ADDRESS r0来说,取出一个值,则地址+4.
4)STMIA r1!,{r4-r11}
把REGISTER LIST的VALUE保存到r1为BASE ADDRESS内存中,并且r1地址会更新.
IA:INCREMENT AFTER,所以对于BASE ADDRESS r1来说,保存一个值,则地址+4.
5)LDR r3,[r0],#4
这是一条伪指令,把r0地址的内容读到r3中,并且r0的地址更新为r0+4.
6)STR r3,[r1],#4
这是一条伪指令,把r3的内容保存到r1的地址中,并且r1的地址更新为r0+4.
7)SWI 0x123456
软件中断指令.
4 熟悉一个汇编程序的基本元素
1)AREA部分
2)ENTRY部分
3)BODY部分
4)END结束
5 在AXD中使用ARMulate仿真如何确认结果
1)CONSOLE输出消息,好象C语言比较适合
2)MEMORY地址处的内容是否变化,这是基本!
阅读(3715) | 评论(4) | 转发(0) |