vak: (Default)
[personal profile] vak
Наваял между делом простенький дизассемблер для 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

Date: 2023-09-15 21:21 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Дельно выглядит. А память там какая? В смысле объема.

Вообще писать дизассемблер на си - это странно. Ну или, конечно, код простой... Когда-то все это дело, ассемблер-дизассемблер, писалось на форту; ассемблер - одна страничка. Как бы я сейчас стал, даже не знаю. Неужели на скале? Тоже глупо.

Date: 2023-09-15 22:51 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Да форт маловат для нынешних объемов софта. No scalability.

Date: 2023-09-16 00:19 (UTC)
From: [personal profile] ivanrubilo
А IT-блоки оттуда вынули (…женщину засунули) чтоли?

Date: 2023-09-16 00:20 (UTC)
From: [personal profile] ivanrubilo
Вот-вот, и на питоне геморойно с битниками возиться.
Хз на чём, на go может?