📄 gui_basic.lis
字号:
03EE .dbline 239
03EE 788E std y+24,R7
03F0 6F8A std y+23,R6
03F2 .dbline 240
03F2 ; GUI_RLine(x0, y0, y1, color);
03F2 09A0 ldd R0,y+33
03F4 0A82 std y+2,R0
03F6 0D8C ldd R0,y+29
03F8 1E8C ldd R1,y+30
03FA 1982 std y+1,R1
03FC 0882 std y+0,R0
03FE 298D ldd R18,y+25
0400 3A8D ldd R19,y+26
0402 8301 movw R16,R6
0404 0F93 push R16
0406 1F93 push R17
0408 0E940000 xcall _GUI_RLine
040C 7F90 pop R7
040E 6F90 pop R6
0410 .dbline 241
0410 ; if(wx>=wy) break;
0410 2B80 ldd R2,y+3
0412 3C80 ldd R3,y+4
0414 6214 cp R6,R2
0416 7304 cpc R7,R3
0418 0CF0 brlt L62
041A .dbline 241
041A 4DC1 xjmp L48
041C L62:
041C .dbline 242
041C C301 movw R24,R6
041E 0196 adiw R24,1
0420 3C01 movw R6,R24
0422 .dbline 243
0422 L60:
0422 .dbline 238
0422 E5CF xjmp L59
0424 X2:
0424 .dbline 245
0424 ; wx++;
0424 ; }
0424 ;
0424 ; return;
0424 48C1 xjmp L48
0426 L56:
0426 .dbline 247
0426 ; }
0426 ; }
0426 L54:
0426 .dbline 249
0426 ;
0426 ; if(dy>0) // 判断y轴方向
0426 2224 clr R2
0428 3324 clr R3
042A 4B84 ldd R4,y+11
042C 5C84 ldd R5,y+12
042E 2414 cp R2,R4
0430 3504 cpc R3,R5
0432 1CF4 brge L64
0434 .dbline 250
0434 ; { dy_sym = 1; // dy>0,设置dy_sym=1
0434 .dbline 250
0434 EE24 clr R14
0436 E394 inc R14
0438 .dbline 251
0438 ; }
0438 3AC0 xjmp L65
043A L64:
043A .dbline 253
043A ; else
043A ; { if(dy<0)
043A .dbline 253
043A 8B85 ldd R24,y+11
043C 9C85 ldd R25,y+12
043E 8030 cpi R24,0
0440 E0E0 ldi R30,0
0442 9E07 cpc R25,R30
0444 1CF4 brge L66
0446 .dbline 254
0446 ; { dy_sym = -1; // dy<0,设置dy_sym=-1
0446 .dbline 254
0446 8FEF ldi R24,255
0448 E82E mov R14,R24
044A .dbline 255
044A ; }
044A 31C0 xjmp L67
044C L66:
044C .dbline 257
044C ; else
044C ; { /* dy==0,画水平线,或一点 */
044C .dbline 258
044C ; wx = y0-wx;
044C 298C ldd R2,y+25
044E 3A8C ldd R3,y+26
0450 2618 sub R2,R6
0452 3708 sbc R3,R7
0454 3101 movw R6,R2
0456 .dbline 259
0456 ; if(wx<0) wx = 0;
0456 C101 movw R24,R2
0458 8030 cpi R24,0
045A E0E0 ldi R30,0
045C 9E07 cpc R25,R30
045E 14F4 brge L68
0460 .dbline 259
0460 6624 clr R6
0462 7724 clr R7
0464 L68:
0464 .dbline 260
0464 ; wy = y0+wy;
0464 2B80 ldd R2,y+3
0466 3C80 ldd R3,y+4
0468 498C ldd R4,y+25
046A 5A8C ldd R5,y+26
046C 420C add R4,R2
046E 531C adc R5,R3
0470 5C82 std y+4,R5
0472 4B82 std y+3,R4
0474 1AC0 xjmp L71
0476 L70:
0476 .dbline 263
0476 ;
0476 ; while(1)
0476 ; { y0 = wx;
0476 .dbline 263
0476 7A8E std y+26,R7
0478 698E std y+25,R6
047A .dbline 264
047A ; GUI_HLine(x0, y0, x1, color);
047A 09A0 ldd R0,y+33
047C 0A82 std y+2,R0
047E 0B8C ldd R0,y+27
0480 1C8C ldd R1,y+28
0482 1982 std y+1,R1
0484 0882 std y+0,R0
0486 9301 movw R18,R6
0488 0F89 ldd R16,y+23
048A 188D ldd R17,y+24
048C 2F93 push R18
048E 3F93 push R19
0490 0E940000 xcall _GUI_HLine
0494 7F90 pop R7
0496 6F90 pop R6
0498 .dbline 265
0498 ; if(wx>=wy) break;
0498 2B80 ldd R2,y+3
049A 3C80 ldd R3,y+4
049C 6214 cp R6,R2
049E 7304 cpc R7,R3
04A0 0CF0 brlt L73
04A2 .dbline 265
04A2 09C1 xjmp L48
04A4 L73:
04A4 .dbline 266
04A4 C301 movw R24,R6
04A6 0196 adiw R24,1
04A8 3C01 movw R6,R24
04AA .dbline 267
04AA L71:
04AA .dbline 262
04AA E5CF xjmp L70
04AC X3:
04AC .dbline 268
04AC ; wx++;
04AC ; }
04AC ; return;
04AC 04C1 xjmp L48
04AE L67:
04AE .dbline 270
04AE ; }
04AE ; }
04AE L65:
04AE .dbline 273
04AE ;
04AE ; /* 将dx、dy取绝对值 */
04AE ; dx = dx_sym * dx;
04AE 2985 ldd R18,y+9
04B0 3A85 ldd R19,y+10
04B2 062F mov R16,R22
04B4 1127 clr R17
04B6 07FD sbrc R16,7
04B8 1095 com R17
04BA 0E940000 xcall empy16s
04BE 1A87 std y+10,R17
04C0 0987 std y+9,R16
04C2 .dbline 274
04C2 ; dy = dy_sym * dy;
04C2 2B85 ldd R18,y+11
04C4 3C85 ldd R19,y+12
04C6 0E2D mov R16,R14
04C8 1127 clr R17
04CA 07FD sbrc R16,7
04CC 1095 com R17
04CE 0E940000 xcall empy16s
04D2 1C87 std y+12,R17
04D4 0B87 std y+11,R16
04D6 .dbline 277
04D6 ;
04D6 ; /* 计算2倍的dx及dy值 */
04D6 ; dx_x2 = dx*2;
04D6 2985 ldd R18,y+9
04D8 3A85 ldd R19,y+10
04DA 02E0 ldi R16,2
04DC 10E0 ldi R17,0
04DE 0E940000 xcall empy16s
04E2 1E83 std y+6,R17
04E4 0D83 std y+5,R16
04E6 .dbline 278
04E6 ; dy_x2 = dy*2;
04E6 2B85 ldd R18,y+11
04E8 3C85 ldd R19,y+12
04EA 02E0 ldi R16,2
04EC 10E0 ldi R17,0
04EE 0E940000 xcall empy16s
04F2 1887 std y+8,R17
04F4 0F83 std y+7,R16
04F6 .dbline 281
04F6 ;
04F6 ; /* 使用Bresenham法进行画直线 */
04F6 ; if(dx>=dy) // 对于dx>=dy,则使用x轴为基准
04F6 2B84 ldd R2,y+11
04F8 3C84 ldd R3,y+12
04FA 4984 ldd R4,y+9
04FC 5A84 ldd R5,y+10
04FE 4214 cp R4,R2
0500 5304 cpc R5,R3
0502 0CF4 brge X4
0504 6DC0 xjmp L75
0506 X4:
0506 .dbline 282
0506 ; { di = dy_x2 - dx;
0506 .dbline 282
0506 6801 movw R12,R16
0508 C418 sub R12,R4
050A D508 sbc R13,R5
050C 43C0 xjmp L78
050E L77:
050E .dbline 284
050E ; while(x0!=x1)
050E ; { /* x轴向增长,则宽度在y方向,即画垂直线 */
050E .dbline 285
050E ; draw_a = y0-wx;
050E 498D ldd R20,y+25
0510 5A8D ldd R21,y+26
0512 4619 sub R20,R6
0514 5709 sbc R21,R7
0516 .dbline 286
0516 ; if(draw_a<0) draw_a = 0;
0516 4030 cpi R20,0
0518 E0E0 ldi R30,0
051A 5E07 cpc R21,R30
051C 14F4 brge L80
051E .dbline 286
051E 4427 clr R20
0520 5527 clr R21
0522 L80:
0522 .dbline 287
0522 ; draw_b = y0+wy;
0522 2B80 ldd R2,y+3
0524 3C80 ldd R3,y+4
0526 A98C ldd R10,y+25
0528 BA8C ldd R11,y+26
052A A20C add R10,R2
052C B31C adc R11,R3
052E .dbline 288
052E ; GUI_RLine(x0, draw_a, draw_b, color);
052E 09A0 ldd R0,y+33
0530 0A82 std y+2,R0
0532 B982 std y+1,R11
0534 A882 std y+0,R10
0536 9A01 movw R18,R20
0538 0F89 ldd R16,y+23
053A 188D ldd R17,y+24
053C 6F92 push R6
053E 7F92 push R7
0540 0E940000 xcall _GUI_RLine
0544 7F90 pop R7
0546 6F90 pop R6
0548 .dbline 290
0548 ;
0548 ; x0 += dx_sym;
0548 262E mov R2,R22
054A 3324 clr R3
054C 27FC sbrc R2,7
054E 3094 com R3
0550 0F88 ldd R0,y+23
0552 188C ldd R1,y+24
0554 020C add R0,R2
0556 131C adc R1,R3
0558 188E std y+24,R1
055A 0F8A std y+23,R0
055C .dbline 291
055C ; if(di<0)
055C C601 movw R24,R12
055E 8030 cpi R24,0
0560 E0E0 ldi R30,0
0562 9E07 cpc R25,R30
0564 2CF4 brge L82
0566 .dbline 292
0566 ; { di += dy_x2; // 计算出下一步的决策值
0566 .dbline 292
0566 2F80 ldd R2,y+7
0568 3884 ldd R3,y+8
056A C20C add R12,R2
056C D31C adc R13,R3
056E .dbline 293
056E ; }
056E 12C0 xjmp L83
0570 L82:
0570 .dbline 295
0570 ; else
0570 ; { di += dy_x2 - dx_x2;
0570 .dbline 295
0570 2D80 ldd R2,y+5
0572 3E80 ldd R3,y+6
0574 4F80 ldd R4,y+7
0576 5884 ldd R5,y+8
0578 4218 sub R4,R2
057A 5308 sbc R5,R3
057C C40C add R12,R4
057E D51C adc R13,R5
0580 .dbline 296
0580 ; y0 += dy_sym;
0580 2E2C mov R2,R14
0582 3324 clr R3
0584 27FC sbrc R2,7
0586 3094 com R3
0588 098C ldd R0,y+25
058A 1A8C ldd R1,y+26
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -