Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Thumb-2 Instruction Set
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sonycman
Никак не могу найти в сети подробное описание инструкций кортексов.
В частности, интересуют конструкции типа BL.W и B.W
Не могу понять, для чего там буковка W.
Также не могу понять, почему эта информация держится в строгой секретности разработчиком... smile.gif
zltigo
Цитата(sonycman @ Dec 27 2008, 05:25) *
Никак не могу найти в сети подробное описание инструкций кортексов.

Где-то закопано на arm.com было. Читал c год назад.
Цитата
В частности, интересуют конструкции типа BL.W и B.W
Не могу понять, для чего там буковка W.

Широкие, полагаю, smile.gif это 32 битовые а не 16 бит инструкции.
sonycman
Цитата(zltigo @ Dec 27 2008, 17:25) *
Где-то закопано на arm.com было. Читал c год назад.

Широкие, полагаю, smile.gif это 32 битовые а не 16 бит инструкции.

Спасибо, нашёл. Вот уж точно "закопано", в разделе "RealView® Compilation Tools for µVision Assembler Guide" laughing.gif
sonycman
Цитата(zltigo @ Dec 27 2008, 17:25) *
Широкие, полагаю, smile.gif это 32 битовые а не 16 бит инструкции.

Ага, с этим разобрался, тут всё оказалось просто.

Теперь непонятки с инструкцией IT:
Код
    92:         i = testA(tz+z);
0x00000108 F8DC3000  LDR      r3,[r12,#0x00]
0x0000010C 4403      ADD      r3,r3,r0
    51:         if (za>= 500)
    52:         {
    53:              z = z /13;
    54:              return(-10);
    55:         }
0x0000010E F5B37FFA  CMP      r3,#0x1F4
    56:         else return(za+10);  
0x00000112 BFB8      IT       LT
0x00000114 330A      ADDLT    r3,r3,#0x0A
0x00000116 DB07      BLT      0x00000128
    53:              z = z /13;
0x00000118 F8DC3000  LDR      r3,[r12,#0x00]
0x0000011C FB93F3F4  SDIV     r3,r3,r4
0x00000120 F8CC3000  STR      r3,[r12,#0x00]
    54:              return(-10);
0x00000124 F06F0309  MVN      r3,#0x09
    92:         i = testA(tz+z);
0x00000128 F8CC3004  STR      r3,[r12,#0x04]
    93:         if (i) z = 1;
0x0000012C F8DC3004  LDR      r3,[r12,#0x04]
0x00000130 2B00      CMP      r3,#0x00
    94:         else z = 0;
0x00000132 BF0C      ITE      EQ
0x00000134 F8CC6000  STREQ    r6,[r12,#0x00]
0x00000138 F8CC5000  STRNE    r5,[r12,#0x00]

В коде в двух местах используются блоки IT. Зачем? Ведь все инструкции ARM имеют условное выполнение? Что мешает убрать инструкцию IT, разве от этого что-либо изменится в коде?
Или в ядре ARMv7 не все инструкции могут выполняться условно?
klen
ниче не закопано. на их сайте все есть:
http://infocenter.arm.com/help/index.jsp?t...e/I1010015.html

можно PDF иметь.

.W - 32битные инструкции

вот в доке:

IT <cond>
IT<x> <cond>
IT<x><y> <cond>
IT<x><y><z> <cond>
Condition the following instruction, Condition the following two instructions, Condition the following three instructions, Condition the following four instructions
sonycman
Цитата(klen @ Dec 28 2008, 02:41) *
вот в доке:

IT <cond>
IT<x> <cond>
IT<x><y> <cond>
IT<x><y><z> <cond>
Condition the following instruction, Condition the following two instructions, Condition the following three instructions, Condition the following four instructions

Доку я скачал, спасибо.

Ага, вроде понял: большинство THUMB2 инструкций не могут выполняться условно, в отличие от большинства ARM инструкций! Именно для компенсации этого вопиющего недостатка и введена команда IT, которая благосклонно одаряет до четырёх следующих за ней инструкций флагом условного выполнения.
smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.