📄 gui_basic.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -ogui_basic.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips GUI\GUI_BASIC.C]
ARM
AREA ||.text.7||, CODE, READONLY, ALIGN=2
GUI_Rectangle PROC
;;;24 void GUI_Rectangle(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
;;;25 { GUI_HLine(x0, y0, x1, color);
000000 e92d41f0 PUSH {r4-r8,lr}
000004 e1a04000 MOV r4,r0
000008 e1a05001 MOV r5,r1
00000c e1a06002 MOV r6,r2
000010 e1a07003 MOV r7,r3
000014 e59d8018 LDR r8,[sp,#0x18]
000018 e20620ff AND r2,r6,#0xff
00001c e20510ff AND r1,r5,#0xff
000020 e20400ff AND r0,r4,#0xff
000024 e1a03008 MOV r3,r8
000028 ebfffffe BL GUI_HLine
;;;26 GUI_HLine(x0, y1, x1, color);
00002c e20620ff AND r2,r6,#0xff
000030 e20710ff AND r1,r7,#0xff
000034 e20400ff AND r0,r4,#0xff
000038 e1a03008 MOV r3,r8
00003c ebfffffe BL GUI_HLine
;;;27 GUI_RLine(x0, y0, y1, color);
000040 e20720ff AND r2,r7,#0xff
000044 e20510ff AND r1,r5,#0xff
000048 e20400ff AND r0,r4,#0xff
00004c e1a03008 MOV r3,r8
000050 ebfffffe BL GUI_RLine
;;;28 GUI_RLine(x1, y0, y1, color);
000054 e20720ff AND r2,r7,#0xff
000058 e20510ff AND r1,r5,#0xff
00005c e20600ff AND r0,r6,#0xff
000060 e1a03008 MOV r3,r8
000064 ebfffffe BL GUI_RLine
;;;29 }
000068 e8bd41f0 POP {r4-r8,lr}
00006c e12fff1e BX lr
ENDP
GUI_RectangleFill PROC
;;;43 void GUI_RectangleFill(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
;;;44 { uint32 i;
000070 e92d47f0 PUSH {r4-r10,lr}
000074 e1a04000 MOV r4,r0
000078 e1a06001 MOV r6,r1
00007c e1a07002 MOV r7,r2
000080 e1a08003 MOV r8,r3
000084 e59d9020 LDR r9,[sp,#0x20]
;;;45
;;;46 /* 先找出矩形左上角与右下角的两个点,保存在(x0,y0),(x1,y1) */
;;;47 if(x0>x1) // 若x0>x1,则x0与x1交换
000088 e1540007 CMP r4,r7
00008c 9a000002 BLS |L1.156|
;;;48 { i = x0;
000090 e1a05004 MOV r5,r4
;;;49 x0 = x1;
000094 e1a04007 MOV r4,r7
;;;50 x1 = i;
000098 e1a07005 MOV r7,r5
;;;51 }
;;;52 if(y0>y1) // 若y0>y1,则y0与y1交换
|L1.156|
00009c e1560008 CMP r6,r8
0000a0 9a000002 BLS |L1.176|
;;;53 { i = y0;
0000a4 e1a05006 MOV r5,r6
;;;54 y0 = y1;
0000a8 e1a06008 MOV r6,r8
;;;55 y1 = i;
0000ac e1a08005 MOV r8,r5
;;;56 }
;;;57
;;;58 /* 判断是否只是直线 */
;;;59 if(y0==y1)
|L1.176|
0000b0 e1560008 CMP r6,r8
0000b4 1a000006 BNE |L1.212|
;;;60 { GUI_HLine(x0, y0, x1, color);
0000b8 e20720ff AND r2,r7,#0xff
0000bc e20610ff AND r1,r6,#0xff
0000c0 e20400ff AND r0,r4,#0xff
0000c4 e1a03009 MOV r3,r9
0000c8 ebfffffe BL GUI_HLine
;;;61 return;
;;;62 }
;;;63 if(x0==x1)
;;;64 { GUI_RLine(x0, y0, y1, color);
;;;65 return;
;;;66 }
;;;67
;;;68 while(y0<=y1)
;;;69 { GUI_HLine(x0, y0, x1, color); // 当前画水平线
;;;70 y0++; // 下一行
;;;71 }
;;;72 }
|L1.204|
0000cc e8bd47f0 POP {r4-r10,lr}
0000d0 e12fff1e BX lr
|L1.212|
0000d4 e1540007 CMP r4,r7 ;63
0000d8 1a000005 BNE |L1.244| ;63
0000dc e20820ff AND r2,r8,#0xff ;64
0000e0 e20610ff AND r1,r6,#0xff ;64
0000e4 e20400ff AND r0,r4,#0xff ;64
0000e8 e1a03009 MOV r3,r9 ;64
0000ec ebfffffe BL GUI_RLine ;64
0000f0 eafffff5 B |L1.204| ;65
|L1.244|
0000f4 ea000005 B |L1.272| ;68
|L1.248|
0000f8 e20720ff AND r2,r7,#0xff ;69
0000fc e20610ff AND r1,r6,#0xff ;69
000100 e20400ff AND r0,r4,#0xff ;69
000104 e1a03009 MOV r3,r9 ;69
000108 ebfffffe BL GUI_HLine ;69
00010c e2866001 ADD r6,r6,#1 ;70
|L1.272|
000110 e1560008 CMP r6,r8 ;68
000114 9afffff7 BLS |L1.248| ;68
000118 eaffffeb B |L1.204|
ENDP
GUI_Square PROC
;;;85 void GUI_Square(uint32 x0, uint32 y0, uint32 with, TCOLOR color)
;;;86 { if(with==0) return;
00011c e92d40f8 PUSH {r3-r7,lr}
000120 e1a04000 MOV r4,r0
000124 e1a05001 MOV r5,r1
000128 e1a06002 MOV r6,r2
00012c e1a07003 MOV r7,r3
000130 e3560000 CMP r6,#0
000134 1a000001 BNE |L1.320|
;;;87 if( (x0+with) > GUI_LCM_XMAX ) return;
;;;88 if( (y0+with) > GUI_LCM_YMAX ) return;
;;;89 GUI_Rectangle(x0, y0, x0+with, y0+with, color);
;;;90 }
|L1.312|
000138 e8bd40f8 POP {r3-r7,lr}
00013c e12fff1e BX lr
|L1.320|
000140 e0840006 ADD r0,r4,r6 ;87
000144 e3500054 CMP r0,#0x54 ;87
000148 9a000000 BLS |L1.336| ;87
00014c eafffff9 B |L1.312| ;87
|L1.336|
000150 e0850006 ADD r0,r5,r6 ;88
000154 e3500030 CMP r0,#0x30 ;88
000158 9a000000 BLS |L1.352| ;88
00015c eafffff5 B |L1.312| ;88
|L1.352|
000160 e0853006 ADD r3,r5,r6 ;89
000164 e0842006 ADD r2,r4,r6 ;89
000168 e1a01005 MOV r1,r5 ;89
00016c e1a00004 MOV r0,r4 ;89
000170 e58d7000 STR r7,[sp,#0] ;89
000174 ebfffffe BL GUI_Rectangle ;89
000178 eaffffee B |L1.312|
ENDP
GUI_Line PROC
;;;105 void GUI_Line(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
;;;106 { int32 dx; // 直线x轴差值变量
00017c e92d4ffe PUSH {r1-r11,lr}
000180 e1a04000 MOV r4,r0
000184 e1a05001 MOV r5,r1
000188 e1a06002 MOV r6,r2
00018c e1a07003 MOV r7,r3
;;;107 int32 dy; // 直线y轴差值变量
;;;108 int8 dx_sym; // x轴增长方向,为-1时减值方向,为1时增值方向
;;;109 int8 dy_sym; // y轴增长方向,为-1时减值方向,为1时增值方向
;;;110 int32 dx_x2; // dx*2值变量,用于加快运算速度
;;;111 int32 dy_x2; // dy*2值变量,用于加快运算速度
;;;112 int32 di; // 决策变量
;;;113
;;;114
;;;115 dx = x1-x0; // 求取两点之间的差值
000190 e0468004 SUB r8,r6,r4
;;;116 dy = y1-y0;
000194 e0479005 SUB r9,r7,r5
;;;117
;;;118 /* 判断增长方向,或是否为水平线、垂直线、点 */
;;;119 if(dx>0) // 判断x轴方向
000198 e3580000 CMP r8,#0
00019c da000001 BLE |L1.424|
;;;120 { dx_sym = 1; // dx>0,设置dx_sym=1
0001a0 e3a0a001 MOV r10,#1
0001a4 ea00000a B |L1.468|
;;;121 }
;;;122 else
;;;123 { if(dx<0)
|L1.424|
0001a8 e3580000 CMP r8,#0
0001ac aa000001 BGE |L1.440|
;;;124 { dx_sym = -1; // dx<0,设置dx_sym=-1
0001b0 e3e0a000 MVN r10,#0
0001b4 ea000006 B |L1.468|
;;;125 }
;;;126 else
;;;127 { // dx==0,画垂直线,或一点
;;;128 GUI_RLine(x0, y0, y1, color);
|L1.440|
0001b8 e20720ff AND r2,r7,#0xff
0001bc e20510ff AND r1,r5,#0xff
0001c0 e20400ff AND r0,r4,#0xff
0001c4 e59d3030 LDR r3,[sp,#0x30]
0001c8 ebfffffe BL GUI_RLine
;;;129 return;
;;;130 }
;;;131 }
;;;132
;;;133 if(dy>0) // 判断y轴方向
;;;134 { dy_sym = 1; // dy>0,设置dy_sym=1
;;;135 }
;;;136 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -