Формат 19: Длинный переход со ссылкой
Рис. 57. Формат 19
Действие
Эта команда выполняют дальний переход со ссылкой. При формировании кода команды ассемблер выполняет "склейку" из двух 11-битных полей - половин, полученных из двух THUMB команд BL, следующих друг за другом. В итоге формируется 23-битное смещение со знаком, кратное длине одного полуслова, и при этом бит 0 игнорируется.
Команда 1 (H = 0). В первой команде поле смещения содержит старшие 11 бит адреса, по которому будет осуществлен переход. Это поле подвергается смещению влево на 12 бит и складывается с текущим содержимым регистра PC. Результат этого сложения размещается в регистре LR.
Команда 2 (H = 1). Во второй команде поле смещения содержит младшие 11 бит адреса, по которому будет осуществлен переход. Это поле подвергается смещению влево на 1 бит и складывается с уже измененным (при выполнении предыдущей команды) содержимым регистра LR. После чего полный 32-битный адрес перехода (из них 23 бита - смещение), к этому моменту уже хранящийся в регистре LR, копируется в регистр PC. Адрес команды, следующий сразу за этой командой BL, копируется в регистр LR, устанавливая в нем в единицу бит 0. При задании перехода необходимо учитывать результат работы операций предвыборки, что фактически вызовет увеличение регистра PC на 4 байта больше, чем адрес этой команды.
Синтаксис команды в ассемблере приведен в таблице 30.
Табл. 30. Команды формата 19
H |
THUMB ассемблер |
ARM эквивалент |
Действия |
0 |
BL метка |
отсутствует |
LR := PC + OffsetHigh << 12 |
1 |
|
|
temp := адрес следующей команды
PC := LR + OffsetLow << 1
LR := temp | 1 |
Число машинных тактов при выполнении команд
Все команды этого формата эквивалентны командам в режиме ARM согласно таблице 30. Число машинных тактов выполнения этой команды в режиме THUMB идентично с числом тактов выполнения ее в режиме ARM. Примечание: для более подробной информации см. соответствующую главу.
Примеры
BL faraway ; Безусловный переход к "faraway"
next ... ; и размещение адреса следующий команды (т.е. "next")
; в регистре ссылки R14 (LR), установив в нем в 1 бит 0.
... ; Примечание: фактически в код команды THUMB будет занесено
; смещение, кратное числу полуслов.
faraway ... ; Адрес метки должен быть выровнен по границе одного полуслова
|
|