在把C语言改成汇编的过程中,遇到下面问题:
1)二维数组怎么改成汇编
C语言:
Word16 cb_gain_128x3[128][3]={
19366, 19461, 19336,
12870, 12852, 16211,
17306, 16600, 15395,
9258, 10001, 15328,
4208, 15372, 17273,
10055, 10010, 10016,
15390, 13152, 9406,
4624, 4650, 4792,.........
改写后的汇编:
.data
cb_gain_128x3:
.word 19366, 19461, 19336
.word 12870, 12852, 16211
.word 17306, 16600, 15395
.word 9258, 10001, 15328
.word 4208, 15372, 17273
.word 10055, 10010, 10016........对不对?
2)二重循环怎么改成汇编
C语言:
min=0x7fffffff; // 最小距离
label=0;
for(i=0;i<CODEBOOKSIZE;i++) {
distance=0;
for(j=0;j<DIMENSION;j++) {
temp1 = gain_org[j] - cb_gain_128x3[i][j];
temp2 = (Word32)temp1 * temp1;
distance += temp2;
}
if(min>distance) {
min=distance;
label=i;
}
改写后汇编:
ZERO label
ZERO i
MVKL 0x7fffffff,min
MVK CODEBOOKSIZE,cnt1
MVK DIMENSION,cnt2
MVKL cb_gain_128x3,cb_gain
MV gain_org,gain_org_0
loop1:
ZERO distance
loop2:
ZERO temp1
ZERO temp2
LDH *gain_org_0++,temp1
LDH *cb_gain++,temp2
SUB temp1,temp2,temp1
MPY temp1,temp1,temp2
ADD distance,temp2,distance
;ZERO temp1
;ZERO temp2
SUB cnt2,1,cnt2
[cnt2] B loop2
CMPGT min,distance,if
[if] MVKL 0x7fffffff,distance
MV i,label
ADD i,1,i
SUB cnt1,1,cnt1
[cnt1] B loop1
STH label,*index
.endproc
主要问题是两个嵌套的for循环改成汇编时候,单步调试没有按照汇编代码跑起来,用两个loop1 loop2 这样实现for嵌套操作是否可以?