怎样正确获取程序的目标代码
要正确获取程序的目标代码,首先要明确程序代码的存放地点。51单片机的程序存储器最大空间为64KB,在一个实际的应用系统中,程序存储器的分布情况可能有以下几种:
(1)只使用了片内程序空间。而没有使用片外的程序空间。
其硬件特征为:/EA引脚接VCC;/PSEN引脚为空脚。
这种情况比较简单,全部应用程序都在单片机内部的程序存储器中,我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。要注意的是,有一些新型的单片机具有加密功能,如果进行了加密,其中的程序代码就是不能读出。
(2)没有使用片内程序空间,片外程序空间由单个存储芯片构成。
其硬件特征为:/EA引脚接GND;/PSEN引脚接到一个存储芯片上。
这种情况下,全部应用程序都在单片机外部的程序存储器中,原则上我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。但要注意的是,这样得到的并不一定是真正的目标代码,因为,为了防止程序代码被读取、反汇编,很多设计人员都采取跳接线的方法,将某些地址线跳接或将某些数据线跳接或将地址线、数据线都进行跳接,从而保护自己的程序不被反汇编(参见下面四图)。这样一来,我们从存储器中读取的就不是真正的程序目标代码,必须进行某种变换,将其转换为真正的程序目标代码,才能进行反汇编。
要进行目标代码的变换,首先必须根据硬件画出实际的地址和数据的接线图,然后借助于工具软件进行变换。在“51汇编集成开发环境”关的介绍,其中,提供了一个变换工具,从软件界面的[辅助工具]-[目标代码转换]-[bin代码还原就可以启动这个工具。
单击[浏览可以选择要转换的代码文件,注意:这里的代码文件只能是二进制代码文件,即bin文件,如果你通过编程器读取后保存的文件不是bin文件,就需要先将其转换为bin文件,在“51汇编集成开发环境”的[辅助工具]-[目标代码转换菜单下,有相应的转换工具。
单击[另存为可以选择转换结果的存放地点和文件名,转换结果也一定是bin文件。
再根据实际的地址、数据的接线图,来选择地址线跳接、数据线跳接,设置其接线表,然后单击[还原即完成了代码的变换。
(3)没有使用片内程序空间,片外程序空间由多个存储芯片构成其硬件特征为:/EA引脚接GND;/PSEN引脚接到了几个存储芯片上。
这种情况下,全部应用程序在单片机外部的多个存储芯片中,我们首先需要使用编程器将每一个存储芯片上的程序代码读出来,分别保存为一个目标代码文件,然后将它们合并为一个文件。
在读取存储芯片上的程序代码时,要注意查看硬件接线有无跳接线,如果有跳接线,必须进行代码的变换。
在合并程序代码时,要注意每一个存储芯片的地址范围,必须按地址连接,才能得到真正的目标代码文件。
在“51汇编集成开发环境”中,从[辅助工具][目标代码转换]-[bin代码合并可以启动合并工具。
单击[浏览可以选择要合并的两个代码文件,注意:第一个代码文件必须是从0地址开始的文件,单击[另存为可以选择合并后的文件存放地点和文件名,然后单击[开始即完成了代码的合并。
若选择直接连接,则第二个代码文件将紧接着第一个文件后连接;若选择按地址连接,则第二个代码文件将从指定的地址开始连接。如果两个代码文件之间有空字节,则将填充为“00H”或“FFH”;如果两个代码文件在空间上有重叠,则将得到提示:“地址空间存在重合现象,不能正常合并!”。
(4)既使用了片内程序空间,也使用片外的程序空间其硬件特征为:/EA引脚接VCC;/PSEN引脚接到一个存储芯片或几个存储芯片上。
在这种情况下,全部应用程序分布在单片机内部的程序存储器和外部的多个存储芯片中,获取程序代码的基本方法同(3)。
这里要注意的是,片外程序存储器的地址范围应该在1000H~FFFFH之间,如果某一片程序存储器的地址是从0000H开始的,那么其0000H~0FFFH之间的代码是无效的,必须将其去除。借助于“51汇编集成开发环境”的[辅助工具]-[目标代码转换菜单下的[bin代码拆分,可以完成这一工作。
单击[浏览可以选择要转换的代码文件,再选择片内ROM空间为4KB,然后单击[开始即可。
怎样正确获取程序的目标代码
要正确获取程序的目标代码,首先要明确程序代码的存放地点。51单片机的程序存储器最大空间为64KB,在一个实际的应用系统中,程序存储器的分布情况可能有以下几种:
(1)只使用了片内程序空间。而没有使用片外的程序空间。
其硬件特征为:/EA引脚接VCC;/PSEN引脚为空脚。
这种情况比较简单,全部应用程序都在单片机内部的程序存储器中,我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。要注意的是,有一些新型的单片机具有加密功能,如果进行了加密,其中的程序代码就是不能读出。
(2)没有使用片内程序空间,片外程序空间由单个存储芯片构成。
其硬件特征为:/EA引脚接GND;/PSEN引脚接到一个存储芯片上。
这种情况下,全部应用程序都在单片机外部的程序存储器中,原则上我们只要使用编程器将程序代码读出来,保存为一个目标代码文件就可以了。但要注意的是,这样得到的并不一定是真正的目标代码,因为,为了防止程序代码被读取、反汇编,很多设计人员都采取跳接线的方法,将某些地址线跳接或将某些数据线跳接或将地址线、数据线都进行跳接,从而保护自己的程序不被反汇编(参见下面四图)。这样一来,我们从存储器中读取的就不是真正的程序目标代码,必须进行某种变换,将其转换为真正的程序目标代码,才能进行反汇编。
要进行目标代码的变换,首先必须根据硬件画出实际的地址和数据的接线图,然后借助于工具软件进行变换。在“51汇编集成开发环境”关的介绍,其中,提供了一个变换工具,从软件界面的[辅助工具]-[目标代码转换]-[bin代码还原就可以启动这个工具。
单击[浏览可以选择要转换的代码文件,注意:这里的代码文件只能是二进制代码文件,即bin文件,如果你通过编程器读取后保存的文件不是bin文件,就需要先将其转换为bin文件,在“51汇编集成开发环境”的[辅助工具]-[目标代码转换菜单下,有相应的转换工具。
单击[另存为可以选择转换结果的存放地点和文件名,转换结果也一定是bin文件。
再根据实际的地址、数据的接线图,来选择地址线跳接、数据线跳接,设置其接线表,然后单击[还原即完成了代码的变换。
(3)没有使用片内程序空间,片外程序空间由多个存储芯片构成其硬件特征为:/EA引脚接GND;/PSEN引脚接到了几个存储芯片上。
这种情况下,全部应用程序在单片机外部的多个存储芯片中,我们首先需要使用编程器将每一个存储芯片上的程序代码读出来,分别保存为一个目标代码文件,然后将它们合并为一个文件。
在读取存储芯片上的程序代码时,要注意查看硬件接线有无跳接线,如果有跳接线,必须进行代码的变换。
在合并程序代码时,要注意每一个存储芯片的地址范围,必须按地址连接,才能得到真正的目标代码文件。
在“51汇编集成开发环境”中,从[辅助工具][目标代码转换]-[bin代码合并可以启动合并工具。
单击[浏览可以选择要合并的两个代码文件,注意:第一个代码文件必须是从0地址开始的文件,单击[另存为可以选择合并后的文件存放地点和文件名,然后单击[开始即完成了代码的合并。
若选择直接连接,则第二个代码文件将紧接着第一个文件后连接;若选择按地址连接,则第二个代码文件将从指定的地址开始连接。如果两个代码文件之间有空字节,则将填充为“00H”或“FFH”;如果两个代码文件在空间上有重叠,则将得到提示:“地址空间存在重合现象,不能正常合并!”。
(4)既使用了片内程序空间,也使用片外的程序空间其硬件特征为:/EA引脚接VCC;/PSEN引脚接到一个存储芯片或几个存储芯片上。
在这种情况下,全部应用程序分布在单片机内部的程序存储器和外部的多个存储芯片中,获取程序代码的基本方法同(3)。
这里要注意的是,片外程序存储器的地址范围应该在1000H~FFFFH之间,如果某一片程序存储器的地址是从0000H开始的,那么其0000H~0FFFH之间的代码是无效的,必须将其去除。借助于“51汇编集成开发环境”的[辅助工具]-[目标代码转换菜单下的[bin代码拆分,可以完成这一工作。
单击[浏览可以选择要转换的代码文件,再选择片内ROM空间为4KB,然后单击[开始即可。
举报