В дизассемблере происходят странные вещи: SUB sp,sp,#0x18 MOVS r2,#0x14 LDR r1,|L0.24| ADD r0,sp,#4 BL __aeabi_memcpy4 LDR r1,|L0.28| LDR r0,[sp,#0xc] STR r0,[r1,#0] ; x По метке |L0.28| находится DCD x По метке |L0.24| находится DCD ||.constdata||
__aeabi_memcpy4: PUSH {r4,lr} SUBS r2,r2,#0x20 BCC.W 0x080001FA LDM r1!,{r3-r4,r12,lr} SUBS r2,r2,#0x20 STM r0!,{r3-r4,r12,lr} LDM r1!,{r3-r4,r12,lr} STM r0!,{r3-r4,r12,lr} BCS.W 0x080001E4 LSLS r12,r2,#28 ITT CS LDM r1!,{r3-r4,r12,lr} STM r0!,{r3-r4,r12,lr} ITT MI LDM r1!,{r3-r4} STM r0!,{r3-r4} POP {r4,lr} LSLS r12,r2,#30 ITT CS LDR r3,[r1],#0x04 STR r3,[r0],#0x04 IT EQ BX lr
Это реакция на команду: int32_t array[5]={1,2,3,4,5}; x=array[2]; Я вообще не понимаю логику того, что там происходит и что такое __aeabi_memcpy4.
Я опишу еще раз подробнее то, что мне нужно сделать, возможно я просто неправильно задал вопрос: У меня есть файл task1.c содержащий простейшую команду и описание des1 ddd1={1,2,3}; где des1 ddd1 берется из header файла descriptors.h и выглядит так: typedef struct { int Status; int CurrentTic; int NumberTic; int Command; long CurrentPC; long StartPC; long CurrentSP; long StartSP; long CurrentSSP; long StartSSP; long temp; } des1; При импорте ddd1 в ассемблерную подпрограмму структура корректно грузится и задает значения Status=1, CurrentTic=2 и NumberTic=3, мне нужно там же в ассемблерной вставке вытащить из структуры в регистр значение, например Status и сравнить с 1. В микропроцессоре C55x это делалось последовательностью команд:
amov #TaskPointer, xar0 mov dbl(*ar0), xar0 mov dbl(*ar0), xar0 mov *ar0, ac0 ; getting Status
TaskPointer: .long TaskTableStart TaskTableStart: .long _ddd1 .long _ddd2 .long _ddd3 .long _ddd4 TaskTableEnd:
Как можно сделать то же самое, но на Cortex-M3?
|