movw и movt в сборке arm

#assembly #arm #disassembly

#сборка #arm #разборка

Вопрос:

У меня возникли проблемы с расшифровкой этого блока кода сборки. Каким будет значение r1 к концу и как я туда доберусь?

 3242ba66    f6454118    movw    r1, 0x5c18
3242ba6a        466f    mov     r7, sp
3242ba6c    f6c0415a    movt    r1, 0xc5a
3242ba70    f2460002    movw    r0, 0x6002
3242ba74    f6c0405a    movt    r0, 0xc5a
3242ba78        4479    add     r1, pc
3242ba7a        4478    add     r0, pc
3242ba7c        6809    ldr     r1, [r1, #0]
  

Комментарии:

1. Выполнимый пример с утверждениями в: github.com/cirosantilli/arm-assembly-cheat/blob /…

Ответ №1:

movw за a movt следует обычный способ загрузки 32-разрядного значения в регистр. Это эквивалентно объединению этих двух непосредственных значений вместе, при movt этом значение является старшим 16-разрядным. В этом случае r1 = (movt immediate value << 16) | (movw immediate value)) .

 3242ba66    f6454118    movw    r1, 0x5c18   // r1 = 0x5c18
3242ba6a        466f    mov     r7, sp
3242ba6c    f6c0415a    movt    r1, 0xc5a    // r1 = (r1 amp; 0xffff) | (0xc5a << 16)
3242ba70    f2460002    movw    r0, 0x6002
3242ba74    f6c0405a    movt    r0, 0xc5a
3242ba78        4479    add     r1, pc       // r1 = r1   pc
3242ba7a        4478    add     r0, pc
3242ba7c        6809    ldr     r1, [r1, #0] // r1 = *(r1   0)
  

Комментарии:

1. Итак, в этом случае, каким будет это значение или r1?

2. С какой частью объяснения у вас возникли трудности?

3. Последние два бита. Итак, добавляем r1 на ПК и *(r1 0). Каким будет значение pc? И означает ли * то же самое, что и в c (оператор почтения)?

4. Значение pc — это значение счетчика программ, который является первым столбцом разборки. (Хотя есть одна особенность ARM, с которой вам нужно разобраться.) А звездочка — это просто сокращение VLC для «слова, хранящегося в». VLC заимствовал нотацию C для экономии места. (Ранее у вас не было проблем с другой нотацией C …)

5. Я думаю, что прошло много времени с тех пор, как вопрос ответил на него. См. infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c /…