📄 test.lst
字号:
0710 838D STD Y+5,R24
(0306) }
(0307) if( delta_x > delta_y )
0711 802D LDD R2,Y+5
0712 803E LDD R3,Y+6
0713 804B LDD R4,Y+3
0714 805C LDD R5,Y+4
0715 1424 CP R2,R4
0716 0435 CPC R3,R5
0717 F414 BGE 0x071A
(0308) {
(0309) distance=delta_x; // 选取基本增量坐标轴
0718 0162 MOVW R12,R4
(0310) }
0719 C002 RJMP 0x071C
(0311) else
(0312) {
(0313) distance=delta_y;
071A 80CD LDD R12,Y+5
071B 80DE LDD R13,Y+6
(0314) }
(0315) for( t=0;t <= distance+1; t++ ) // 画线输出
071C 24EE CLR R14
071D C024 RJMP 0x0742
(0316) {
(0317) PRINT_point(uRow,uCol,s); // 画点
071E 8C09 LDD R0,Y+25
071F 8208 STD Y+0,R0
0720 8129 LDD R18,Y+1
0721 2F04 MOV R16,R20
0722 DF73 RCALL _PRINT_point
(0318) xerr += delta_x;
0723 802B LDD R2,Y+3
0724 803C LDD R3,Y+4
0725 0CA2 ADD R10,R2
0726 1CB3 ADC R11,R3
(0319) yerr += delta_y;
0727 802D LDD R2,Y+5
0728 803E LDD R3,Y+6
0729 0D62 ADD R22,R2
072A 1D73 ADC R23,R3
(0320) if( xerr > distance )
072B 14CA CP R12,R10
072C 04DB CPC R13,R11
072D F434 BGE 0x0734
(0321) {
(0322) xerr -= distance;
072E 18AC SUB R10,R12
072F 08BD SBC R11,R13
(0323) uRow += incx;
0730 802F LDD R2,Y+7
0731 8438 LDD R3,Y+8
0732 0D42 ADD R20,R2
0733 1D53 ADC R21,R3
(0324) }
(0325) if( yerr > distance )
0734 16C6 CP R12,R22
0735 06D7 CPC R13,R23
0736 F454 BGE 0x0741
(0326) {
(0327) yerr -= distance;
0737 196C SUB R22,R12
0738 097D SBC R23,R13
(0328) uCol += incy;
0739 8429 LDD R2,Y+9
073A 843A LDD R3,Y+10
073B 8049 LDD R4,Y+1
073C 805A LDD R5,Y+2
073D 0C42 ADD R4,R2
073E 1C53 ADC R5,R3
073F 825A STD Y+2,R5
0740 8249 STD Y+1,R4
0741 94E3 INC R14
0742 01C6 MOVW R24,R12
0743 9601 ADIW R24,1
0744 2C2E MOV R2,R14
0745 2433 CLR R3
0746 1582 CP R24,R2
0747 0593 CPC R25,R3
0748 F6AC BGE 0x071E
0749 962B ADIW R28,0xB
074A D0EB RCALL pop_gset5
074B 9508 RET
_PRINT_circle:
rs --> Y+1
xt --> R20
rr --> R22
xx --> R14
col --> R12
row --> R10
yt --> Y+3
s --> Y+21
Rx --> Y+19
Oy --> Y+17
Ox --> Y+15
074C D097 RCALL push_arg4
074D D0EA RCALL push_gset5
074E 9725 SBIW R28,5
(0329) }
(0330) }
(0331) }
(0332) /*******************************************************************************
(0333) 画圆数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2
(0334) *******************************************************************************/
(0335) void PRINT_circle(unsigned char Ox,unsigned char Oy,unsigned char Rx,unsigned char s)
(0336) {
(0337) unsigned int xx,rr;
(0338) unsigned int xt,yt;
(0339) unsigned int rs,row,col;
(0340) yt = Rx;
074F 882B LDD R2,Y+19
0750 2433 CLR R3
0751 823C STD Y+4,R3
0752 822B STD Y+3,R2
(0341) rr = (unsigned int)Rx*Rx+1; // 补偿1 修正方形
0753 882B LDD R2,Y+19
0754 2433 CLR R3
0755 0191 MOVW R18,R2
0756 0181 MOVW R16,R2
0757 D0CA RCALL empy16s
0758 01B8 MOVW R22,R16
0759 5F6F SUBI R22,0xFF
075A 4F7F SBCI R23,0xFF
(0342) rs = (yt+(yt>>1))>>1; // (*0.75)分开1/8圆弧来画
075B 802B LDD R2,Y+3
075C 803C LDD R3,Y+4
075D 9436 LSR R3
075E 9427 ROR R2
075F 804B LDD R4,Y+3
0760 805C LDD R5,Y+4
0761 0C42 ADD R4,R2
0762 1C53 ADC R5,R3
0763 9456 LSR R5
0764 9447 ROR R4
0765 825A STD Y+2,R5
0766 8249 STD Y+1,R4
(0343) for (xt=0;xt<=rs;xt++)
0767 2744 CLR R20
0768 2755 CLR R21
0769 C070 RJMP 0x07DA
(0344) {
(0345) xx = xt*xt;
076A 019A MOVW R18,R20
076B 018A MOVW R16,R20
076C D0B5 RCALL empy16s
076D 0178 MOVW R14,R16
076E C005 RJMP 0x0774
(0346) while ((yt*yt)>(rr-xx))
(0347) {
(0348) yt--;
076F 818B LDD R24,Y+3
0770 819C LDD R25,Y+4
0771 9701 SBIW R24,1
0772 839C STD Y+4,R25
0773 838B STD Y+3,R24
0774 011B MOVW R2,R22
0775 182E SUB R2,R14
0776 083F SBC R3,R15
0777 812B LDD R18,Y+3
0778 813C LDD R19,Y+4
0779 0189 MOVW R16,R18
077A D0A7 RCALL empy16s
077B 1620 CP R2,R16
077C 0631 CPC R3,R17
077D F388 BCS 0x076F
(0349) }
(0350) row = Ox+xt; // 第一象限
077E 84AF LDD R10,Y+15
077F 24BB CLR R11
0780 0EA4 ADD R10,R20
0781 1EB5 ADC R11,R21
(0351) col = Oy-yt;
0782 88C9 LDD R12,Y+17
0783 24DD CLR R13
0784 800B LDD R0,Y+3
0785 801C LDD R1,Y+4
0786 18C0 SUB R12,R0
0787 08D1 SBC R13,R1
(0352) PRINT_point(row,col,s);
0788 880D LDD R0,Y+21
0789 8208 STD Y+0,R0
078A 2D2C MOV R18,R12
078B 2D0A MOV R16,R10
078C DF09 RCALL _PRINT_point
(0353) row = Ox-xt; // 第二象限
078D 84AF LDD R10,Y+15
078E 24BB CLR R11
078F 1AA4 SUB R10,R20
0790 0AB5 SBC R11,R21
(0354) PRINT_point(row,col,s);
0791 880D LDD R0,Y+21
0792 8208 STD Y+0,R0
0793 2D2C MOV R18,R12
0794 2D0A MOV R16,R10
0795 DF00 RCALL _PRINT_point
(0355) col = Oy+yt; // 第三象限
0796 88C9 LDD R12,Y+17
0797 24DD CLR R13
0798 800B LDD R0,Y+3
0799 801C LDD R1,Y+4
079A 0CC0 ADD R12,R0
079B 1CD1 ADC R13,R1
(0356) PRINT_point(row,col,s);
079C 880D LDD R0,Y+21
079D 8208 STD Y+0,R0
079E 2D2C MOV R18,R12
079F 2D0A MOV R16,R10
07A0 DEF5 RCALL _PRINT_point
(0357) row = Ox+xt; // 第四象限
07A1 84AF LDD R10,Y+15
07A2 24BB CLR R11
07A3 0EA4 ADD R10,R20
07A4 1EB5 ADC R11,R21
(0358) PRINT_point(row,col,s);
07A5 880D LDD R0,Y+21
07A6 8208 STD Y+0,R0
07A7 2D2C MOV R18,R12
07A8 2D0A MOV R16,R10
07A9 DEEC RCALL _PRINT_point
(0359) /***************45度镜象画另一半***************/
(0360) row = Ox+yt; // 第一象限
07AA 84AF LDD R10,Y+15
07AB 24BB CLR R11
07AC 800B LDD R0,Y+3
07AD 801C LDD R1,Y+4
07AE 0CA0 ADD R10,R0
07AF 1CB1 ADC R11,R1
(0361) col = Oy-xt;
07B0 88C9 LDD R12,Y+17
07B1 24DD CLR R13
07B2 1AC4 SUB R12,R20
07B3 0AD5 SBC R13,R21
(0362) PRINT_point(row,col,s);
07B4 880D LDD R0,Y+21
07B5 8208 STD Y+0,R0
07B6 2D2C MOV R18,R12
07B7 2D0A MOV R16,R10
07B8 DEDD RCALL _PRINT_point
(0363) row = Ox-yt; // 第二象限
07B9 84AF LDD R10,Y+15
07BA 24BB CLR R11
07BB 800B LDD R0,Y+3
07BC 801C LDD R1,Y+4
07BD 18A0 SUB R10,R0
07BE 08B1 SBC R11,R1
(0364) PRINT_point(row,col,s);
07BF 880D LDD R0,Y+21
07C0 8208 STD Y+0,R0
07C1 2D2C MOV R18,R12
07C2 2D0A MOV R16,R10
07C3 DED2 RCALL _PRINT_point
(0365) col = Oy+xt; // 第三象限
07C4 88C9 LDD R12,Y+17
07C5 24DD CLR R13
07C6 0EC4 ADD R12,R20
07C7 1ED5 ADC R13,R21
(0366) PRINT_point(row,col,s);
07C8 880D LDD R0,Y+21
07C9 8208 STD Y+0,R0
07CA 2D2C MOV R18,R12
07CB 2D0A MOV R16,R10
07CC DEC9 RCALL _PRINT_point
(0367) row = Ox+yt; // 第四象限
07CD 84AF LDD R10,Y+15
07CE 24BB CLR R11
07CF 800B LDD R0,Y+3
07D0 801C LDD R1,Y+4
07D1 0CA0 ADD R10,R0
07D2 1CB1 ADC R11,R1
(0368) PRINT_point(row,col,s);
FILE: <library>
07D3 880D LDD R0,Y+21
07D4 8208 STD Y+0,R0
07D5 2D2C MOV R18,R12
07D6 2D0A MOV R16,R10
07D7 DEBE RCALL _PRINT_point
07D8 5F4F SUBI R20,0xFF
07D9 4F5F SBCI R21,0xFF
07DA 8029 LDD R2,Y+1
07DB 803A LDD R3,Y+2
07DC 1624 CP R2,R20
07DD 0635 CPC R3,R21
07DE F008 BCS 0x07E0
07DF CF8A RJMP 0x076A
07E0 9625 ADIW R28,5
07E1 D054 RCALL pop_gset5
07E2 9624 ADIW R28,4
07E3 9508 RET
push_arg4:
07E4 933A ST R19,-Y
07E5 932A ST R18,-Y
push_arg2:
07E6 931A ST R17,-Y
07E7 930A ST R16,-Y
07E8 9508 RET
mod16s:
07E9 9468 BSET 6
07EA 92DA ST R13,-Y
07EB 2ED1 MOV R13,R17
07EC C004 RJMP 0x07F1
div16s:
07ED 94E8 BCLR 6
07EE 92DA ST R13,-Y
07EF 2ED1 MOV R13,R17
07F0 26D3 EOR R13,R19
07F1 FF17 SBRS R17,7
07F2 C004 RJMP 0x07F7
07F3 9510 COM R17
07F4 9500 COM R16
07F5 5F0F SUBI R16,0xFF
07F6 4F1F SBCI R17,0xFF
07F7 FF37 SBRS R19,7
07F8 C004 RJMP 0x07FD
07F9 9530 COM R19
07FA 9520 COM R18
07FB 5F2F SUBI R18,0xFF
07FC 4F3F SBCI R19,0xFF
07FD D00B RCALL xdiv16u
07FE FED7 SBRS R13,7
07FF C004 RJMP 0x0804
0800 9510 COM R17
0801 9500 COM R16
0802 5F0F SUBI R16,0xFF
0803 4F1F SBCI R17,0xFF
0804 90D9 LD R13,Y+
0805 9508 RET
mod16u:
0806 9468 BSET 6
0807 C001 RJMP xdiv16u
div16u:
0808 94E8 BCLR 6
xdiv16u:
0809 92EA ST R14,-Y
080A 92FA ST R15,-Y
080B 938A ST R24,-Y
080C 24EE CLR R14
080D 24FF CLR R15
080E E180 LDI R24,0x10
080F 0F00 LSL R16
0810 1F11 ROL R17
0811 1CEE ROL R14
0812 1CFF ROL R15
0813 16E2 CP R14,R18
0814 06F3 CPC R15,R19
0815 F018 BCS 0x0819
0816 1AE2 SUB R14,R18
0817 0AF3 SBC R15,R19
0818 9503 INC R16
0819 958A DEC R24
081A F7A1 BNE 0x080F
081B F416 BRTC 0x081E
081C 2D0E MOV R16,R14
081D 2D1F MOV R17,R15
081E 9189 LD R24,Y+
081F 90F9 LD R15,Y+
0820 90E9 LD R14,Y+
0821 9508 RET
empy16s:
0822 920A ST R0,-Y
0823 921A ST R1,-Y
0824 938A ST R24,-Y
0825 939A ST R25,-Y
0826 9F02 MUL R16,R18
0827 01C0 MOVW R24,R0
0828 9F12 MUL R17,R18
0829 0D90 ADD R25,R0
082A 9F03 MUL R16,R19
082B 0D90 ADD R25,R0
082C 018C MOVW R16,R24
082D 9199 LD R25,Y+
082E 9189 LD R24,Y+
082F 9019 LD R1,Y+
0830 9009 LD R0,Y+
0831 9508 RET
pop_gset2:
0832 E0E2 LDI R30,2
0833 C010 RJMP pop
pop_gset3:
0834 E0E4 LDI R30,4
0835 C00E RJMP pop
pop_gset5:
0836 27EE CLR R30
0837 C00C RJMP pop
push_gset5:
0838 92FA ST R15,-Y
0839 92EA ST R14,-Y
push_gset4:
083A 92DA ST R13,-Y
083B 92CA ST R12,-Y
push_gset3:
083C 92BA ST R11,-Y
083D 92AA ST R10,-Y
push_gset2:
083E 937A ST R23,-Y
083F 936A ST R22,-Y
push_gset1:
0840 935A ST R21,-Y
0841 934A ST R20,-Y
0842 9508 RET
pop_gset1:
0843 E0E1 LDI R30,1
pop:
0844 9149 LD R20,Y+
0845 9159 LD R21,Y+
0846 FDE0 SBRC R30,0
0847 9508 RET
0848 9169 LD R22,Y+
0849 9179 LD R23,Y+
084A FDE1 SBRC R30,1
084B 9508 RET
084C 90A9 LD R10,Y+
084D 90B9 LD R11,Y+
084E FDE2 SBRC R30,2
084F 9508 RET
0850 90C9 LD R12,Y+
0851 90D9 LD R13,Y+
0852 FDE3 SBRC R30,3
0853 9508 RET
0854 90E9 LD R14,Y+
0855 90F9 LD R15,Y+
0856 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -