从链接和汇编指令看单片机
objdump帮助理解链接过程。Linker将各种*.o的文件链接在一起。使用objdump可以看到很多信息。
objdump -d the_file.o
可以看到含有汇编助记符的指令。
objdump -t the_file.o
该文件可以在安装目录C:\NXP\S32DS_Power_v2017.R1\Cross_Tools\powerpc-eabivle-4_9\bin\powerpc-eabivle-objdump.exe下找到。
通过使用objdump就可以将目标文件(*.o)分析清楚。从来了解链接器的工作机制。
在MPC5744P中,有一个问题在于,我们在C语言中定义的各种uint32_t int32_t ,其实只在汇编级别的代码中是几乎完全看不到这种信息的。
这一点需要明确。在powerpc的汇编体系中,一个char和一个int的区别就是,一个采用的是stw(store word),另外一个是stb(store byte)。
发生函数调用的时候一般和堆栈相关。在powerpc架构中,寄存器R1被用来当做SP。在有一些参数为void的函数进入该函数之前,都会使用以下汇编语句
e_stwu r1,-0x10(r1)
该语句的二进制表示为(使用十六进制):
182106F0
在s19文件(srec)中搜索关键字“182106F0”,如果找到了。这说明这是一个发生函数调用的地方。但并不是所有发生函数调用的形式都是这个样子。
关于powerpc的汇编指令,其指令集的形式规定并不是特别严格。同一种操作可能有不同的记法。如果仅仅只理解别人已经写好的汇编(比如单片机工程中的一些*.s的文件),对于初学者靠猜可能会帮助理解。因为在短时间内掌握完全不可能。