Программирование ARM Примеры команд ассемблера и их расшифровка Sun, October 06 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Примеры команд ассемблера и их расшифровка Печать
Добавил(а) 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:
LDR PC, [PC, #-&F20] ;загружает в PC содержимое ячейки по адресу PC-0x00000F20 (обычно используется как вход в прерывание)

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

 

Добавить комментарий


Защитный код
Обновить

Top of Page