从链接和汇编指令看单片机

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的文件),对于初学者靠猜可能会帮助理解。因为在短时间内掌握完全不可能。

 

posted @ 2018-08-01 17:03  panrui  阅读(816)  评论(0编辑  收藏  举报