📄 testh.lst
字号:
0DC4 24AA CLR R10
0DC5 2744 CLR R20
(0133) char i,j;
(0134) buffer1 |=(color<<5);
0DC6 2C2C MOV R2,R12
0DC7 0C22 LSL R2
0DC8 0C22 LSL R2
0DC9 0C22 LSL R2
0DCA 0C22 LSL R2
0DCB 0C22 LSL R2
0DCC 2962 OR R22,R2
(0135) buffer1 |=(color<<2);
0DCD 2C2C MOV R2,R12
0DCE 0C22 LSL R2
0DCF 0C22 LSL R2
0DD0 2962 OR R22,R2
(0136) buffer1 |=(color>>1);
0DD1 2C2C MOV R2,R12
0DD2 9426 LSR R2
0DD3 2962 OR R22,R2
(0137) buffer2 |=(color<<7);
0DD4 2C2C MOV R2,R12
0DD5 0C22 LSL R2
0DD6 0C22 LSL R2
0DD7 0C22 LSL R2
0DD8 0C22 LSL R2
0DD9 0C22 LSL R2
0DDA 0C22 LSL R2
0DDB 0C22 LSL R2
0DDC 28A2 OR R10,R2
(0138) buffer2 |=(color<<4);
0DDD 2D8C MOV R24,R12
0DDE 708F ANDI R24,0xF
0DDF 9582 SWAP R24
0DE0 2AA8 OR R10,R24
(0139) buffer2 |=(color<<1);
0DE1 2C2C MOV R2,R12
0DE2 0C22 LSL R2
0DE3 28A2 OR R10,R2
(0140) buffer2 |=(color>>2);
0DE4 2C2C MOV R2,R12
0DE5 9426 LSR R2
0DE6 9426 LSR R2
0DE7 28A2 OR R10,R2
(0141) buffer3 |=(color<<6);
0DE8 2C2C MOV R2,R12
0DE9 0C22 LSL R2
0DEA 0C22 LSL R2
0DEB 0C22 LSL R2
0DEC 0C22 LSL R2
0DED 0C22 LSL R2
0DEE 0C22 LSL R2
0DEF 2942 OR R20,R2
(0142) buffer3 |=(color<<3);
0DF0 2C2C MOV R2,R12
0DF1 0C22 LSL R2
0DF2 0C22 LSL R2
0DF3 0C22 LSL R2
0DF4 2942 OR R20,R2
(0143) buffer3 |= color;//将三个buffer的值都修改为相应颜色的值
0DF5 294C OR R20,R12
(0144) for(i=0;i<40;i++)
0DF6 24CC CLR R12
0DF7 C00D RJMP 0x0E05
(0145) {
(0146) for(j=0;j<240;j++)
0DF8 24EE CLR R14
0DF9 C007 RJMP 0x0E01
(0147) {
(0148) write(i,j,buffer1,buffer2,buffer3);
0DFA 834C STD Y+4,R20
0DFB 82AA STD Y+2,R10
0DFC 8368 STD Y+0,R22
0DFD 2D2E MOV R18,R14
0DFE 2D0C MOV R16,R12
0DFF DEDB RCALL _write
0E00 94E3 INC R14
0E01 2D8E MOV R24,R14
0E02 3F80 CPI R24,0xF0
0E03 F3B0 BCS 0x0DFA
0E04 94C3 INC R12
0E05 2D8C MOV R24,R12
0E06 3288 CPI R24,0x28
0E07 F380 BCS 0x0DF8
0E08 9625 ADIW R28,5
0E09 940E1CC1 CALL pop_gset5
0E0B 9508 RET
_juxing:
buffer3 --> R20
buffer1 --> R22
buffer2 --> R10
i --> R12
j --> R14
color --> R12
y2 --> Y+19
x2 --> Y+17
y1 --> Y+15
x1 --> R14
0E0C 933A ST R19,-Y
0E0D 932A ST R18,-Y
0E0E 940E1CE7 CALL push_gset5
0E10 2EE0 MOV R14,R16
0E11 9725 SBIW R28,5
0E12 88CD LDD R12,Y+21
(0149) }
(0150) }
(0151) }
(0152)
(0153) /***********************用某种颜色画矩形***************************/
(0154) void juxing(char x1,char y1,char x2,char y2,char color)
(0155) {
(0156) char buffer1=0,buffer2=0,buffer3=0;
0E13 2766 CLR R22
0E14 24AA CLR R10
0E15 2744 CLR R20
(0157) char i,j;
(0158) buffer1 |=(color<<5);
0E16 2C2C MOV R2,R12
0E17 0C22 LSL R2
0E18 0C22 LSL R2
0E19 0C22 LSL R2
0E1A 0C22 LSL R2
0E1B 0C22 LSL R2
0E1C 2962 OR R22,R2
(0159) buffer1 |=(color<<2);
0E1D 2C2C MOV R2,R12
0E1E 0C22 LSL R2
0E1F 0C22 LSL R2
0E20 2962 OR R22,R2
(0160) buffer1 |=(color>>1);
0E21 2C2C MOV R2,R12
0E22 9426 LSR R2
0E23 2962 OR R22,R2
(0161) buffer2 |=(color<<7);
0E24 2C2C MOV R2,R12
0E25 0C22 LSL R2
0E26 0C22 LSL R2
0E27 0C22 LSL R2
0E28 0C22 LSL R2
0E29 0C22 LSL R2
0E2A 0C22 LSL R2
0E2B 0C22 LSL R2
0E2C 28A2 OR R10,R2
(0162) buffer2 |=(color<<4);
0E2D 2D8C MOV R24,R12
0E2E 708F ANDI R24,0xF
0E2F 9582 SWAP R24
0E30 2AA8 OR R10,R24
(0163) buffer2 |=(color<<1);
0E31 2C2C MOV R2,R12
0E32 0C22 LSL R2
0E33 28A2 OR R10,R2
(0164) buffer2 |=(color>>2);
0E34 2C2C MOV R2,R12
0E35 9426 LSR R2
0E36 9426 LSR R2
0E37 28A2 OR R10,R2
(0165) buffer3 |=(color<<6);
0E38 2C2C MOV R2,R12
0E39 0C22 LSL R2
0E3A 0C22 LSL R2
0E3B 0C22 LSL R2
0E3C 0C22 LSL R2
0E3D 0C22 LSL R2
0E3E 0C22 LSL R2
0E3F 2942 OR R20,R2
(0166) buffer3 |=(color<<3);
0E40 2C2C MOV R2,R12
0E41 0C22 LSL R2
0E42 0C22 LSL R2
0E43 0C22 LSL R2
0E44 2942 OR R20,R2
(0167) buffer3 |= color;
0E45 294C OR R20,R12
(0168) for(i=x1;i<=x2;i++)
0E46 2CCE MOV R12,R14
0E47 C00D RJMP 0x0E55
(0169) {
(0170) for(j=y1;j<=y2;j++)
0E48 84EF LDD R14,Y+15
0E49 C007 RJMP 0x0E51
(0171) {
(0172) write(i,j,buffer1,buffer2,buffer3);
0E4A 834C STD Y+4,R20
0E4B 82AA STD Y+2,R10
0E4C 8368 STD Y+0,R22
0E4D 2D2E MOV R18,R14
0E4E 2D0C MOV R16,R12
0E4F DE8B RCALL _write
0E50 94E3 INC R14
0E51 880B LDD R0,Y+19
0E52 140E CP R0,R14
0E53 F7B0 BCC 0x0E4A
0E54 94C3 INC R12
0E55 8809 LDD R0,Y+17
0E56 140C CP R0,R12
0E57 F780 BCC 0x0E48
0E58 9625 ADIW R28,5
0E59 940E1CC1 CALL pop_gset5
0E5B 9622 ADIW R28,2
0E5C 9508 RET
_line:
dy --> R20
dx --> R22
x --> R10
y --> R12
color --> R14
y2 --> Y+17
x2 --> Y+15
y1 --> Y+13
x1 --> Y+11
0E5D 940E1C51 CALL push_arg4
0E5F 940E1CE7 CALL push_gset5
0E61 9721 SBIW R28,1
0E62 88EB LDD R14,Y+19
(0173) }
(0174) }
(0175) }
(0176)
(0177) /**************两点间画带颜色直线*******************/
(0178) void line(char x1,char y1,char x2,char y2,char color)
(0179) {
(0180) char x,y;
(0181) unsigned int dx,dy;
(0182) if(x1>x2)
0E63 840F LDD R0,Y+15
0E64 850B LDD R16,Y+11
0E65 1600 CP R0,R16
0E66 F440 BCC 0x0E6F
(0183) {
(0184) x=x2;
0E67 2CA0 MOV R10,R0
(0185) y=y2;
0E68 88C9 LDD R12,Y+17
(0186) x2=x1;
0E69 2E00 MOV R0,R16
0E6A 860F STD Y+15,R0
(0187) y2=y1;
0E6B 840D LDD R0,Y+13
0E6C 8A09 STD Y+17,R0
(0188) x1=x;
0E6D 86AB STD Y+11,R10
(0189) y1=y;
0E6E 86CD STD Y+13,R12
(0190) }//保证(x,y)从最靠近屏幕左侧开始开始。
(0191) point(x1,y1,color);
0E6F 82E8 STD Y+0,R14
0E70 852D LDD R18,Y+13
0E71 850B LDD R16,Y+11
0E72 2711 CLR R17
0E73 DE8D RCALL _point
(0192) x=x1;
0E74 84AB LDD R10,Y+11
(0193) y=y1;
0E75 84CD LDD R12,Y+13
(0194) dx=x2-x1;
0E76 2C2A MOV R2,R10
0E77 2433 CLR R3
0E78 856F LDD R22,Y+15
0E79 2777 CLR R23
0E7A 1962 SUB R22,R2
0E7B 0973 SBC R23,R3
(0195) if(dx==0)//直线与y轴平行
0E7C F4C9 BNE 0x0E96
(0196) {
(0197) if(y1<y2)
0E7D 840D LDD R0,Y+13
0E7E 8909 LDD R16,Y+17
0E7F 1600 CP R0,R16
0E80 F488 BCC 0x0E92
(0198) {
(0199) for(;y<=y2;y++)//沿y1画点到y2成直线
0E81 C006 RJMP 0x0E88
(0200) point(x,y,color);
0E82 82E8 STD Y+0,R14
0E83 2D2C MOV R18,R12
0E84 2D0A MOV R16,R10
0E85 2711 CLR R17
0E86 DE7A RCALL _point
0E87 94C3 INC R12
0E88 8809 LDD R0,Y+17
0E89 140C CP R0,R12
0E8A F7B8 BCC 0x0E82
(0201) }
0E8B C085 RJMP 0x0F11
(0202) else
(0203) {
(0204) for(;y>=y2;y--)//沿y2画点到y1成直线
(0205) point(x,y,color);
0E8C 82E8 STD Y+0,R14
0E8D 2D2C MOV R18,R12
0E8E 2D0A MOV R16,R10
0E8F 2711 CLR R17
0E90 DE70 RCALL _point
0E91 94CA DEC R12
0E92 8809 LDD R0,Y+17
0E93 14C0 CP R12,R0
0E94 F7B8 BCC 0x0E8C
(0206) }
(0207) }
0E95 C07B RJMP 0x0F11
(0208) else if(y1==y2)//直线与X轴平行
0E96 840D LDD R0,Y+13
0E97 8909 LDD R16,Y+17
0E98 1600 CP R0,R16
0E99 F4C1 BNE 0x0EB2
(0209) {
(0210) if(x>x1)
0E9A 840B LDD R0,Y+11
0E9B 140A CP R0,R10
0E9C F488 BCC 0x0EAE
(0211) {
(0212) for(;x<=x2;x++)//沿x1画点到x2成直线
0E9D C006 RJMP 0x0EA4
(0213) point(x,y,color);
0E9E 82E8 STD Y+0,R14
0E9F 2D2C MOV R18,R12
0EA0 2D0A MOV R16,R10
0EA1 2711 CLR R17
0EA2 DE5E RCALL _point
0EA3 94A3 INC R10
0EA4 840F LDD R0,Y+15
0EA5 140A CP R0,R10
0EA6 F7B8 BCC 0x0E9E
(0214) }
0EA7 C069 RJMP 0x0F11
(0215) else
(0216) {
(0217) for(;x>=x2;x--)//沿x2画点到x1成直线
(0218) point(x,y,color);
0EA8 82E8 STD Y+0,R14
0EA9 2D2C MOV R18,R12
0EAA 2D0A MOV R16,R10
0EAB 2711 CLR R17
0EAC DE54 RCALL _point
0EAD 94AA DEC R10
0EAE 840F LDD R0,Y+15
0EAF 14A0 CP R10,R0
0EB0 F7B8 BCC 0x0EA8
(0219) }
(0220) }
0EB1 C05F RJMP 0x0F11
(0221) else if(y1<y2)//直线与x轴夹角小于90°
0EB2 840D LDD R0,Y+13
0EB3 8909 LDD R16,Y+17
0EB4 1600 CP R0,R16
0EB5 F560 BCC 0x0EE2
(0222) {
(0223) dy=y2-y1;
0EB6 2C20 MOV R2,R0
0EB7 2433 CLR R3
0EB8 2F40 MOV R20,R16
0EB9 2755 CLR R21
0EBA 1942 SUB R20,R2
0EBB 0953 SBC R21,R3
0EBC C01E RJMP 0x0EDB
(0224)
(0225) while(x<=x2&&y<=y2)
(0226) {
(0227) point(x,y,color);
0EBD 82E8 STD Y+0,R14
0EBE 2D2C MOV R18,R12
0EBF 2D0A MOV R16,R10
0EC0 2711 CLR R17
0EC1 DE3F RCALL _point
(0228) if(dx*(y-y1)<dy*(x-x1))//保证所画直线尽量和所求直线靠近
0EC2 842B LDD R2,Y+11
0EC3 2433 CLR R3
0EC4 2D2A MOV R18,R10
0EC5 2733 CLR R19
0EC6 1922 SUB R18,R2
0EC7 0933 SBC R19,R3
0EC8 018A MOVW R16,R20
0EC9 940E1CA8 CALL empy16s
0ECB 0118 MOVW R2,R16
0ECC 844D LDD R4,Y+13
0ECD 2455 CLR R5
0ECE 2D2C MOV R18,R12
0ECF 2733 CLR R19
0ED0 1924 SUB R18,R4
0ED1 0935 SBC R19,R5
0ED2 018B MOVW R16,R22
0ED3 940E1CA8 CALL empy16s
0ED5 1502 CP R16,R2
0ED6 0513 CPC R17,R3
0ED7 F410 BCC 0x0EDA
(0229) y++;
0ED8 94C3 INC R12
0ED9 C001 RJMP 0x0EDB
(0230) else x++;
0EDA 94A3 INC R10
0EDB 840F LDD R0,Y+15
0EDC 140A CP R0,R10
0EDD F018 BCS 0x0EE1
0EDE 8809 LDD R0,Y+17
0EDF 140C CP R0,R12
0EE0 F6E0 BCC 0x0EBD
(0231)
(0232) }
(0233) }
0EE1 C02F RJMP 0x0F11
(0234) else if(y1>y2)//直线于y轴夹角大于90°
0EE2 8809 LDD R0,Y+17
0EE3 850D LDD R16,Y+13
0EE4 1600 CP R0,R16
0EE5 F558 BCC 0x0F11
(0235) {
(0236) dy=y1-y2;
0EE6 2C20 MOV R2,R0
0EE7 2433 CLR R3
0EE8 2F40 MOV R20,R16
0EE9 2755 CLR R21
0EEA 1942 SUB R20,R2
0EEB 0953 SBC R21,R3
0EEC C01E RJMP 0x0F0B
(0237) while(x<=x2&&y>=y2)
(0238) {
(0239) point(x,y,color);
0EED 82E8 STD Y+0,R14
0EEE 2D2C MOV R18,R12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -