RSEG CODE:CODE(2) PUBLIC ExecuteIMB ExecuteIMB: STR LR,[SP, #-4]! MRS R2,CPSR #ifdef NEWSGOLD SWI 4 ; Переключаемся в системный режим #else SWI 0 ; Переключаемся в системный режим #endif MRS R1,CPSR ; Запрещаем прерывания ORR R1,R1,#0xC0 MSR CPSR_c,R1 NOP NOP NOP ;Выполняем необходимую требуху с кешем clean_loop: MRC p15, 0, r15, c7, c10, 3 ; clean entire dcache using test and clean NOP NOP NOP BNE clean_loop MOV R0,#0 MCR p15, 0, r0, c7, c10, 4 ; drain write buffer NOP NOP NOP NOP MCR p15, 0, r0, c7, c5, 0 ; invalidate icache NOP NOP NOP NOP ;Выходим MSR CPSR_c,R2 ; Восстанавливаем старый режим LDR PC,[SP], #+0x4 END