Значение кода сборки в представлении разборки памяти - PullRequest
0 голосов
/ 06 июня 2018

Что означает следующий набор инструкций по сборке:

flashEraseSector:
00005f24:   push    {r7, lr}
00005f26:   sub     sp, #24
00005f28:   add     r7, sp, #0
00005f2a:   str     r0, [r7, #4]
 17                   temp1 = (locat << 8);
00005f2c:   ldr     r3, [r7, #4]
00005f2e:   lsls    r3, r3, #8
00005f30:   str     r3, [r7, #20]
 18                   temp1 = temp1 >> 24;
00005f32:   ldr     r3, [r7, #20]
00005f34:   asrs    r3, r3, #24
00005f36:   str     r3, [r7, #20]
 19                   temp2 = (locat << 16);
00005f38:   ldr     r3, [r7, #4]
00005f3a:   lsls    r3, r3, #16
00005f3c:   str     r3, [r7, #16]
 20                   temp2 = temp2 >> 24;
00005f3e:   ldr     r3, [r7, #16]
00005f40:   asrs    r3, r3, #24
00005f42:   str     r3, [r7, #16]
 21                   temp3 = (locat << 24);

Вот мой код c, который был скомпилирован и

        temp1 = (locat << 8);
        temp1 = temp1 >> 24;
        temp2 = (locat << 16);
        temp2 = temp2 >> 24;
        temp3 = (locat << 24);
        temp3 = temp3 >> 24;

Было бы здорово, если кто-то объяснит, чтоздесь происходитПочему они хранят 20,20,16,16?Они должны хранить -4,4,12,20 правильно?

00005f30:   str     r3, [r7, #20]
00005f36:   str     r3, [r7, #20]
00005f3c:   str     r3, [r7, #16]
00005f42:   str     r3, [r7, #16]

Заранее спасибо.

1 Ответ

0 голосов
/ 06 июня 2018

0x00000800 - это адрес функции flashLocat.Затем первый столбец представляет адрес в памяти, где находится инструкция, второй столбец представляет инструкцию, а третий - аргументы.Что-нибудь после ";"представляет комментарий.

...