📄 main.cod
字号:
; 503 : sg_u8YYLEX[u32TokenLength++] = *sg_pu8LexPos;
0004c e5c41000 strb r1, [r4]
; 504 :
; 505 : // Time to parse!
; 506 :
; 507 : if (*sg_pu8LexPos >= '0' && *sg_pu8LexPos <= '9')
00050 e5d23000 ldrb r3, [r2]
00054 e3a07001 mov r7, #1
00058 e3a08000 mov r8, #0
0005c e3530030 cmp r3, #0x30
00060 3a00004f bcc |$L42561|
00064 e3530039 cmp r3, #0x39
00068 8a00004d bhi |$L42561|
; 508 : {
; 509 : BOOL bHexNotation = FALSE;
0006c e3a00000 mov r0, #0
; 510 :
; 511 : // It's a number! Let's see if it's hex notation
; 512 :
; 513 : if ('0' == *sg_pu8LexPos)
00070 e3530030 cmp r3, #0x30
00074 1a00000c bne |$L42563|
; 514 : {
; 515 : ++sg_pu8LexPos;
; 516 : sg_u8YYLEX[u32TokenLength++] = *sg_pu8LexPos;
00078 e5f23001 ldrb r3, [r2, #1]!
0007c e3a07002 mov r7, #2
00080 e5c43001 strb r3, [r4, #1]
; 517 :
; 518 : if ('X' == ToUpper(*sg_pu8LexPos))
00084 e5d23000 ldrb r3, [r2]
00088 e3530061 cmp r3, #0x61
0008c 3a000001 bcc |$L44152|
00090 e353007a cmp r3, #0x7A
00094 92433020 subls r3, r3, #0x20
00098 |$L44152|
; 519 : {
; 520 : // Yup! It's 0x something. Just ignore the 0x and eat everything else
; 521 :
; 522 : bHexNotation = TRUE;
; 523 :
; 524 : // Back up over the 0x
; 525 :
; 526 : u32TokenLength -= 2;
; 527 : sg_pu8LexPos++;
00098 e2822001 add r2, r2, #1
0009c e5842ac8 str r2, [r4, #0xAC8]
000a0 e3530058 cmp r3, #0x58
000a4 1a000001 bne |$L42568|
000a8 e3a00001 mov r0, #1
000ac |$L42563|
; 528 : }
; 529 : else
; 530 : {
; 531 : sg_pu8LexPos++;
; 532 : }
; 533 :
; 534 : }
; 535 : else
; 536 : {
; 537 : --u32TokenLength;
000ac e3a07000 mov r7, #0
000b0 |$L42568|
; 538 : }
; 539 :
; 540 : while (1)
; 541 : {
; 542 : if ((IsDigit(*sg_pu8LexPos) ||
; 543 : (bHexNotation && (ToUpper(*sg_pu8LexPos) >= 'A' && ToUpper(*sg_pu8LexPos) <= 'F') ) ) )
000b0 e5d23000 ldrb r3, [r2]
000b4 e3530030 cmp r3, #0x30
000b8 3a000001 bcc |$L44158|
000bc e3530039 cmp r3, #0x39
000c0 9a000011 bls |$L42571|
000c4 |$L44158|
000c4 e3500000 cmp r0, #0
000c8 0a000014 beq |$L42570|
000cc e3530061 cmp r3, #0x61
000d0 3a000002 bcc |$L44165|
000d4 e353007a cmp r3, #0x7A
000d8 92431020 subls r1, r3, #0x20
000dc 9a000000 bls |$L44164|
000e0 |$L44165|
000e0 e1a01003 mov r1, r3
000e4 |$L44164|
000e4 e3510041 cmp r1, #0x41
000e8 ba00000c blt |$L42570|
000ec e3530061 cmp r3, #0x61
000f0 3a000002 bcc |$L44171|
000f4 e353007a cmp r3, #0x7A
000f8 92431020 subls r1, r3, #0x20
000fc 9a000000 bls |$L44170|
00100 |$L44171|
00100 e1a01003 mov r1, r3
00104 |$L44170|
00104 e3510046 cmp r1, #0x46
00108 ca000004 bgt |$L42570|
0010c |$L42571|
; 544 : {
; 545 : sg_u8YYLEX[u32TokenLength++] = *sg_pu8LexPos;
; 546 : ++sg_pu8LexPos;
0010c e2822001 add r2, r2, #1
00110 e7c73004 strb r3, [r7, +r4]
00114 e5842ac8 str r2, [r4, #0xAC8]
00118 e2877001 add r7, r7, #1
; 547 : }
; 548 : else
; 549 : {
; 550 : break;
; 551 : }
; 552 : }
0011c eaffffe3 b |$L42568|
00120 |$L42570|
; 553 :
; 554 : sg_u8YYLEX[u32TokenLength] = '\0';
; 555 :
; 556 : if (bHexNotation)
00120 e3500000 cmp r0, #0
; 557 : {
; 558 : UINT8 *pu8Ptr;
; 559 :
; 560 : pu8Ptr = sg_u8YYLEX;
; 561 : sg_u32Constant = 0;
; 562 :
; 563 : while (*pu8Ptr != '\0')
00124 e1a00004 mov r0, r4
00128 e7c78004 strb r8, [r7, +r4]
0012c 0a000017 beq |$L42573|
00130 e5d43000 ldrb r3, [r4]
00134 e3a02000 mov r2, #0
00138 e5842ac4 str r2, [r4, #0xAC4]
0013c e1b01003 movs r1, r3
00140 0a000014 beq |$L42580|
00144 |$L42576|
; 564 : {
; 565 : sg_u32Constant <<= 4;
00144 e1a02202 mov r2, r2, lsl #4
; 566 :
; 567 : if (IsDigit(*pu8Ptr))
00148 e3530030 cmp r3, #0x30
0014c 3a000003 bcc |$L42578|
00150 e3530039 cmp r3, #0x39
; 568 : {
; 569 : sg_u32Constant |= (*pu8Ptr - '0');
00154 92413030 subls r3, r1, #0x30
00158 91832002 orrls r2, r3, r2
0015c 9a000006 bls |$L42579|
00160 |$L42578|
; 570 : }
; 571 : else
; 572 : {
; 573 : sg_u32Constant |= ((ToUpper(*pu8Ptr) - 'A') + 10);
00160 e3530061 cmp r3, #0x61
00164 3a000001 bcc |$L44183|
00168 e353007a cmp r3, #0x7A
0016c 92433020 subls r3, r3, #0x20
00170 |$L44183|
00170 e2433037 sub r3, r3, #0x37
00174 e1832002 orr r2, r3, r2
00178 e5842ac4 str r2, [r4, #0xAC4]
0017c |$L42579|
0017c e5f03001 ldrb r3, [r0, #1]!
00180 e1b01003 movs r1, r3
00184 1affffee bne |$L42576|
; 568 : {
; 569 : sg_u32Constant |= (*pu8Ptr - '0');
00188 e5842ac4 str r2, [r4, #0xAC4]
; 574 : }
; 575 : ++pu8Ptr;
; 576 : }
; 577 : }
; 578 : else
0018c ea000001 b |$L42580|
00190 |$L42573|
; 579 : {
; 580 : sg_u32Constant = atol(sg_u8YYLEX);
00190 eb000000 bl atol
00194 e5840ac4 str r0, [r4, #0xAC4]
00198 |$L42580|
; 581 : }
; 582 :
; 583 : eToken = LEX_CONSTANT;
00198 e3a00c01 mov r0, #1, 24
0019c e3800001 orr r0, r0, #1
; 584 : }
; 585 : else
001a0 ea000054 b |$L42592|
001a4 |$L42561|
; 586 : if (ToUpper(*sg_pu8LexPos) >= 'A' && ToUpper(*sg_pu8LexPos) <= 'Z')
001a4 e3530061 cmp r3, #0x61
001a8 3a000002 bcc |$L44190|
001ac e353007a cmp r3, #0x7A
001b0 92430020 subls r0, r3, #0x20
001b4 9a000000 bls |$L44189|
001b8 |$L44190|
001b8 e1a00003 mov r0, r3
001bc |$L44189|
001bc e3500041 cmp r0, #0x41
001c0 ba00004b blt |$L42582|
001c4 e3530061 cmp r3, #0x61
001c8 3a000001 bcc |$L44195|
001cc e353007a cmp r3, #0x7A
001d0 92433020 subls r3, r3, #0x20
001d4 |$L44195|
001d4 e353005a cmp r3, #0x5A
001d8 ca000045 bgt |$L42582|
; 587 : {
; 588 : struct SIdentifierEntry *psIdent;
; 589 :
; 590 : eToken = LEX_IDENTIFIER;
; 591 :
; 592 : ++sg_pu8LexPos;
001dc e2822001 add r2, r2, #1
; 597 : }
001e0 e2843001 add r3, r4, #1
001e4 e5842ac8 str r2, [r4, #0xAC8]
001e8 e043e002 sub lr, r3, r2
001ec e3a00f42 mov r0, #0x42, 30
001f0 |$L42585|
001f0 e5d23000 ldrb r3, [r2]
001f4 e3530061 cmp r3, #0x61
001f8 3a000002 bcc |$L44213|
001fc e353007a cmp r3, #0x7A
00200 92431020 subls r1, r3, #0x20
00204 9a000000 bls |$L44212|
; 593 :
; 594 : while ( (IsAlpha(*sg_pu8LexPos)) || ('_' == *sg_pu8LexPos) )
00208 |$L44213|
00208 e1a01003 mov r1, r3
0020c |$L44212|
0020c e3510041 cmp r1, #0x41
00210 ba000007 blt |$L44218|
00214 e3530061 cmp r3, #0x61
00218 3a000002 bcc |$L44216|
0021c e353007a cmp r3, #0x7A
00220 92431020 subls r1, r3, #0x20
00224 9a000000 bls |$L44215|
00228 |$L44216|
00228 e1a01003 mov r1, r3
0022c |$L44215|
0022c e351005a cmp r1, #0x5A
00230 da000001 ble |$L42587|
00234 |$L44218|
00234 e353005f cmp r3, #0x5F
00238 1a000003 bne |$L42586|
0023c |$L42587|
; 595 : {
; 596 : sg_u8YYLEX[u32TokenLength++] = *sg_pu8LexPos++;
0023c e7ce3002 strb r3, [lr, +r2]
00240 e2822001 add r2, r2, #1
00244 e2877001 add r7, r7, #1
; 597 : }
00248 eaffffe8 b |$L42585|
0024c |$L42586|
; 598 :
; 599 : psIdent = sg_sIdentifiers;
0024c e59f60b0 ldr r6, [pc, #0xB0]
00250 e5842ac8 str r2, [r4, #0xAC8]
; 600 : sg_u8YYLEX[u32TokenLength] = '\0';
00254 e7c78004 strb r8, [r7, +r4]
; 601 :
; 602 : while (psIdent->pu8TextToMatch)
00258 e596e000 ldr lr, [r6]
0025c e35e0000 cmp lr, #0
00260 0a000024 beq |$L42592|
00264 |$L42589|
; 603 : {
; 604 : if (stricmp(psIdent->pu8TextToMatch, sg_u8YYLEX) == 0)
00264 e5de3000 ldrb r3, [lr]
00268 e1a05004 mov r5, r4
0026c ea000012 b |$L44324|
00270 |$L44243|
00270 e5d52000 ldrb r2, [r5]
00274 e3520000 cmp r2, #0
00278 0a000011 beq |$L44244|
0027c e3530061 cmp r3, #0x61
00280 3a000002 bcc |$L44238|
00284 e353007a cmp r3, #0x7A
00288 92431020 subls r1, r3, #0x20
0028c 9a000000 bls |$L44237|
00290 |$L44238|
00290 e1a01003 mov r1, r3
00294 |$L44237|
00294 e3520061 cmp r2, #0x61
00298 3a000002 bcc |$L44241|
0029c e352007a cmp r2, #0x7A
002a0 92423020 subls r3, r2, #0x20
002a4 9a000000 bls |$L44240|
002a8 |$L44241|
002a8 e1a03002 mov r3, r2
002ac |$L44240|
002ac e1510003 cmp r1, r3
002b0 1a000009 bne |$L44247|
002b4 e5fe3001 ldrb r3, [lr, #1]!
002b8 e2855001 add r5, r5, #1
002bc |$L44324|
002bc e3530000 cmp r3, #0
002c0 1affffea bne |$L44243|
002c4 |$L44244|
002c4 e5de3000 ldrb r3, [lr]
002c8 e3530000 cmp r3, #0
002cc 1a000002 bne |$L44247|
002d0 e5d53000 ldrb r3, [r5]
002d4 e3530000 cmp r3, #0
002d8 0a000003 beq |$L44258|
002dc |$L44247|
002dc e5b63008 ldr r3, [r6, #8]!
002e0 e1b0e003 movs lr, r3
002e4 1affffde bne |$L42589|
; 601 :
; 602 : while (psIdent->pu8TextToMatch)
002e8 ea000002 b |$L42592|
002ec |$L44258|
; 605 : {
; 606 : eToken = psIdent->eToken;
002ec e5960004 ldr r0, [r6, #4]
; 607 : break;
; 608 : }
; 609 : psIdent++;
; 610 : }
; 611 : }
; 612 : else
002f0 ea000000 b |$L42592|
002f4 |$L42582|
; 613 : {
; 614 : eToken = sg_u8YYLEX[u32TokenLength - 1];
002f4 e1a00001 mov r0, r1
002f8 |$L42592|
; 615 : }
; 616 :
; 617 : sg_u8YYLEX[u32TokenLength] = '\0';
002f8 e7c78004 strb r8, [r7, +r4]
; 618 :
; 619 : return(eToken);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -