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 编辑 ]
此帖出自
小平头技术问答
访问结构体成员,需要手工计算偏移量。
LDW *+A6[0], A16 ; A16 = buffer,再以A16为指针,使用LDB指令访问buffer指向的内容
LDW *+A6[1], A17 ; A17 = size
2. 使用CMP和B指令(仅供参考)
; B16 = input, B17 = datasize
CMPEQ B16, 0, B0
[B0] B end_of_while
NOP 4
MV B17, B1
[!B1] B end_of_while
NOP 5
...
end_of_while:
...
3. 在汇编代码中,不建议使用结构体,因为需要手工计算偏移量,效率不高且容易出错,可以考虑在C一级把结构体拆开,再调用汇编代码。
考虑把GetNextInput函数内联,其中合适的指令提前来做。
另外如果while语句中有多个逻辑判断,会比较难以优化。for语句的循环便于优化,研究程序能否改写。
一周热门 更多>