Примеры команд ассемблера и их расшифровка |
![]() |
Добавил(а) microsin |
LDR R0, [PC, #0x088] ;загружает в регистр R0 содержимое ячейки памяти по адресу (PC+0x088) LDR R1, [R0, #0] ;загружает в регистр R1 содержимое ячейки памяти по адресу R0 STR R1, [R0, #0] ;сохраняет регистр R1 по адресу в R0 LDR pc, =label ;загружает в PC адрес метки кода label ldr r2,=(BG2_ENABLE|MODE_3) ;загрузить в r2 результат от логической операции OR двух констант label: DCD Label001 ;Define Constant Data, определяет в памяти константу Label001 SUB lr, lr, #4 ;вычесть 4 из LR и результат поместить в LR STMFD sp!, {lr} ;сначала сделать декремент SP на 4, потом сохранить регистр LR (он указан в списке {LR}) по адресу в SP, измененный адрес сохранить в SP MRS lr, SPSR ;записать в LR значение регистра SPSR STMFD sp!, {r0, lr} ;сохранить в стеке R0 и LR. По окончанию операции SP уменьшится на 8, в памяти будет сначала лежать R0, а потом LR LDR lr, =AT91C_BASE_AIC ;записать в LR константу 0xFFFFF000 (AT91C_BASE_AIC) LDR r0, [r14, #AIC_IVR] ;записать в R0 содержимое ячейки памяти по адресу R14+256, т. к. #AIC_IVR==256 STR lr, [r14, #AIC_IVR] ;записать значение LR по адресу R14+256, т. к. #AIC_IVR==256 MSR CPSR_c, #ARM_MODE_SVC ;??? STMFD sp!, {r1-r3, r12, lr} ;сохранить в стеке R1, R2, R3, R12, LR. Содержимое стека при этом уменьшится на 5*4 = 20 LDMIA sp!, {r1-r3, r12, lr} ;вернуть из стека содержимое регистров. Содержимое стека при этом увеличится на 5*4 = 20 LDMIA sp!, {pc}^ ;вернуть из стека содержимое PC. ^ означает установить S и вернуть пользовательский банк. b label1 ;перейти (branch) по метке label1 CMP r0, r4 ; сравнить регистры r0 и r4 (устанавливаются соответствующие флаги в регистре CPSR) BEQ label34 ; переход по метке label34, если r0 == r4 ldr r2,[r1]+4! ; Загрузить в регистр r2 содержимое того, на что указывает r1, а затем, после того как всё сделано, добавить 4 к r1. ldr r2,[r1+4]! ; сначала добавить к r1 число 4, а потом загрузить в r2 содержимое ячейки по адресу r1 str r2,[r0]+4! ; сохранить содержимое r2 по адресу в r0, а потом к r0 добавить 4 |