📄 nestint.cod
字号:
000001DC 00000128 DD tc0?A ; POOL-Entry U=1
000001E0 FFFFF100 DD 0xFFFFF100 ; POOL-Entry U=1
000001E4 FFFFF200 DD 0xFFFFF200 ; POOL-Entry U=1
000001E8 FFFFF010 DD 0xFFFFF010 ; POOL-Entry U=1
*** Disassembly of Segment '?PR?delay?T?Intrp':
51: void delay (void) {
000001EC delay?A PROC ARM
000001EC E59FC000 LDR R12,[R15]
000001F0 E12FFF1C BX R12
000001F4 000001F9 DD delay?T
000001F8 ENDP
000001F8 delay?T: ; FUNCTION START
000001F8 ; SCOPE-START
53: for (i = 0; i < 0x50000; i++) {
000001F8 2000 MOV R0,#0x0
000001FA ---- Variable 'i' assigned to Register 'R0' ----
55: }
000001FA L_2:
000001FA 3001 ADD R0,#0x1
000001FC 4901 LDR R1,[R15,#4] ; PoolRef @0x204
000001FE 4288 CMP R0,R1 ; i
00000200 DBFB BLT L_2 ; T=0x000001FA
00000202 ; SCOPE-END
56: }
00000202 4770 BX R14
00000204 ; END 'delay?T'
00000204 00050000 DD 0x50000 ; POOL-Entry U=1
*** Disassembly of Segment '?PR?eint1_srv?A?Intrp':
FILE: 'Intrp.c'
59: void eint1_srv (void) __irq {
00000208 eint1_srv?A: ; FUNCTION START
00000208 E92D5003 STMDB R13!,{R0-R1,R12,LR}
0000020C ; SCOPE-START
LA ARM LINKER/LOCATER V0.21 11/18/2004 14:06:02 PAGE 6
61: EXTINT = 2; // Clear EINT1 interrupt flag
0000020C E3A01002 MOV R1,#0x2
00000210 E59F0048 MOV R0,[PC,+72] ; PoolRef @0x260
00000214 E5C01000 STRB R1,[R0,#0x0]
62: IENABLE; // allow nested interrupts
00000218 E14FE000 MRS R14,SPSR
0000021C E92D4000 STMFD R13!,{LR}
00000220 E321F01F MSR CPSR_c,#0x1F
00000224 E92D4000 STMFD R13!,{LR}
63: delay (); // wait a long time
00000228 EBFFFFEF BL delay?A ; Targ=0x1EC
64: ++intrp_count; // increment interrupt count
0000022C E59F0030 MOV R0,[PC,+48] ; PoolRef @0x264 ; intrp_count
00000230 E5901000 LDR R1,[R0,#0x0] ; intrp_count
00000234 E2811001 ADD R1,R1,#0x0001
00000238 E5801000 STR R1,[R0,#0x0] ; intrp_count
65: IDISABLE; // disable interrupt nesting
0000023C E8BD4000 LDMFD R13!,{LR}
00000240 E321F092 MSR CPSR_c,#0x92
00000244 E8BD4000 LDMFD R13!,{LR}
00000248 E16FF00E MSR SPSR_cxsf,R14
66: VICVectAddr = 0; // Acknowledge Interrupt
0000024C E3A01000 MOV R1,#0x0
00000250 E59F0010 MOV R0,[PC,+16] ; PoolRef @0x268
00000254 E5801000 STR R1,[R0,#0x0]
00000258 ; SCOPE-END
67: }
00000258 E8BD5003 LDMIA R13!,{R0-R1,R12,LR}
0000025C E25EF004 SUBS R15,R14,#0x0004
00000260 ; END 'eint1_srv?A'
00000260 E01FC140 DD 0xE01FC140 ; POOL-Entry U=1
00000264 40000490 DD intrp_count ; POOL-Entry U=1
00000268 FFFFF030 DD 0xFFFFF030 ; POOL-Entry U=1
*** Disassembly of Segment '?PR?init_eint1?T?Intrp':
FILE: 'Intrp.c'
70: void init_eint1 (void) {
0000026C init_eint1?T: ; FUNCTION START
71: EXTMODE = 2; // Edge sensitive mode on EINT1
0000026C 2102 MOV R1,#0x2
0000026E 4809 LDR R0,[R15,#36] ; PoolRef @0x294
00000270 7001 STRB R1,[R0,#0x0]
72: EXTPOLAR = 2; // raising edge sensitive
00000272 2102 MOV R1,#0x2
00000274 4808 LDR R0,[R15,#32] ; PoolRef @0x298
00000276 7001 STRB R1,[R0,#0x0]
73: PINSEL0 = 2 << 28; // Enable EINT1 on GPIO_0.14
00000278 4908 LDR R1,[R15,#32] ; PoolRef @0x29C
0000027A 4809 LDR R0,[R15,#36] ; PoolRef @0x2A0
0000027C 6001 STR R1,[R0,#0x0]
74: VICVectAddr1 = (unsigned long) eint1_srv; // set interrupt vector in VIC 0
0000027E 4809 LDR R0,[R15,#36] ; PoolRef @0x2A4 ; eint1_srv?A
00000280 1C01 MOV R1,R0 ; eint1_srv?A
00000282 4809 LDR R0,[R15,#36] ; PoolRef @0x2A8
00000284 6001 STR R1,[R0,#0x0]
75: VICVectCntl1 = 0x21 | 15; // use VIC 1 for EINT1 Interrupt
00000286 212F MOV R1,#0x2F
00000288 4808 LDR R0,[R15,#32] ; PoolRef @0x2AC
0000028A 6001 STR R1,[R0,#0x0]
76: VICIntEnable = 1 << 15; // Enable EINT1 Interrupt
0000028C 4908 LDR R1,[R15,#32] ; PoolRef @0x2B0
0000028E 4809 LDR R0,[R15,#36] ; PoolRef @0x2B4
00000290 6001 STR R1,[R0,#0x0]
77: }
LA ARM LINKER/LOCATER V0.21 11/18/2004 14:06:02 PAGE 7
00000292 4770 BX R14
00000294 ; END 'init_eint1?T'
00000294 E01FC148 DD 0xE01FC148 ; POOL-Entry U=1
00000298 E01FC14C DD 0xE01FC14C ; POOL-Entry U=1
0000029C 20000000 DD 0x20000000 ; POOL-Entry U=1
000002A0 E002C000 DD 0xE002C000 ; POOL-Entry U=1
000002A4 00000208 DD eint1_srv?A ; POOL-Entry U=1
000002A8 FFFFF104 DD 0xFFFFF104 ; POOL-Entry U=1
000002AC FFFFF204 DD 0xFFFFF204 ; POOL-Entry U=1
000002B0 00008000 DD 0x8000 ; POOL-Entry U=1
000002B4 FFFFF010 DD 0xFFFFF010 ; POOL-Entry U=1
*** Disassembly of Segment '?PR?main?Intrp':
FILE: 'Intrp.c'
79: int main (void) {
000002B8 ?C?INIT: ; FUNCTION START
000002B8 4820 LDR R0,[R15,#128] ; PoolRef @0x33C ; ?C?CLRTAB
000002BA L_20:
000002BA C806 LDMIA R0!,{R1-R2}
000002BC 1C0B MOV R3,R1
000002BE 4313 ORR R3,R2
000002C0 D005 BEQ L_22 ; T=0x02CE
000002C2 2300 MOV R3,#0x0
000002C4 L_21:
000002C4 700B STRB R3,[R1,#0x0]
000002C6 1C49 ADD R1,R1,#0x1
000002C8 4291 CMP R1,R2
000002CA D1FB BNE L_21 ; T=0x02C4
000002CC E7F5 B L_20 ; T=0x000002BA
000002CE L_22:
000002CE 481C LDR R0,[R15,#112] ; PoolRef @0x340 ; ?C?INITTAB
000002D0 L_23:
000002D0 1CC0 ADD R0,R0,#0x3
000002D2 2303 MOV R3,#0x3
000002D4 4398 BIC R0,R3
000002D6 C806 LDMIA R0!,{R1-R2}
000002D8 1C0B MOV R3,R1
000002DA 4313 ORR R3,R2
000002DC D006 BEQ L_25 ; T=0x02EC
000002DE L_24:
000002DE 7803 LDRB R3,[R0,#0x0]
000002E0 1C40 ADD R0,R0,#0x1
000002E2 700B STRB R3,[R1,#0x0]
000002E4 1C49 ADD R1,R1,#0x1
000002E6 4291 CMP R1,R2
000002E8 D1F9 BNE L_24 ; T=0x02DE
000002EA E7F1 B L_23 ; T=0x000002D0
000002EC L_25:
000002EC main:
000002EC B500 PUSH {LR}
000002EE ; SCOPE-START
80: unsigned int LED_out = 0;
000002EE 2200 MOV R2,#0x0
000002F0 ---- Variable 'LED_out' assigned to Register 'R2' ----
82: IODIR1 = 0xFF0000;
000002F0 4914 LDR R1,[R15,#80] ; PoolRef @0x344
000002F2 4815 LDR R0,[R15,#84] ; PoolRef @0x348
000002F4 6001 STR R1,[R0,#0x0]
84: init_eint1(); // Enable EINT1
000002F6 F7FF BL init_eint1?T ; T=0x026D (1)
000002F8 FFB9 BL init_eint1?T ; T=0x026D (2)
85: init_timer ();
000002FA F7FF BL init_timer?T ; T=0x01A5 (1)
000002FC FF53 BL init_timer?T ; T=0x01A5 (2)
LA ARM LINKER/LOCATER V0.21 11/18/2004 14:06:02 PAGE 8
87: while (1) {
000002FE L_9:
88: if ((intrp_count & 0xFF) != LED_out) { // intrp_count has changed
000002FE 4813 LDR R0,[R15,#76] ; PoolRef @0x34C ; intrp_count
00000300 6800 LDR R0,[R0,#0x0] ; intrp_count
00000302 21FF MOV R1,#0xFF
00000304 4008 AND R0,R1
00000306 4290 CMP R0,R2 ; LED_out
00000308 D00A BEQ L_11 ; T=0x00000320
89: LED_out = (intrp_count & 0x7F); // set LED out
0000030A 4810 LDR R0,[R15,#64] ; PoolRef @0x34C ; intrp_count
0000030C 6802 LDR R2,[R0,#0x0] ; intrp_count
0000030E 207F MOV R0,#0x7F
00000310 4002 AND R2,R0
90: IOCLR1 = 0x7F0000; // clear LED's
00000312 490F LDR R1,[R15,#60] ; PoolRef @0x350
00000314 480F LDR R0,[R15,#60] ; PoolRef @0x354
00000316 6001 STR R1,[R0,#0x0]
91: IOSET1 = (LED_out << 16); // output intrp_count on LED
00000318 1C11 MOV R1,R2 ; LED_out
0000031A 0409 LSL R1,R1,#0x10 ; LED_out
0000031C 480E LDR R0,[R15,#56] ; PoolRef @0x358
0000031E 6001 STR R1,[R0,#0x0]
92: }
00000320 L_11:
93: if ((SecondCnt & 1) == 0) IOCLR1 = 0x800000;
00000320 480E LDR R0,[R15,#56] ; PoolRef @0x35C ; SecondCnt
00000322 6800 LDR R0,[R0,#0x0] ; SecondCnt
00000324 2101 MOV R1,#0x1
00000326 4208 TST R0,R1
00000328 D103 BNE L_12 ; T=0x00000332
0000032A 490D LDR R1,[R15,#52] ; PoolRef @0x360
0000032C 4809 LDR R0,[R15,#36] ; PoolRef @0x354
0000032E 6001 STR R1,[R0,#0x0]
00000330 E7E5 B L_9 ; T=0x000002FE
00000332 L_12:
94: else IOSET1 = 0x800000;
00000332 490B LDR R1,[R15,#44] ; PoolRef @0x360
00000334 4808 LDR R0,[R15,#32] ; PoolRef @0x358
00000336 6001 STR R1,[R0,#0x0]
95: }
00000338 E7E1 B L_9 ; T=0x000002FE
0000033A ; SCOPE-END
0000033A BD00 POP {PC}
0000033C ; END 'main'
0000033C 00000110 DD ?C?CLRTAB ; POOL-Entry U=1
00000340 00000120 DD ?C?INITTAB ; POOL-Entry U=1
00000344 00FF0000 DD 0xFF0000 ; POOL-Entry U=1
00000348 E0028018 DD 0xE0028018 ; POOL-Entry U=1
0000034C 40000490 DD intrp_count ; POOL-Entry U=2
00000350 007F0000 DD 0x7F0000 ; POOL-Entry U=1
00000354 E002801C DD 0xE002801C ; POOL-Entry U=2
00000358 E0028014 DD 0xE0028014 ; POOL-Entry U=2
0000035C 40000498 DD SecondCnt ; POOL-Entry U=1
00000360 00800000 DD 0x800000 ; POOL-Entry U=2
*** Disassembly of Segment '?C?FIQ':
FILE: 'fiq.s'
00000364 ; SCOPE-START
00000364 EAFFFFFE B $ ; Targ=0x364
00000368 ; SCOPE-END
*** Disassembly of Segment '?C?IRQ':
FILE: 'irq.s'
LA ARM LINKER/LOCATER V0.21 11/18/2004 14:06:02 PAGE 9
00000368 ; SCOPE-START
00000368 EAFFFFFE B $ ; Targ=0x368
0000036C ; SCOPE-END
*** Disassembly of Segment '?C?DABT':
FILE: 'dabt.s'
0000036C ; SCOPE-START
0000036C EAFFFFFE B $ ; Targ=0x36C
00000370 ; SCOPE-END
*** Disassembly of Segment '?C?PABT':
FILE: 'pabt.s'
00000370 ; SCOPE-START
00000370 EAFFFFFE B $ ; Targ=0x370
00000374 ; SCOPE-END
*** Disassembly of Segment '?C?UNDEF':
FILE: 'swi.s'
00000374 ; SCOPE-START
00000374 EAFFFFFE B $ ; Targ=0x374
00000378 ; SCOPE-END
00000378 ; SCOPE-START
00000378 EAFFFFFE B $ ; Targ=0x378
0000037C ; SCOPE-END
*** Disassembly of Segment '?PR?C?SDIV':
FILE: 'sdiv.s'
0000037C ; SCOPE-START
0000037C 4778 BX R15
0000037E 46C0 NOP ; MOV R8,R8
00000380 ; SCOPE-END
00000380 ; SCOPE-START
00000380 E2119102 ANDS R9,R1,#0x80000000
00000384 42611000 RSBMI R1,R1,#0x0000
00000388 E039A040 EORS R10,R9,R0,ASR #0
0000038C 22600000 RSBCS R0,R0,#0x0000
00000390 E1B08001 MOVS R8,R1
00000394 0A00000D BEQ DIV_0 ; Targ=0x3D0
00000398 just_l:
00000398 E15800A0 CMP R8,R0,LSR #1
0000039C 91A08088 MOVLS R8,R8,LSL #1
000003A0 3AFFFFFC BCC just_l ; Targ=0x398
000003A4 div_l:
000003A4 E1500008 CMP R0,R8
000003A8 E0A99009 ADC R9,R9,R9
000003AC 20400008 SUBCS R0,R0,R8
000003B0 E1380001 TEQ R8,R1
000003B4 11A080A8 MOVNE R8,R8,LSR #1
000003B8 1AFFFFF9 BNE div_l ; Targ=0x3A4
000003BC E1A01009 MOV R1,R9
000003C0 E1B0A08A MOVS R10,R10,LSL #1
000003C4 22611000 RSBCS R1,R1,#0x0000
000003C8 42600000 RSBMI R0,R0,#0x0000
000003CC E12FFF1E BX R14
000003D0 DIV_0:
000003D0 E3E01000 MVN R1,#0x0000
000003D4 E3A00000 MOV R0,#0x0000
000003D8 E12FFF1E BX R14
000003DC ; SCOPE-END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -