Наваял между делом простенький дизассемблер для Cortex-M0+. Это система команд микроконтроллера RP2040. Официально называется ARMv6-M Thumb1. Всего 85 разных машинных инструкций, если считать различия в формате аргументов. Формат весьма компактный: большинство команд 16-битные, только шесть из списка 32-битные. Покажу весь список, с разбивкой по группам.
Пересылка данных:
Пересылка данных:
movs r1, r2
movs r1, #255
mov r11, r12
msr APSR, r1
mrs r1, PRIMASK
cpsie i
cpsid i
Чтение памяти:
Запись в память:ldr r1, [r2, #124]
ldr r1, [sp, #1020]
ldr r1, [pc, #1020]
ldr r1, [r2, r3]
ldrb r1, [r2, #31]
ldrb r1, [r2, r3]
ldrsb r1, [r2, r3]
ldrh r1, [r2, #62]
ldrh r1, [r2, r3]
ldrsh r1, [r2, r3]
ldmia r7, {r0, r1, r2, r3, r4, r5, r6, r7}
Стек:str r1, [r2, #124]
str r1, [sp, #1020]
str r1, [r2, r3]
strb r1, [r2, #31]
strb r1, [r2, r3]
strh r1, [r2, #62]
strh r1, [r2, r3]
stmia r7!, {r0, r1, r2, r3, r4, r5, r6}
push {r1, r2, lr}
pop {r1, r2, pc}
Арифметические операции:Логические операции:add r1, r2, r3
add r1, r2, #7
add r1, #255
add r11, r12
add r1, pc, #1020
add r1, sp, #1020
add sp, #508
adc r1, r2
sub r1, r2, r3
sub r1, r2, #7
sub r1, #255
sub sp, #508
sbc r1, r2
neg r1, r2
mul r1, r2
cmp r1, #255
cmp r1, r2
cmp r11, r12
cmn r1, r2
Операции сдвига:and r1, r2
orr r1, r2
eor r1, r2
bic r1, r2
mvn r1, r2
tst r1, r2
Перестановки и расширение знака:asr r1, r2, #32
asr r1, r2
lsl r1, r2, #31
lsl r1, r2
lsr r1, r2, #32
lsr r1, r2
ror r1, r2
Ветвление:rev r1, r2
rev16 r1, r2
revsh r1, r2
sxth r1, r2
sxtb r1, r2
uxth r1, r2
uxtb r1, r2
Барьеры:b 0x12345678
beq 0x12345678
bne 0x12345678
bcs 0x12345678
bcc 0x12345678
bmi 0x12345678
bpl 0x12345678
bvs 0x12345678
bvc 0x12345678
bhi 0x12345678
bls 0x12345678
bge 0x12345678
blt 0x12345678
bgt 0x12345678
ble 0x12345678
bl 0x12f45678
bx r11
blx r12
События:nop
dsb
dmb
isb
bkpt 0x00ff
svc 255
wfi
wfe
sev
yield

no subject
Date: 2023-09-16 00:19 (UTC)no subject
Date: 2023-09-16 02:15 (UTC)