DSP汇编程序基本块划分与优化及其软件实现

2016-08-15 01:26周国昌赖晓玲王向涛于登云郭阳明
沈阳航空航天大学学报 2016年2期

周国昌,巨 艇,赖晓玲,朱 启,王向涛,于登云,郭阳明

(1.中国空间技术研究院 西安分院,西安 710100;2.西北工业大学 计算机学院,西安 710072;3.中国航天科技集团公司 科技委,北京100048)



信息科学与工程

DSP汇编程序基本块划分与优化及其软件实现

周国昌1,巨艇1,赖晓玲1,朱启1,王向涛2,于登云3,郭阳明2

(1.中国空间技术研究院 西安分院,西安 710100;2.西北工业大学 计算机学院,西安 710072;3.中国航天科技集团公司 科技委,北京100048)

摘要:针对空间环境中DSP软错误检测的需求,研究一种DSP汇编程序基本块划分与优化方法,并对其进行了软件实现。该方法首先将汇编程序精简为只含指令和标号的“伪汇编”程序;再对“伪汇编”代码进行基本块划分;然后经过3种优化得到优化后的基本块。最后根据优化前后的基本块信息,分别绘制优化前后的跳转流程图。利用该软件可以将程序划分为基本块的集合,并提取每个基本块的结构信息,可有效支撑基于完整性检查的程序流错误检测。软件代码精简、稳定性好、空间复杂度小,对DSP单粒子效应故障检测有着重要的应用价值。

关键词:基本块划分;基本块优化;汇编程序;DSP

随着空间技术的发展,基于高性能DSP的信息处理系统越来越多地被应用于航天器平台上。宇宙空间辐照环境中,DSP无时无刻不发生着对航天器有严重影响的单粒子效应(SEE),包括SEU(单粒子翻转)、SET(单粒子瞬态脉冲)、SEB(单粒子烧毁)、SEL(单粒子闭锁)等,极大地降低了航天器运行的可靠性。因此,必须采取有效的措施,进行单粒子效应主动防护或选择合理的检测点完成单粒子软错误故障的检测与恢复[1-5]。 基于DSP的空间电子系统单粒子软错误最主要的表现形式是控制流错误[6-8]。控制流错误是指程序偏离了正确的执行流程,导致程序输出结果错误,甚至导致系统崩溃[8-10]。常见的控制流错误检测方法是基于签名监测的方法[11-12],即将程序划分为若干个基本块并为每个基本块分配一个静态签名,在程序运行时再为每个基本块计算动态签名,然后通过比较静态签名与动态签名的一致性来判断程序是否发生控制流错误。该方法中签名的生成方式具有很大的平台依赖性,即在不同的指令集平台上需采用不同的签名生成方式,这在很大程度上限制了基于签名的控制流错误检测方法的可移植性。另一种控制流错误检测方法是基于完整性检查的控制流错误检测方法[11,13-14],该方法也是将程序划分为基本块的集合,然后通过检查每个基本块的执行完整性来判断程序是否发生控制流错误。执行完整性检查的依据是每个基本块的结构信息,如基本块出口地址、基本块入口地址、基本块长度等。为此,需要在划分基本块时记录下基本块的结构信息,以便在程序运行时将这些信息作为检查基本块是否被完整执行的依据。 为此,本文基于完整性检查方法思想,结合TI TMS320C6x系列DSP汇编程序的特点,提出了一种基本块划分与优化方法,并对其进行了软件实现。利用该软件可以将程序划分为基本块的集合,并提取每个基本块的结构信息,以支撑控制流错误的检测。该软件代码精简、稳定性好、空间复杂度小,对DSP单粒子效应故障检测有着重要的应用价值。

1 DSP汇编程序基本块划分与优化方法

1.1基本块划分原理

基本块是指一段顺序执行的代码。DSP程序在其指令顺序执行的一段基本块中,如果没有发生控制流错误,程序将只能从代码的第一句进入基本块,从最后一句退出基本块。即在正常情况下,基本块中除最后一句外不应出现控制流分支的情况;基本块中除第一句外不应出现控制流进入的情况。 因此,分支指令出错是导致控制流错误的主要原因。在划分基本块后,所有的分支指令都位于基本块的末尾。当出现分支指令错误时,控制流可能转移到不正确的地址处开始执行,也可能导致一个本该发生的控制流转移没有发生或相反。此外,DSP的软错误也可能引起存储单元中的信息发生单粒子翻转,如果这种单粒子翻转发生在程序存储区,则有可能改变指令的编码。实际分析表明,发生在程序存储区的单粒子翻转可能导致一条非分支指令转变为分支指令;也可能导致一条分支指令转变为非分支指令。此时,程序必然出现控制流错误。 针对DSP汇编程序划分基本块,就是在DSP汇编程序代码中寻找程序控制指令,并以此确定基本块的边界。虽然不同平台采用的指令集不同,但不同的分支指令集内部都有用于实现函数调用、函数返回和跳转的指令。因此,本文将以函数调用指令、函数返回指令和不含嵌套执行的for循环指令等分支跳转指令的位置为原始检测点,进行基本块的划分与优化。

1.2基本块划分与优化方法

在汇编语言一级,实现基本块划分的关键是识别函数调用指令、函数返回指令和不含嵌套执行的for循环指令,以及以上分支跳转指令的目的地址。基本块划分规则描述如下:(1)跳转语句和函数调用作为一个基本模块的出口;(2)当前跳转(调用)的后一句作为基本模块的入口;(3)当前跳转(调用)的目的语句作为基本模块的入口;(4)当前跳转(调用)的目的语句的前一句作为基本模块的出口。 本文提出的控制流检测思想是检测基本块的执行完整性,即通过检查每个基本块是否被完整执行来检查程序是否发生控制流错误。完整性检查的核心就是在被检测模块的出口处检查当前模块的指令执行条数和模块最后一条语句的逻辑地址是否和划分基本块时记录的一致。在这种检测机制下,由于函数返回和函数调用在控制流意义上都是无分支的,可以考虑将两个在控制流上无分支的基本块的执行完整性合并起来检查。为此,本文提出了“返回优化”和“调用优化”两种优化机制。即函数调用发生时,控制流一定会从调用基本块转移到子函数的第一个基本块。如果在这个过程从没有发生控制流错误,在子函数第一个基本块的检测点处,执行的指令条数一定等于调用基本块的指令条数加上子函数第一块的指令条数,块出口逻辑地址一定为子函数调用块的出口指令的逻辑地址,这2个确定的信息就作为软错误检测的依据,其参考值已经在程序执行前记录在分块表中。

此外,对于不含嵌套执行的for循环,循环体执行完之后控制流一定会进入其后的一个基本块,此时则可以进行“循环优化”。对于for循环,其循环次数是已知的。也就是说,可以计算出循环体总共执行的指令条数。即,对于不嵌套的for循环,能够在循环体之后的一个基本块出口处确切地知道在2个基本块之间总共执行了多少条指令以及控制流应在的确切位置,有了这2个信息,就可以将不嵌套的for循环的循环体和其后的一个基本块的完整性合并起来检测,从而减少检测点的数量,减少检测开销。

1.3优化效果分析

本文提出的基本块优化措施,主要应用于DSP汇编程序的函数调用、函数返回和不含嵌套执行的for循环,优化措施的效果实际上与程序的性质有关,即程序中出现函数调用的次数和循环操作的出现频率对优化的性能具有很大的影响。 函数调用和函数返回是成对出现的,即程序中每出现一个子函数调用,就可以在检测点优化时减少2个检测点。而程序中大多数循环也都能用采用上述优化措施进行优化。在典型的FFT程序上,优化措施使优化后的检测点数量降到优化前的60%左右。对于一般的DSP程序而言,优化措施能使检测点的数量降到优化前的70%以下。

2 软件的设计

2.1软件的功能设计

本软件基于完整性检查方法,以TI TMS320C6x系列DSP汇编程序为对象,设计实现一个能够实现基本块划分和优化方法的软件工具。

汇编级的DSP基本块划分和优化根据基本块的标识信息,执行基本块的初始划分、函数返回优化、函数调用优化和循环优化等步骤。软件的执行过程如图1所示。

图1 软件的执行流程图

基于以上基本块的划分规则和图1,DSP汇编程序基本块的划分与优化软件应包括如下功能:

(1)DSP汇编代码的简化预处理

目前,TI公司为旗下的TI C6x系列DSP提供了集成开发环境CCS(Code Composer Studio)。缺省条件下,可以在CCS编译器工作目录下找到DSP工程的汇编语言程序。但该汇编程序包含的变量声明、函数声明、标号说明等信息对于基本块划分来说是不必要的,而且会对基本块的划分工作带来很大干扰。此外,编译得到的汇编程序中,并不包含汇编指令的地址信息。因此,本软件工具将对其进行简化预处理,去除掉无用的信息,同时填入伪逻辑地址(行号),以方便基本块的划分。

(2)划分基本块并生成分块表

根据基本块的关键字将汇编程序划分为若干个基本块的集合,并将每个基本块的结构信息写入分块表中。此处,基本块关键字指在汇编语言中的跳转指令、函数调用指令和函数返回指令,分块表则为一个链表,用于保存基本块的结构信息,包括基本块入口、基本块出口、基本块长度、标志字段、下一跳转目的地址等信息。

(3)基本块的函数返回优化

根据每个基本块的标识信息,遍历原始分块表,找出函数返回指令所在基本块对应的结点,将此结点中的信息“合并”到函数调用返回后的基本块所对应的结点中,构成新的基本块和结点,形成函数返回优化后的分块表及其链接关系。

(4)基本块的函数调用优化

根据函数返回优化后的基本块的标识信息,遍历函数返回优化后的分块表,找出函数调用指令所在基本块对应的结点,将此结点中的信息“合并”到子函数的第一个基本块所在的结点中,构成新的基本块和结点,形成函数返回优化和函数调用优化后的分块表及其链接关系。

(5)基本块的循环优化

根据函数返回优化和函数调用优化后的基本块的标识信息,遍历函数返回优化和函数调用优化后的分块表,找出单重for循环的循环体所在基本块对应的结点,将此结点中的信息“合并”到循环体后基本块所在的结点中,构成新的分块表和结点。

2.2软件的主要算法

(1)简化预处理算法

软件工具可将CCS开发环境编译得到的源汇编语言程序作为输入,通过简化预处理进而输出适合扫描分支跳转指令的伪汇编代码。

通过以上讨论可知,简化预处理算法主要用于识别汇编程序中的汇编指令,并将它们输出到一个新的文本文件中,同时顺序为每条汇编指令分配一个伪逻辑地址。即在顺序扫描源汇编程序的过程中,若识别到“·”、“;”、“$”等开头且独占一行的代码,则直接忽略而不做任何处理。

此外,编译器将源程序编译成汇编程序的过程中生成的很多标号,往往标志着跳转指令的目的地址或函数调用中子函数的地址。在汇编程序首部,会对本程序中出现的所有标号进行集中说明,这部分信息对于基本块划分而言是可以忽略的。但是,在汇编程序内部,每一个标号都标志着一个基本块的开始,这些标号对于基本块划分而言却是必不可少的,必须保留下来。从程序运行的角度来看,标号自身并不是一条可执行的指令。所以,在简化预处理阶段不为标号分配伪逻辑地址。

综上所述,简化预处理程序算法伪代码描述如下:

输入:汇编语言源程序输出:只含标号和指令的伪程序Step1:从源汇编程序中读取一行,并判断该行第一个非空字符的性质;Step2:如果第一个字符为“·”,表明该行内容为声明信息,回到第一步开始执行;Step3:如果第一个字符为“;”,表明该行内容为解释信息,回到第一步开始执行;Step4:如果第一个字符为“$”,表明该行内容为一个标号,将此行标号输出到文本文件中。回到第一步开始执行。Step5:如果第二、三、四步的条件都不满足,表明该行内容为一条汇编指令,将该行输出到文本文件中,并分配一个行号。回到第一步开始执行。

(2)基本块划分算法

在基于TI C67xx的汇编程序中,分支跳转指令的目的地址是用标号来表示。在划分基本块的过程中,为了正确地表示基本块的入口信息,应先为汇编程序建立一个标号表,完成标号与“行号”的映射。此外, 在划分基本块时,在划分基本块的过程中,存在基本块拆分的情况。当原有的一个基本块拆分成2个基本块时,需要在分块表中插入一个数据项,由数据结构的知识可知,在顺序表中插入一个结点需要大量的移动数据的操作,但在链表中插入一个结点只需要修改几个指针即可。同时,在基本块的优化过程中,需要不断地合并基本块,每合并一个基本块就应该删除其在表上的数据项,在链表上删除一个结点也是很方便的。因此,需要构造相应的“分块表”以及“暂存表”来保存划分出的基本块的信息和汇编伪代码顺序扫描过程中的辅助性信息。考虑到链表在数据插入和删除上相对于顺序表的优势,故本文将“分块表”以及“暂存表”构造成链表的形式。

