Вставил же PRE
Это исходник:
void CreateTask(struct task_struct *p,void(*fp)(ulong descriptor))
{
p->pTask = fp;
p->Active = 0;
p->run_list.next = 0;
p->run_list.prev = 0;
list_add(&p->run_list, &runqueue_head);
}
Это то, что "сделал" KEIL ARM
*** CODE SEGMENT '?PR?CreateTask?A?sheduler':
34: void CreateTask(struct task_struct *p,void(*fp)(ulong descriptor))
00000000 E92D4000 STMDB R13!,{LR}
00000004 E1A03001 MOV R3,R1 ; fp
00000008 ---- Variable 'fp' assigned to Register 'R3' ----
00000008 E1A02000 MOV R2,R0 ; p
0000000C ---- Variable 'p' assigned to Register 'R2' ----
36: p->pTask = fp;
0000000C E1A01003 MOV R1,R3 ; fp
00000010 E1A00002 MOV R0,R2 ; p
00000014 E5801000 STR R1,[R0,#0x0] ; p <--- Типа сохраняем fp
37: p->Active = 0;
00000018 E3A01000 MOV R1,#0x0
0000001C E1A00002 MOV R0,R2 ; p
00000020 E5801004 STR R1,[R0,#0x4] <--- Типа сохраняем Active = 0
38: p->run_list.next = 0;
00000024 E3A01000 MOV R1,#0x0
00000028 E1A00002 MOV R0,R2 ; p
0000002C E5801000 STR R1,[R0,#0x0] ; p <--- УПС, а тут, то было fp!!!!!
39: p->run_list.prev = 0;
00000030 E3A01000 MOV R1,#0x0
00000034 E1A00002 MOV R0,R2 ; p
00000038 E5801004 STR R1,[R0,#0x4] <--- УПС, а тут, то было Active!!!!!
40: list_add(&p->run_list, &runqueue_head);
0000003C E1A00002 MOV R0,R2 ; p
00000040 E5101000 LDR R1,=runqueue_head ; runqueue_head
00000044 EBFFFFED BL list_add?A ; Targ=0x0
41: }
00000048 E8BD0008 LDMIA R13!,{R3}
0000004C E12FFF13 BX R3
00000050 ENDP ; 'CreateTask?A'
Это IAR 4.30A, вопросов просто нет.....
41 void CreateTask(struct task_struct *pt,void(*fp)(ulong descriptor))
42 {
43 pt->pTask = fp;
\ CreateTask:
\ 00000000 081080E5 STR R1,[R0, #+0x8]
44 pt->Active = 0;
\ 00000004 0010A0E3 MOV R1,#+0
\ 00000008 0C1080E5 STR R1,[R0, #+0xC]
45 pt->run_list.next = 0;
\ 0000000C 001080E5 STR R1,[R0, #+0]
46 pt->run_list.prev = 0;
\ 00000010 041080E5 STR R1,[R0, #+0x4]
47 list_add(&pt->run_list, &runqueue_head);
\ 00000014 ........ LDR R1,??DataTable3 ;; runqueue_head
\ 00000018 002091E5 LDR R2,[R1, #+0]
\ 0000001C 040082E5 STR R0,[R2, #+0x4]
\ 00000020 002080E5 STR R2,[R0, #+0]
\ 00000024 041080E5 STR R1,[R0, #+0x4]
\ 00000028 000081E5 STR R0,[R1, #+0]
48 }
\ 0000002C 1EFF2FE1 BX LR ;; return