【正达电路板故障维修仪器系列论文】


超级反汇编



摘要:正达电路板故障维修仪器系列论文超级反汇编功能是一个集成跟踪开发工具,集数据文件的操作、反汇编以及源码文件的编辑于一体,可以对Z80系列、8031/51系列、8096/98系列、8086/8088系列等程序进行跟踪,将它们的数据文件反汇编成源码文件,供进一步开发改进。


关键词:汇编语言;文件操作;工程文件


0.前言

    超级反汇编功能的数据文件一般是正达测试仪从EPROM中读取出来的,或是8086/8088的.com可执行文件,也可以是其它各种数据文件。其它各种数据文件必须预先存放在正达测试仪系统软件的EPROM目录下。


1.选择汇编语言类型

    进入“扩充功能”项中的“超级反汇编”操作。见图1.“选择汇编语言类型”项是用来选择要反汇编的语言环境类型。电路板上EPROM中数据文件的语言类型,一般就是其所在电路板上采用的CPU类型。目前超级反汇编可以处理Z80,8031/51,8096/98以及8086/8088系列等四种汇编语言,反汇编时首先应选择好语言类型。


图1


2.文件操作

    文件操作项用来对所选择的数据文件进行超级反汇编操作。测试系统对每种语言类型都提供了一种示范程序供学习,事先已保存在测试安装目录的EPROM目录下,可通过“装入数据文件”进行调入。测试仪从EPROM中读取的数据也被保存在测试安装目录的EPROM目录下。对于其它需要处理的数据文件,可事先将其保存到测试安装目录的EPROM目录下。


2.1装入数据文件

    以选择8051系列为例,在“装入数据文件”项中装入8051_DEMO.BIN示范程序。见2.数据文件装入后首先提示装入文件的长度、装入起始地址和结束地址。在此窗口下,可对源数据文件在其文件长度范围内进行数据的编辑修改。修改方法为:光标在十六进制数据区,直接输入0~F字符;光标在ASCII码区,直接输入任意字符。修改后,可选择“存储当前数据文件”和“换名存储数据文件”对修改后的数据文件进行保存。


图2


    超级反汇编功能提供16M数据缓冲区,可处理长达16M的各类数据文件。待处理的各类数据文件和修改后的文件均保存在“测试安装目录\EPROM”子目录下,修改后的数据文件能够保存的长度是其装入时提示的长度。如果需要对超出所调入源文件长度范围的内容进行数据添加和修改,可按照以后将要介绍的“存储缓冲区数据”命令进行操作。


2.2反汇编基本操作及反汇编工程文件

    装入数据文件后,可进行反汇编操作。最基本的反汇编命令是“U命令”,可在操作命令处输入“U或U  起始地址”,按“回车”键,对数据文件进行反汇编。每次按“回车”键,反汇编16行程序源码。见图3.


图3


    反汇编时可随时创建反汇编工程文件(*.PRJ),可记录反汇编程序源码与其相关联的地址、数据以及相应的数据文件、当前操作命令、当前显示页等操作进程信息。既便于下一时间段工作接续,也便于随时检查、核对之前的工作。

    可选择“存储当前反汇编工程文件”和“换名存储反汇编工程文件”生成反汇编工程文件,或是对修改后的反汇编工程文件进行保存。可选择“装入反汇编工程文件(*.PRJ)”进行工作接续,直到最终完成全部反汇编工作为止。反汇编工程文件默认存储到“测试安装目录\Unasm”子目录下。

    所有反汇编工作尽量在反汇编工程文件状态下完成,有利于对照各个数据和地址,对结果程序进行修改和验证,在确认反汇编工程文件准确无误后,再统一输出纯源码文件。


2.3清除原码缓冲区和输出纯源码文件

    确认反汇编工程文件准确无误后,执行“输出纯源码文件(*.asm)”操作,可随时输出纯源码文件(*.asm).纯源码文件默认存储到“测试安装目录\asm”子目录下,可适用各种编辑工具进行编辑。

    对于某特定的汇编器,生成的纯源码文件需加上若干条伪指令才能够通过汇编。为此,在“测试安装目录\asm”子目录下,对每一个示范程序都提供了相应的样本文件,供用户在模拟完成反汇编全过程后对照参考。

    其中:*_DEMO.asm为从反汇编工程文件输出的纯源码文件。

    DEMO.asm为加上伪指令后能通过汇编器的源码文件。

    需要说明的是:8051兼容系列相对最为简单,一般只需在纯源码文件末尾加上一条伪指令:END.8086/8088兼容系列相对最为复杂,需加上许多条伪指令。请参看“测试安装目录\asm”子目录下预存的样本文件。

    另外,不同的汇编器定义或需要的伪指令也不尽相同,具体应用时可参考所用汇编器的资料。

    其它操作:选择“数据缓冲区窗口”和“源码缓冲区窗口”可在反汇编过程中对这两个窗口进行切换。使用“文件操作”中的“清除源码缓冲区”操作可清空当前源码缓冲区中的内容。

    以上介绍了超级反汇编的基本操作方法。所提供的每种汇编语言的指令集都根据厂家的资料进行了检查、核对,并且都根据实际的机器码样本文件进行过具体验证,所生成的纯源码文件与起初源码文件完全吻合,对超级反汇编功能的准确性和可靠性有极为充分的保证。建议用户以本测试系统事先提供的示范程序为参照,学习揣摩每项操作,并将自己最终反汇编实现的结果与“测试安装目录\asm”子目录下的样本文件进行比较,有助于熟练和准确地掌握超级反汇编功能。

    由于将数据文件反汇编成源文件需要将特定的数据和程序分开,因此用户应当具有必要的技术背景,这也是更好地利用这个工具的前提。


3.命令介绍

    超级反汇编的各个操作命令由键盘输入,每条命令以单个字母的命令符开头,然后是命令的操作参数。操作参数与操作参数之间用空格隔开,操作参数与命令符之间也用空格隔开,命令的结束符是回车键。命令及参数的输入可以是大小写的结合,数值输入为十六进制数,不必写H.为避免频繁输入同一操作命令,重复执行当前操作命令时只需按回车即可,不必重新输入。

    操作界面本身带有操作命令提示,标明各操作命令的格式及示例。见图4.下面分别介绍超级反汇编的主要操作命令。


图4


⑴显示/修改缓冲区数据

格式:①    D

②    D    address

示例:D    2A1B

功能:以两种显示方式显示缓冲区范围里的内容。一种形式为十六进制内容,一种格式为相应字节的ASCII字符,对不可见字符以‘·’代替。

格式①:显示从‘0’起始的缓冲区内容,以后再用该命令时的起始地址紧接着上一次的结束地址,每次显示256字节的内容。

格式②:显示从指定起始地址address开始的256字节的内容。

例如:D           显示0至FF缓冲区间的内容。

D    200    显示200至2FF缓冲区间的内容。


⑵存储缓冲区数据

格式:①    W

②    W    start_addr    end_addr    file_name

示例:W    2A10    3FC0    DEMO.BIN

功能:将缓冲区中的内容写入指定文件并存盘。

格式①:只能对当前缓冲区中所调入源文件长度范围内的数据修改并存储,等同于“文件操作”项中的“存储当前数据文件”操作。

格式②:将指定缓冲区start_addr  end_addr之间单元中的内容写入file_name文件中。

例如:W    2A10    3FC0    DEMO.BIN,是将缓冲区2A10~3FC0单元中的内容保存在“测试安装目录\EPROM”子目录下的DEMO.BIN文件中。

又如:W    0    end_addr    file_name,该命令可以对超出所调入源文件长度范围的数据进行添加并存储,其中:end_addr是超长后的最终地址。


⑶装入文件至数据缓冲区

格式:①    L    file_name

②    L    file_name    start_addr

示例:L    DEMO.BIN    3BF0

功能:将“测试安装目录\EPROM”子目录下的指定文件file_name装入当前数据缓冲区中。

格式①:等同于“文件操作”项中的“装入数据文件”操作。

格式②:是将指定数据文件file_name装入起始地址为start_addr的当前数据缓冲区中。

例如:L  DEMO.BIN  3BF0,是将“测试安装目录\EPROM”子目录下的DEMO.BI文件装入起始地址为3BF0的当前数据缓冲区中。

注意:可以用这项操作将多个文件装入数据缓冲区中,应区分不同的文件名file_name并确定在数据缓冲区中的装入起始地址start_addr.


⑷搜寻指定内容命令

格式:①    S    start_addr    end_addr    Hex_string

②    S    start_addr    end_addr    ASCII_string

示例:S    2A10    3FC0    30AABBCCDD55

S    2A10    3FC0    ’ADD    AL,BL’

其中“Hex_string”是十六进制数串,“ASCII_string”是用单引号指定的ASCII码字符串。

功能:在起始地址start_addr至结束地址end_addr之间的指定数据缓冲区范围搜寻指定内容,找到后显示符合要求的地址单元。十六进制数串最多为16个字节,ASCII码字符串最多为32个字符。过程中:按“F3”查找下一个,按“F5”结束查找。

例如:S   100  44A6  F4BA54,表示在100~4A6地址之间的数据缓冲区中搜寻十六进制数串“F4BA54”.

又如:S   100  500   ’ABC’,表示在100~500地址之间搜寻字符串“ABC”.


⑸填充数据缓冲区

格式:①    F    start_addr    end_addr    Hex_string

②    F    start_addr    end_addr    ASCII_string

示例:F    2A10    3FC0    30AABBCCDD55

F    2A10    3FC0    ’ADD    AL,BL’

其中“Hex_string”是十六进制数串,“ASCII_string”是用单引号指定的ASCII码字符串。

功能:将指定的数值或字符串逐个填入起始地址start_addr至结束地址end_addr之间的指定范围,内容用完后重复使用。

例如:F    100    200    5A,是将缓冲区100~200单元之间中的内容逐个填写为5A.

又如:F    500    600    ’ABC’,这表明用字符串“ABC”反复填充在100~400单元之间的缓冲区中。


⑹拷贝数据缓冲区

格式:C    start_addr    end_addr    obj_addr

示例:C    2A10    3FC0    10A0

功能:把起始地址start_addr至结束地址end_addr之间的内容拷贝到目标地址obj_addr开始后的连续单元内,可直接拷贝十六进制数和对应的ASCII字符。

例如:C    2A10    3FC0    10A0,是将数据缓冲区2A10~3FC0单元之间内容拷贝到10A0开始的单元中。


⑺移动数据缓冲区

格式:M    start_addr    end_addr    obj_addr

示例:M    2A10    3FC0    10A0

功能:把起始地址start_addr至结束地址end_addr之间的内容移动到目标地址obj_addr开始后的连续单元内,可直接移动十六进制数和对应的ASCII字符。

例如:M    2A10    3FC0    10A0,是将缓冲区2A10~3FC0单元之间内容移动到10A0开始的单元中,移动后原2A10~3FC0单元之间内容为空。


⑻反汇编命令

格式:①    U

②    U    start_addr

示例:U    2A00

功能:对指定范围的代码进行反汇编,并且将反汇编后的语句添加到源码缓冲区中,同时显示地址及代码,源码存盘时并不存地址。

格式①:从地址0开始反汇编,每次16行。或是从上次U命令后的下一个地址开始继续反汇编,每次16行。

格式②:表示从指定地址开始反汇编16行内容。

例如:U    2A00,是从地址2A00开始反汇编16行内容。


⑼反汇编浏览

格式:①    V

②    V    start_addr

示例:V    2A00

功能:浏览反汇编后的内容,其浏览的内容并不添加至源码缓冲区。

格式①:从地址0开始浏览,每次16行。或是从上次V命令后的下一个地址开始继续浏览,每次16行。点击“源码缓冲区窗口”回到源码缓冲区状态。

格式②:表示从指定地址开始浏览16行内容。

例如:V    2A00,是从地址2A00开始浏览16行内容。


⑽搜寻源码缓冲区

格式:G    ASCII_string

示例:G    ’ADD    AL,BL’

G    ’CALL    5AB0H’

其中:“ASCII_string”是用单引号指定的ASCII码字符串。

功能:在源码缓冲区范围搜寻指定内容。过程中:按“F3”查找下一个,按“F5”结束查找。


⑾替换源码缓冲区

格式:R    Old_string    New_string

示例:R    ’271CH’    ’G271CH’

R    ’MAIN’    ’MLOOP’

其中:“Old_string”是用单引号指定的将被替换ASCII码字符串。“New_string”是用单引号指定的将要替换的ASCII码字符串。

功能:在源码缓冲区范围替换指定内容,可在程序完成后统一修改,尤其适合于在源码编辑状态整理程序。例如:为了最终通过编译器,在修改一些绝对地址时可在其前面只加助记符G并统一替换,这样可始终使反汇编结果保持在修改核对状态。过程中:按“F2”替换全部,按“F3”替换当前,按“F4”越过,按“F5”结束查找。


⑿源码编辑快捷键

CTRL+Y:删除当前行;

CTRL+PgUp:跳转至源码首页;

CTRL+PgDn:跳转至源码尾页;

CTRL+Home:跳转至本页起首;

CTRL+End:跳转至本页末尾;

PgUp,PgDn:上下翻页;

    Home,End:行首行尾。


4.使用技巧

    超级反汇编是一个强有力的工具,要熟练运用它,应该有一定的技术背景和编程经验,这里简单介绍以下使用技巧。

    使用超级反汇编应注意使用反汇编浏览命令V和反汇编命令U.对于一个待处理的执行程序,在进入超级反汇编后,首先应该用反汇编浏览命令V,看看程序的起点,然后根据情况从程序的起点进行反汇编。再用V命令跟踪程序的转移指令,包括调用子程序,无条件转移指令和条件转移指令。见图5.


图5


    对于一些不能立刻判断是程序或数据的缓冲区单元的内容,可以先不管,因为如果是程序的话,也许在后面的程序会跳转至此,如果是有用的数据的话,后面的程序就应该会用到,根据跳转指令逐步将整个程序反汇编成源码,最后根据源码,逐步整理并删除一些没用的内容。将跳转指令的绝对地址,用助记符代替,并最终整理出源码文件,然后存盘。

2017年01月05日

正达系列故障电路板检测仪:正达电路测试仪的基本测试方法
正达电路板在线维修测试仪:电路板网络测试

上一篇

下一篇

※正达电路板故障维修仪器:超级反汇编

正达电路板故障维修仪器

添加时间:

本网站由阿里云提供云计算及安全服务 Powered by CloudDream