📄 spline.s
字号:
.dbsym r B 14 pD
.dbsym l sl 90 pX
.dbend
.dbfunc e SPLINE_Generate _SPLINE_Generate fV
; AMagOld -> y+44
; AMag -> y+40
; k -> y+0
; i -> R10,R11
; sl -> R12,R13
.even
_SPLINE_Generate::
xcall push_gset4
movw R12,R16
sbiw R28,63
sbiw R28,1 ; offset = 64
.dbline -1
.dbline 203
; { B[i] = Work[i];
; }
;
; }
;
;
;
; /****************************************************************************
; * 名称:SPLINE_Generate()
; * 功能:产生样条曲线图形。产生的各个端点保存到sl的结构内。
; * 入口参数:sl 要操作的样条曲线对象,SPLINE结构
; * 出口参数:无
; * 说明:sl要先使用SPLINE_SetSpline()设置各个特征点。
; ****************************************************************************/
; void SPLINE_Generate(SPLINE *sl)
; { float k[NPMAX];
.dbline 208
; float AMag , AMagOld;
; int i;
;
; /* 设置A点值 */
; for(i=0 ; i<=(sl->Np-2); i++ )
clr R10
clr R11
xjmp L65
L62:
.dbline 209
.dbline 209
ldi R16,4
ldi R17,0
movw R18,R10
xcall empy16s
movw R2,R16
movw R4,R2
add R4,R12
adc R5,R13
movw R30,R4
ldd R6,z+4
ldd R7,z+5
ldd R8,z+6
ldd R9,z+7
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R30,R4
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
xcall sub32f
movw R24,R12
subi R24,176 ; offset = 80
sbci R25,255
movw R30,R2
add R30,R24
adc R31,R25
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 210
ldi R16,4
ldi R17,0
movw R18,R10
xcall empy16s
movw R2,R16
movw R24,R12
adiw R24,44
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
movw R24,R12
adiw R24,40
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
xcall sub32f
movw R24,R12
subi R24,136 ; offset = 120
sbci R25,255
movw R30,R2
add R30,R24
adc R31,R25
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 211
L63:
.dbline 208
movw R24,R10
adiw R24,1
movw R10,R24
L65:
.dbline 208
movw R30,R12
subi R30,72 ; addi 440
sbci R31,254
ldd R24,z+0
ldd R25,z+1
sbiw R24,2
cp R24,R10
cpc R25,R11
brlt X8
xjmp L62
X8:
.dbline 214
; { sl->Ax[i] = sl->Px[i+1] - sl->Px[i];
; sl->Ay[i] = sl->Py[i+1] - sl->Py[i];
; }
;
; /* 计算k变量 */
; AMagOld = (float)sqrt(sl->Ax[0] * sl->Ax[0] + sl->Ay[0] * sl->Ay[0]);
movw R30,R12
subi R30,176 ; addi 80
sbci R31,255
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
movw R30,R28
std z+48,R2
std z+49,R3
std z+50,R4
std z+51,R5
movw R30,R12
subi R30,136 ; addi 120
sbci R31,255
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
movw R30,R28
std z+52,R2
std z+53,R3
std z+54,R4
std z+55,R5
movw R30,R28
ldd R2,z+48
ldd R3,z+49
ldd R4,z+50
ldd R5,z+51
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R30,R28
; stack offset 4
ldd R2,z+52
ldd R3,z+53
ldd R4,z+54
ldd R5,z+55
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall empy32fs
movw R30,R28
; stack offset 4
ldd R2,z+56
ldd R3,z+57
ldd R4,z+58
ldd R5,z+59
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R30,R28
; stack offset 8
ldd R2,z+60
ldd R3,z+61
ldd R4,z+62
ldd R5,z+63
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall empy32fs
xcall add32f
xcall _sqrt
movw R30,R28
std z+44,R16
std z+45,R17
std z+46,R18
std z+47,R19
.dbline 215
; for(i=0 ; i<=(sl->Np-3); i++)
clr R10
clr R11
xjmp L69
L66:
.dbline 216
.dbline 216
ldi R16,4
ldi R17,0
movw R18,R10
xcall empy16s
movw R24,R12
subi R24,172 ; offset = 84
sbci R25,255
movw R30,R16
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
movw R30,R28
std z+56,R2
std z+57,R3
std z+58,R4
std z+59,R5
movw R24,R12
subi R24,132 ; offset = 124
sbci R25,255
movw R30,R16
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
movw R30,R28
std z+60,R2
std z+61,R3
std z+62,R4
std z+63,R5
movw R30,R28
ldd R2,z+56
ldd R3,z+57
ldd R4,z+58
ldd R5,z+59
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R30,R28
; stack offset 4
ldd R2,z+60
ldd R3,z+61
ldd R4,z+62
ldd R5,z+63
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall empy32fs
movw R30,R28
; stack offset 4
subi R30,192 ; addi 64
sbci R31,255
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R30,R28
; stack offset 8
subi R30,188 ; addi 68
sbci R31,255
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall empy32fs
xcall add32f
xcall _sqrt
movw R30,R28
std z+40,R16
std z+41,R17
std z+42,R18
std z+43,R19
.dbline 217
ldi R16,4
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
movw R24,R28
add R30,R24
adc R31,R25
movw R26,R28
adiw R26,44
ld R2,x+
ld R3,x+
ld R4,x+
ld R5,x
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R26,R28
; stack offset 4
adiw R26,44
ld R2,x+
ld R3,x+
ld R4,x+
ld R5,x
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall div32f
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 218
movw R30,R28
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
movw R30,R28
std z+44,R2
std z+45,R3
std z+46,R4
std z+47,R5
.dbline 219
L67:
.dbline 215
movw R24,R10
adiw R24,1
movw R10,R24
L69:
.dbline 215
movw R30,R12
subi R30,72 ; addi 440
sbci R31,254
ldd R24,z+0
ldd R25,z+1
sbiw R24,3
cp R24,R10
cpc R25,R11
brlt X9
xjmp L66
X9:
.dbline 220
; { AMag = (float)sqrt(sl->Ax[i+1] * sl->Ax[i+1] + sl->Ay[i+1] * sl->Ay[i+1]);
; k[i] = AMagOld / AMag;
; AMagOld = AMag;
; }
; k[sl->Np-2] = 1.0f;
movw R30,R12
subi R30,72 ; addi 440
sbci R31,254
ldd R18,z+0
ldd R19,z+1
ldi R16,4
ldi R17,0
xcall empy16s
movw R30,R16
movw R24,R28
sbiw R24,8
add R30,R24
adc R31,R25
ldi R16,<L26
ldi R17,>L26
xcall lpm32
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 223
;
; /* 矩阵计算 */
; for(i=1; i<=(sl->Np-2); i++)
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L74
L71:
.dbline 224
.dbline 224
ldi R16,4
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
movw R24,R12
subi R24,192 ; offset = 320
sbci R25,254
add R30,R24
adc R31,R25
ldi R16,<L26
ldi R17,>L26
xcall lpm32
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 225
ldi R16,4
ldi R17,0
movw R18,R10
xcall empy16s
movw R2,R16
ldi R16,<L28
ldi R17,>L28
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R24,R28
; stack offset 4
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
xcall empy32fs
movw R24,R28
; stack offset 4
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
ldi R16,<L26
ldi R17,>L26
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
xcall add32fs
xcall empy32f
movw R24,R12
subi R24,152 ; offset = 360
sbci R25,254
movw R30,R2
add R30,R24
adc R31,R25
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 226
ldi R16,4
ldi R17,0
movw R18,R10
xcall empy16s
movw R2,R16
movw R24,R28
sbiw R24,4
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
movw R24,R28
; stack offset 4
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
xcall empy32fs
movw R24,R28
; stack offset 4
adiw R24,4
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
xcall empy32f
movw R24,R12
subi R24,112 ; offset = 400
sbci R25,254
movw R30,R2
add R30,R24
adc R31,R25
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 227
L72:
.dbline 223
movw R24,R10
adiw R24,1
movw R10,R24
L74:
.dbline 223
movw R30,R12
subi R30,72 ; addi 440
sbci R31,254
ldd R24,z+0
ldd R25,z+1
sbiw R24,2
cp R24,R10
cpc R25,R11
brlt X10
xjmp L71
X10:
.dbline 228
; { sl->Mat[0][i] = 1.0f;
; sl->Mat[1][i] = 2.0f * k[i-1] * (1.0f + k[i-1]);
; sl->Mat[2][i] = k[i-1] * k[i-1] * k[i];
; }
; sl->Mat[1][0] = 2.0f;
ldi R16,<L28
ldi R17,>L28
xcall lpm32
movw R30,R12
subi R30,152 ; addi 360
sbci R31,254
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 229
; sl->Mat[2][0] = k[0];
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
movw R30,R12
subi R30,112 ; addi 400
sbci R31,254
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
.dbline 230
; sl->Mat[0][sl->Np-1] = 1.0f;
movw R30,R12
subi R30,72 ; addi 440
sbci R31,254
ldd R18,z+0
ldd R19,z+1
ldi R16,4
ldi R17,0
xcall empy16s
movw R30,R16
sbiw R30,4
movw R24,R12
subi R24,192 ; offset = 320
sbci R25,254
add R30,R24
adc R31,R25
ldi R16,<L26
ldi R17,>L26
xcall lpm32
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 231
; sl->Mat[1][sl->Np-1] = 2.0f * k[sl->Np-2];
movw R30,R12
subi R30,72 ; addi 440
sbci R31,254
ldd R18,z+0
ldd R19,z+1
ldi R16,4
ldi R17,0
xcall empy16s
movw R2,R16
ldi R16,<L28
ldi R17,>L28
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R24,R28
; stack offset 4
sbiw R24,4
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
xcall empy32f
movw R24,R12
subi R24,152 ; offset = 360
sbci R25,254
movw R30,R2
sbiw R30,4
add R30,R24
adc R31,R25
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 233
;
; for(i=1; i<=(sl->Np-2);i++)
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L83
L80:
.dbline 234
.dbline 234
ldi R16,4
ldi R17,0
movw R18,R10
xcall empy16s
movw R2,R16
movw R24,R12
subi R24,176 ; offset = 80
sbci R25,255
movw R4,R24
ldi R16,<L27
ldi R17,>L27
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R30,R2
sbiw R30,4
add R30,R4
adc R31,R5
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R24,R28
; stack offset 8
adiw R24,4
movw R30,R2
add R30,R24
adc R31,R25
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R24,R28
; stack offset 12
adiw R24,8
movw R30,R2
add R30,R24
adc R31,R25
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
st -y,R9
st -y,R8
st -y,R7
st -y,R6
xcall empy32fs
movw R30,R2
add R30,R4
adc R31,R5
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
st -y,R7
st -y,R6
st -y,R5
st -y,R4
xcall empy32fs
xcall add32fs
xcall empy32f
movw R24,R12
subi R24,96 ; offset = 160
sbci R25,255
movw R30,R2
add R30,R24
adc R31,R25
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 235
ldi R16,4
ldi R17,0
movw R18,R10
xcall empy16s
movw R2,R16
movw R24,R12
subi R24,136 ; offset = 120
sbci R25,255
movw R4,R24
ldi R16,<L27
ldi R17,>L27
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R30,R2
sbiw R30,4
add R30,R4
adc R31,R5
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R24,R28
; stack offset 8
adiw R24,4
movw R30,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -