📄 main.lis
字号:
0266 2990 ld R2,y+
0268 1990 ld R1,y+
026A 0990 ld R0,y+
026C .dbline 0 ; func end
026C 1895 reti
026E .dbsym l temp2 1 i
026E .dbsym l temp1 1 i
026E .dbend
026E .dbfunc e swRoot _swRoot fi
026E ; ii -> R10
026E ; dwSquareRoot -> y+0
026E ; dwNumber -> y+10
.even
026E _swRoot::
026E 0E940000 xcall push_arg4
0272 0E940000 xcall push_gset3
0276 2497 sbiw R28,4
0278 .dbline -1
0278 .dbline 122
0278 ;
0278 ; //***************************************************************
0278 ; // Function : swRoot
0278 ; // Input : dwNumber
0278 ; // Output : Square Root of input
0278 ; // Description : Square Root Calculate
0278 ; //***************************************************************
0278 ; INT16U swRoot(INT32U dwNumber)
0278 ; {
0278 .dbline 126
0278 ; INT8U ii;
0278 ; INT32U dwSquareRoot;
0278 ;
0278 ; if(dwNumber == 0)
0278 40E0 ldi R20,0
027A 50E0 ldi R21,0
027C 60E0 ldi R22,0
027E 70E0 ldi R23,0
0280 FE01 movw R30,R28
0282 2284 ldd R2,z+10
0284 3384 ldd R3,z+11
0286 4484 ldd R4,z+12
0288 5584 ldd R5,z+13
028A 2416 cp R2,R20
028C 3506 cpc R3,R21
028E 4606 cpc R4,R22
0290 5706 cpc R5,R23
0292 19F4 brne L16
0294 .dbline 127
0294 ; {
0294 .dbline 128
0294 ; return (0);
0294 0027 clr R16
0296 1127 clr R17
0298 9CC0 xjmp L15
029A L16:
029A .dbline 130
029A ; }
029A ; if(dwNumber <= 4194304)
029A 40E0 ldi R20,0
029C 50E0 ldi R21,0
029E 60E4 ldi R22,64
02A0 70E0 ldi R23,0
02A2 FE01 movw R30,R28
02A4 2284 ldd R2,z+10
02A6 3384 ldd R3,z+11
02A8 4484 ldd R4,z+12
02AA 5584 ldd R5,z+13
02AC 4215 cp R20,R2
02AE 5305 cpc R21,R3
02B0 6405 cpc R22,R4
02B2 7505 cpc R23,R5
02B4 E0F0 brlo L18
02B6 .dbline 131
02B6 ; {
02B6 .dbline 132
02B6 ; dwSquareRoot = dwNumber / 1024 + 63;
02B6 8AE0 ldi R24,10
02B8 90E0 ldi R25,0
02BA FE01 movw R30,R28
02BC 2284 ldd R2,z+10
02BE 3384 ldd R3,z+11
02C0 4484 ldd R4,z+12
02C2 5584 ldd R5,z+13
02C4 8A93 st -y,R24
02C6 8101 movw R16,R2
02C8 9201 movw R18,R4
02CA 0E940000 xcall lsr32
02CE 1801 movw R2,R16
02D0 2901 movw R4,R18
02D2 4FE3 ldi R20,63
02D4 50E0 ldi R21,0
02D6 60E0 ldi R22,0
02D8 70E0 ldi R23,0
02DA 240E add R2,R20
02DC 351E adc R3,R21
02DE 461E adc R4,R22
02E0 571E adc R5,R23
02E2 FE01 movw R30,R28
02E4 2082 std z+0,R2
02E6 3182 std z+1,R3
02E8 4282 std z+2,R4
02EA 5382 std z+3,R5
02EC .dbline 133
02EC ; }
02EC 45C0 xjmp L19
02EE L18:
02EE .dbline 134
02EE ; else if(dwNumber <= 134217728)
02EE 40E0 ldi R20,0
02F0 50E0 ldi R21,0
02F2 60E0 ldi R22,0
02F4 78E0 ldi R23,8
02F6 FE01 movw R30,R28
02F8 2284 ldd R2,z+10
02FA 3384 ldd R3,z+11
02FC 4484 ldd R4,z+12
02FE 5584 ldd R5,z+13
0300 4215 cp R20,R2
0302 5305 cpc R21,R3
0304 6405 cpc R22,R4
0306 7505 cpc R23,R5
0308 E0F0 brlo L20
030A .dbline 135
030A ; {
030A .dbline 136
030A ; dwSquareRoot = dwNumber / 4096 + 255;
030A 8CE0 ldi R24,12
030C 90E0 ldi R25,0
030E FE01 movw R30,R28
0310 2284 ldd R2,z+10
0312 3384 ldd R3,z+11
0314 4484 ldd R4,z+12
0316 5584 ldd R5,z+13
0318 8A93 st -y,R24
031A 8101 movw R16,R2
031C 9201 movw R18,R4
031E 0E940000 xcall lsr32
0322 1801 movw R2,R16
0324 2901 movw R4,R18
0326 4FEF ldi R20,255
0328 50E0 ldi R21,0
032A 60E0 ldi R22,0
032C 70E0 ldi R23,0
032E 240E add R2,R20
0330 351E adc R3,R21
0332 461E adc R4,R22
0334 571E adc R5,R23
0336 FE01 movw R30,R28
0338 2082 std z+0,R2
033A 3182 std z+1,R3
033C 4282 std z+2,R4
033E 5382 std z+3,R5
0340 .dbline 137
0340 ; }
0340 1BC0 xjmp L21
0342 L20:
0342 .dbline 139
0342 ; else
0342 ; {
0342 .dbline 140
0342 ; dwSquareRoot = dwNumber / 16384 + 1023;
0342 8EE0 ldi R24,14
0344 90E0 ldi R25,0
0346 FE01 movw R30,R28
0348 2284 ldd R2,z+10
034A 3384 ldd R3,z+11
034C 4484 ldd R4,z+12
034E 5584 ldd R5,z+13
0350 8A93 st -y,R24
0352 8101 movw R16,R2
0354 9201 movw R18,R4
0356 0E940000 xcall lsr32
035A 1801 movw R2,R16
035C 2901 movw R4,R18
035E 4FEF ldi R20,255
0360 53E0 ldi R21,3
0362 60E0 ldi R22,0
0364 70E0 ldi R23,0
0366 240E add R2,R20
0368 351E adc R3,R21
036A 461E adc R4,R22
036C 571E adc R5,R23
036E FE01 movw R30,R28
0370 2082 std z+0,R2
0372 3182 std z+1,R3
0374 4282 std z+2,R4
0376 5382 std z+3,R5
0378 .dbline 141
0378 ; }
0378 L21:
0378 L19:
0378 .dbline 142
0378 ; for (ii = 0;ii < 5;ii++)
0378 AA24 clr R10
037A 25C0 xjmp L25
037C L22:
037C .dbline 143
037C .dbline 144
037C FE01 movw R30,R28
037E 2080 ldd R2,z+0
0380 3180 ldd R3,z+1
0382 4280 ldd R4,z+2
0384 5380 ldd R5,z+3
0386 FE01 movw R30,R28
0388 6284 ldd R6,z+10
038A 7384 ldd R7,z+11
038C 8484 ldd R8,z+12
038E 9584 ldd R9,z+13
0390 5A92 st -y,R5
0392 4A92 st -y,R4
0394 3A92 st -y,R3
0396 2A92 st -y,R2
0398 8301 movw R16,R6
039A 9401 movw R18,R8
039C 0E940000 xcall div32u
03A0 FE01 movw R30,R28
03A2 2080 ldd R2,z+0
03A4 3180 ldd R3,z+1
03A6 4280 ldd R4,z+2
03A8 5380 ldd R5,z+3
03AA 200E add R2,R16
03AC 311E adc R3,R17
03AE 421E adc R4,R18
03B0 531E adc R5,R19
03B2 5694 lsr R5
03B4 4794 ror R4
03B6 3794 ror R3
03B8 2794 ror R2
03BA FE01 movw R30,R28
03BC 2082 std z+0,R2
03BE 3182 std z+1,R3
03C0 4282 std z+2,R4
03C2 5382 std z+3,R5
03C4 .dbline 145
03C4 L23:
03C4 .dbline 142
03C4 A394 inc R10
03C6 L25:
03C6 .dbline 142
03C6 8A2D mov R24,R10
03C8 8530 cpi R24,5
03CA C0F2 brlo L22
03CC .dbline 146
03CC ; {
03CC ; dwSquareRoot = (dwSquareRoot + dwNumber / dwSquareRoot) / 2;
03CC ; }
03CC ; return((INT16U)dwSquareRoot);
03CC FE01 movw R30,R28
03CE 0081 ldd R16,z+0
03D0 1181 ldd R17,z+1
03D2 .dbline -2
03D2 L15:
03D2 2496 adiw R28,4
03D4 0E940000 xcall pop_gset3
03D8 2496 adiw R28,4
03DA .dbline 0 ; func end
03DA 0895 ret
03DC .dbsym r ii 10 c
03DC .dbsym l dwSquareRoot 0 l
03DC .dbsym l dwNumber 10 l
03DC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -