LINUX.ORG.RU

Куда указывает pc в arm?

 , ,


0

1

pc вроде как указывает на текущую команду.

Но тут почему то не совсем так. objdump пишет что в r1 адрес метки .test2(1009с) хотя я понимаю должно быть _start(10094)

Disassembly of section .text:

00010094 <_start>:
   10094:       e59f1000        ldr     r1, [pc]        ; 1009c <.test2>

00010098 <.test1>:
   10098:       e08f1001        add     r1, pc, r1                    
0001009c <.test2>:                                                       1009c:       e3a02006        mov     r2, #6                           100a0:       ef000000        svc     0x00000000                    
★★

На ARM PC всегда указывает на команду, которая будет выполнена через одну (т.е. текущая команда + 2).

Так сделано по историческим причинам. Где-то читал, что конвейер тогда был трёхступенчатым (извлечение, декодирование, выполнение). И решили, что неплохо бы указывать на ту команду, которая на данном такте должна быть извлечена.

happycorsair
()
Последнее исправление: happycorsair (всего исправлений: 1)
Ответ на: комментарий от happycorsair

ох уж это легаси arm-говно, пора выкинуть вместе за x86

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.