DSP汇编中的结构体参数传入及使用、双条件操作

2019-03-26 15:48发布

DSP汇编中的结构体参数传入及使用、双条件操作 我的板子是c6740,开发中遇到几个汇编问题求教:
1. 结构体参数传入及使用
比如一个实现简单游程编码的测试程序,如下:
struct _STREAM
{
    BYTE *buffer;
    int  size; //buffer长度
}
void encode(BYTE *pSrc, datasize, STREAM *pDstStream)
在DSP汇编中,A4接收pSrc,B4接收datasize, 问题:
--那哪个寄存器接收*pDstStream?是正常的A6接收,还是有特殊的寄存器?
--如何对结构体成员操作,如把数据存到buffer、size++等 2. 在汇编中如何写双条件判断语句啊?
如下面源程序中的!input && datasize?
while(!input && datasize)
{
    numZeros++;
    GetNextInput(input);
} 3.优化
如实现上面功能的汇编程序,因为程序需要一个字节一个字节去判断,然后进行操作,程序中有比较多的循环操作,
所以,在汇编中会出现比较多的NOP指令,这样程序性能会比较低吧?请问应该如何去提高程序性能呢? [ 本帖最后由 breeze505 于 2012-5-9 11:04 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
16条回答
breeze505
2019-03-28 06:44
您好!我按照您的指导修改了代码如下,但是运行还是不行,麻烦帮忙再看下我哪里出错了?非常感谢
* ===================== LOOP KERNEL ============================== *
        MV                .L1                A6, A_loopcount
loop:
           LDB         .D1T1         *A4++[1], A_x1
        LDB         .D2T2         *B4++[1], B_y1
        SUB                .L1                A_loopcount, 1, A_loopcount
       
        CMPGT        .L1                A_loopcount, 6, A_tmp
        [A_tmp]        B        .S2        condition1
        [A_tmp]ADDKPC loop, B3, 4
        NOP        4       
       
        CMPGT        .L1                A_loopcount, 3, A_tmp
        [A_tmp]        B        .S2        condition2
        [A_tmp]ADDKPC loop, B3, 4
        NOP 4        
       
        CMPGT        .L1                A_loopcount, 0, A_tmp
        [A_tmp]B        .S2        condition3
        [A_tmp]ADDKPC loop, B3, 4
        NOP 4       
       
*===================== LOOP EPILOG ============================== *

        [!A_loopcount]B .S2 B3   ;return
||        MVK .S1 1,A4 ;return 1
        NOP 4

* ================= LOOP PROLOG ============================ *
condition1:
        ADD                .S1X        A_x1, B_y1, A_sum
        STB                .D2T1        A_sum, *B_s++[1]       
        [A_loopcount]         B .S2 B3
        nop        5
condition2:
        SUB                .S1X        A_x1, B_y1, A_sum
        STB                .D2T1        A_sum, *B_s++[1]
        [A_loopcount]         B .S2 B3        
        nop        5       
condition3:
        MPY                .M1x                A_x1, B_y1, A_sum       
        nop 1
        STB                .D2T1        A_sum, *B_s++[1]
        [A_loopcount]         B .S2 B3        
        nop        5       
        .end

一周热门 更多>