Цитата(meister @ May 25 2008, 21:13)

Прошагать setjmp слабо?
Да не особо, но слабо.
вырезка из листинга скомпилированного файла(мега8)
Код
\ 00000000 938A ST -Y, R24
\ 00000002 93FA ST -Y, R31
\ 00000004 93EA ST -Y, R30
\ 00000006 923A ST -Y, R3
\ 00000008 922A ST -Y, R2
\ 0000000A 921A ST -Y, R1
\ 0000000C 920A ST -Y, R0
\ 0000000E 937A ST -Y, R23
\ 00000010 936A ST -Y, R22
\ 00000012 935A ST -Y, R21
\ 00000014 934A ST -Y, R20
\ 00000016 933A ST -Y, R19
\ 00000018 932A ST -Y, R18
\ 0000001A 931A ST -Y, R17
\ 0000001C 930A ST -Y, R16
\ 0000001E B78F IN R24, 0x3F
122 if (!setjmp(main_task)) //Запомнили контекст осн. задачи
\ 00000020 .... LDI R16, LOW((iprx_task + 61))
\ 00000022 .... LDI R17, HIGH((iprx_task + 61))
\ 00000024 .... RCALL ?setjmp_0
меп файл, сегмент setjmp
Код
?setjmp_0 0000144E TCP_init (main)
_sliprx (main)
_tcp_delay (main)
_txb (main)
delayint (main)
rxint (main)
txint (main)
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 1. Intra module refs: ?setjmp_0
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_1 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 2. Intra module refs: ?setjmp_1
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_2 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 3. Intra module refs: ?setjmp_2
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_3 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 4. Intra module refs: ?setjmp_3
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_4 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 5. Intra module refs: ?setjmp_4
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_5 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 6. Intra module refs: ?setjmp_5
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_6 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 7. Intra module refs: ?setjmp_6
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_7 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 8. Intra module refs: ?setjmp_7
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_8 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 9. Intra module refs: ?setjmp_8
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_9 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 10. Intra module refs: ?setjmp_9
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_10 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E, align: 1
Segment part 11. Intra module refs: ?setjmp_10
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_11 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000144E - 00001451 (0x4 bytes), align: 1
Segment part 12. Intra module refs: ?setjmp_11
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_12 0000144E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 00001452 - 00001453 (0x2 bytes), align: 1
Segment part 13. Intra module refs: ?setjmp_0
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R15 00001452
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 00001454 - 00001455 (0x2 bytes), align: 1
Segment part 14. Intra module refs: ?setjmp_1
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R14 00001454
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 00001456 - 00001457 (0x2 bytes), align: 1
Segment part 15. Intra module refs: ?setjmp_2
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R13 00001456
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 00001458 - 00001459 (0x2 bytes), align: 1
Segment part 16. Intra module refs: ?setjmp_3
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R12 00001458
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000145A - 0000145B (0x2 bytes), align: 1
Segment part 17. Intra module refs: ?setjmp_4
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R11 0000145A
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000145C - 0000145D (0x2 bytes), align: 1
Segment part 18. Intra module refs: ?setjmp_5
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R10 0000145C
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000145E - 0000145F (0x2 bytes), align: 1
Segment part 19. Intra module refs: ?setjmp_6
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R9 0000145E
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 00001460 - 00001461 (0x2 bytes), align: 1
Segment part 20. Intra module refs: ?setjmp_7
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R8 00001460
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 00001462 - 00001463 (0x2 bytes), align: 1
Segment part 21. Intra module refs: ?setjmp_8
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R7 00001462
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 00001464 - 00001465 (0x2 bytes), align: 1
Segment part 22. Intra module refs: ?setjmp_9
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R6 00001464
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 00001466 - 00001467 (0x2 bytes), align: 1
Segment part 23. Intra module refs: ?setjmp_10
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R5 00001466
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 00001468 - 00001469 (0x2 bytes), align: 1
Segment part 24. Intra module refs: ?setjmp_11
ENTRY ADDRESS REF BY
===== ======= ======
?setjmp_save_R4 00001468
-------------------------------------------------------------------------
CODE
Relative segment, address: CODE 0000146A - 0000148D (0x24 bytes), align: 1
Segment part 25. Intra module refs: ?setjmp_12
подкажите где здесь сохраняется текущий pc и указатели стека? 0x3F - это регистр статуса. Код приведённый в первом посте не из этой оперы