在划分基本块的过程中,识别汇编指令是否为跳转指令并将每一条指令的伪逻辑地址和暂存表的表项做比较,由此来确定基本块的边界。划分基本块的算法伪代码描述如下:

Step1:从伪程序中读取一行;Step2:判断该行的行号是否与暂存表中的任一表项相匹配:if匹配(找到一个基本块的入口,把其上一条指令作为上一基本块的出口)Step2.1:把上一条语句作为上一个基本块的出口,完善对应的分块表结点信息;Step2.2:在分块表中新开一个结点,记录当前基本块块的入口信息;Step2.3:在暂存表中删除表项与行号匹配的结点(转到Step3);else不匹配(转到Step3);Step3:判断该行指令是否为跳转指令或子函数调用指令。if是(找到一个基本块的出口)Step3.1:在分块表中完善前一个基本的信息,Step3.2:并在分块表中新开一个结点,存储下一个基本块的信息;Step3.2:根据跳转指令或子函数调用指令中的标号信息查找标号表中标号对应的行号,并在暂存表中新开一个结点来存储这个行号信息;回到step1开始执行。Else不是跳转或调用指令(回到Step1开始执行)。

(3)基本块优化算法

1)返回优化算法和调用优化算法在程序运行过程中,经常会发生函数调用的情况。发生函数调用时,控制流会从主函数转移到子函数上运行,在子函数执行完之后,控制流又回到主函数上运行。事实上,控制流从子函数返回主函数是一个无分支的过程。此外,函数的调用过程也是一个控制流的无分支转移过程,其优化就是链表结点的合并过程。在调用优化的基本块合并时,并不会把调用指令所在的基本块结点中的标志信息保存下来,即调用优化后,再也无法在分块表中识别出这个函数调用。但是,对于返回优化而言,必须先找到子函数调用,才能找到相应的函数返回,才能进行优化。因此,返回优化必须在调用优化之前进行。

此时,返回优化算法伪代码描述如下:

Step1:在分块表中寻找main函数的入口所在的结点并读取结点中的信息;Step2:根据结点标志字段的信息判断:Step2.1:若标志字段为2,表明找到一个函数调用,则用一个堆栈S来保存当前结点的下一个结点的地址,并根据当前结点中的下一跳地址去寻找子函数所在的第一个结点,读取子函数的第一个结点的信息。Step2.2:若标志字段不为2,则读取链表的下一个结点信息,回到Step2继续执行。Step3:读取step2.1中找到的子函数第一个结点中的信息并根据结点标志信息做判断:Step3.1:若标志字段为2,则表明子函数中存在有嵌套的函数调用,优化程序回到Step2.1处重新执行;Step3.2:若标志字段为0,表明找到当前子函数的最后一个基本块。此时,优化程序将于当前基本块和堆栈顶指向的基本块合并起来。Step3.2.1:将当前基本块中的块入口信息填入栈顶指向的基本块相应字段中,即用当前块的入口信息作为合并后的基本块的入口信息。Step3.2.2:将当前基本块的长度信息和栈顶指向的基本块的长度信息相加后填入栈顶指向的基本块的相应字段中,即更新优化后基本块的长度。Step3.2.3:释放当前结点,并维护链表的完整性。Step3.2.4:读取栈顶指向的结点,然后弹出栈顶信息,回到Step2执行。Step3.3:若标志字段为1或3,则回到step3继续执行。

调用优化的算法伪代码描述如下:

Step1:在分块表中寻找main函数的入口所在的结点,并读取该结点信息;Step2:根据结点标志字段的信息判断:Step2.1:若结点标志为2,表明找到一个函数调用:Step2.1.1:根据当前结点的下一跳字段的信息寻找子函数的第一个基本块所在的结点,将找到的结点记作N;Step2.1.2:将当前结点的入口信息填入N结点的相应字段中;将当前结点的块长信息和N结点中的块长信息相加后填入N结点的块长度字段中;Step2.1.3:删除当前结点,进行链表完整性维护。Step2.1.4:从结点N处重新开始顺序读取链表结点信息,回到Step2开始执行。Step2.2:若结点标志不为2,则回到step2继续执行。

2)循环优化

DSP程序中的for循环等对应着大量的矩阵操作。实现矩阵操作的循环有一个共同的特点,即循环的次数是一定的。对于模块的完整性检查而言,在基本块的检测点处必须知道从上一个检测点到当前检测点之间,程序执行了多少条指令。当循环的次数确定后,就能计算出这个循环总共需要执行的指令数。为此,可以考虑将循环看作一个整体,即把循环当作一个“基本块”。

根据DSP程序中循环的结构特征,循环优化算法的伪代码描述如下:

Step1:从分块表的第一个结点开始,读取结点的信息;Step2:根据当前结点中的信息判断,是否当前结点中下一跳地址等于块入口地址:Step2.1:若是,表明找到一个可以优化的循环,开始进行循环优化:Step2.1.1:将当前结点的块入口信息填入链表下一个结点的块入口信息中;Step2.1.2:计算循环块的总体长度,并和下一个结点的块长度值相加后填入下一结点的块长度字段中;Step2.1.3:删除当前结点,进行链表完整性维护;Step2.1.4:读取链表的下一结点,回到Step2,继续执行。Step2.2:若不是,读取链表的下一结点,回到Step2,继续执行。

3 软件的实现与运行

基于图1所示的执行流程,软件选择在Visual Studio 2008下基于MFC的对话框(Dialog)进行开发,界面设计为2个窗口,一个是用来显示代码及分块信息的基本窗口,另一个是专用于显示控制流程图的作图窗口。基本窗口可分为如下3个部分:(1)初始代码区:用于打开并显示出原始的汇编源文件;(2)简化代码区:用于显示简化后的代码;(3)分块信息区:用于显示优化前后基本块的信息。

绘图窗口用于显示优化前后的效果对比,因此,直接将窗口一分为二,分别绘制跳转流程图。整个软件工具的界面框图如图2所示。

图2 软件界面结构图

3.1基本窗口的实现

初始代码区中需要完成打开并显示源代码操作。鉴于文件的特点和人性化考虑,此区域中采用单击按钮弹出文件浏览窗口完成文件选择,并显示文件路径及分行显示打开的汇编代码源文件。此外,基于简化预处理程序算法,简化代码区中将完成的是将展平后的源汇编文件进行简化,得到只有指令和标号行的伪汇编代码,以方便代码扫描和分块。分块信息区中则显示包括优化前后的基本块的信息及其跳转关系。基本信息包括基本块块号、入口信息、出口信息、块长度、下一跳地址。

3.2跳转流程图的绘制

DSP汇编程序跳转流程图的绘制在一个独立对话框窗口创建,该窗口与流程图生成按钮进行关联[15]。绘制思想是,2次遍历存放跳转信息的二维数组,第一次只是绘制块节点,即只要发现一个新的块,就将其绘制出来,其形状和大小以及当中的字符显示均可自己设定。这样,一次遍历完后就将所有的块都绘制在了窗口中。第二次遍历则是单纯地绘制跳转关系,按照传统的流程图绘制习惯,从上往下跳转的绘制在右边,将自身跳转和从下往上跳转的绘制在左边。最后,将整个绘图的部分包含在一个文件中,分别用优化前后的分块表所对应的二维矩阵去调用这个文件,得到优化前后的跳转流程图。

3.3运行实例

选择DSP开发的FFT变换程序作为软件运行的实例。该FFT程序中主要由4个函数组成:一个主函数、一个初始化FFT函数、一个FFT执行函数和一个生成波形的函数,主函数分别调用另外3个函数。

图3则为根据优化前的分块表信息绘制的FFT程序跳转流程图,以及根据简化后的分块表信息绘制的跳转流程图。

图3 优化前后的FFT程序跳转流程图

4 总结

本文研究了DSP汇编程序基本块划分与优化方法,并设计实现了基本块划分与优化软件。该软件通过对汇编程序进行精简,去除汇编程序中与运行无关的解释和声明信息;再对精简后程序进行基本块划分,保存划分出的基本块的结构信息,并将其作为DSP程序控制流错误检测的依据;然后,在分块表上进行函数返回优化、函数调用优化和循环优化,减少基本块的数量;最后根据优化前后的基本块信息,绘制程序的跳转流程图。该DSP汇编程序文件结构简单、格式整齐,在实现所需功能的同时,具有代码精简、稳定性好、空间复杂度小等优点。

参考文献(References):

[1]贺兴华,肖山竹,张路,等.空间DSP信息处理系统存储器SEU加固技术研究[J].宇航学报,2010,31(2):472-477.

[2]王大庆,刘晓旭,王宇,等.基于软件的星载DSP减缓单粒子效应措施研究[J].空间电子技术,2013,38(1):40-43.

[3]王浩.DSP辐射效应分析及测试方法研究[D].西安:西安电子科技大学,2013.

[4]谭兰芳.面向软错误的故障恢复和验证技术研究[D].长沙:国防科学技术大学,2013.

[5]BAUMANN RC.Soft errors in commercial semiconductor technology:overview and scaling trends[J].IEEE 2002 Reliability Physics Tutorial Notes-Reliability Fundamentals,2002,12(1):1-14.

[6]李建立,谭庆平,谭兰芳,等.一种基于虚拟基本块和格式化标签的控制流检测方法[J].计算机学报,2014,37(11):2287-2296.

[7]徐建军,谭庆平,李建立,等.一种基于格式化标签的可扩展控制流检测方法[J].计算机研究与发展,2011,48(4):638- 646.

[8]吴艳霞.基于汇编语言的控制流错误检测算法研究[D].哈尔滨:哈尔滨工业大学,2008.

[9]Mostafa Jafari-Nodoushan,Seyed Ghassem Miremadi,Alireza Ejlali.Control-flow checking using branch instructions[C].2008 IEEE/IFIP International Conference on Embedded and Ubiquitous Computing.

[10]刑克飞.星载信号处理平台单粒子效应检测与加固技术研究[D].长沙:国防科技大学,2007

[11]黄振远.一种星载计算机控制流件检错技术的研究与实现[D].哈尔滨:哈尔滨工业大学,2006

[12]Oh,N.,Shirvani,P.P.Control-flow checking by software signatures[J],IEEE Transactions on Reliability,2002,51(1):11-122.

[13]Bolchini C,Miele A,Rebaudengo M,etc.Software and hardware techniques for SEU detection in IP processors[J].Journal of Electronic Testing,2008,24(1):35-44.

[14]张平,李清宝,崔晨.基于自动路径驱动的动态控制流恢复算法[J].计算机工程,2013,39(8):77-82.

[15]孙永新,吴家培,闫大顺.基于基本块标识方法的控制流图生成器设计[J].计算机应用与软件,2010,27(5):158-161.

(责任编辑:刘划英文审校:王云雁)

收稿日期:2015-03-27

基金项目:国家自然科学基金(项目编号:61371024)、航空科学基金(项目编号:2013ZD53051)、国防"973"项目、总装预研基金、航天支撑技术基金、中航产学研项目(项目编号:cxy2013XGD14)。

作者简介:周国昌(1978-),男,辽宁抚顺人,高级工程师,博士,主要研究方向:计算机体系统结构、星载ASIC 设计等。

文章编号:2095-1248(2016)02-0052-07

中图分类号:TP319

文献标志码:A

doi:10.3969/j.issn.2095-1248.2016.02.010

Basic blocks division optimization with DSP assemble and it’s software implementation

ZHOU Guo-chang1,JU Ting1,LAI Xiao-ling1,ZHU Qi1,WANG Xiang-tao2,YU Deng-yun3,GUO Yang-ming2

(1.Academy of Space Technology(Xi’an),Xi’an 710100,China;2.School of Computer Science and Technology,Northwestern Polytechnical University,Xi’an 710072,China;3.The Science and Technology Committee,China Aerospace Science and Technology Corp.,Beijing 100048,China)

Abstract:In order to meet the needs of DSP soft error detection in space environment,the DSP assembler basic block division and optimization method is presented,and a software tool based on the proposed method is designed and implemented.With the method,the assembly codes are firstly simplified to pseudo-codes only containing instructions and their labels.Afterwards,the basic blocks are segmented with the pseudo assembly codes.Finally,the optimized basic blocks are achieved with three times optimization.Moreover,with the information of basic blocks,the flow jump charts before and after optimization are drawn respectively.A certain DSP assembler can be divided into a collection of basic blocks with the tool of the software,and the structure information of each basic block are extracted simultaneously.The application shows the software has some merits,such as concise code,good stability,small space complexity,etc.It will be very valuable in application for DSP soft error detection.

Key words:basic block division;optimization;assembler;DSP