Что делает инструкция ARM LDRLE? - PullRequest
1 голос
/ 27 мая 2011

Я проверяю некоторые разборки с инструкцией LDRE.Например:

LDRLE R3, #0x1234

Я не могу найти это в списке команд.Итак, мой вопрос, что делает инструкция LDRLE?

Я думаю, если инструкция была представлена ​​кодом c:

// LDRLE R3, #0x1234
R3 = R3 <= 0x1234 ? R3 : 0x1234

Ответы [ 3 ]

3 голосов
/ 27 мая 2011

Команда LDRLE на самом деле является командой LDR (регистр загрузки из памяти) с условным условием выполнения «LE» (меньше или равно).

Условие «LE» имеет значение «истина», когда флаг N и флаг V различны, и это также верно, когда установлен бит Z (Z, N и V - 3 из 4 битов флага вPSR).Вы можете найти информацию из ARM в компоновке PSR вашего процессора.

Другими словами, эта инструкция LDR выполняется только в том случае, если условие «LE» выполняется для текущих флагов в PSR.На эти флаги могут влиять инструкции, выполняющие до вашей инструкции LDRLE.Другими словами, условие LE оценивается на основе эффектов предыдущих команд , а не значений операндов инструкции current (в данном случае, инструкции LDRLE).

Наконец, что делает инструкция, если она выполняется (условие LE истинно для текущих флагов PSR)?Он загружает (немедленное) значение 0x1234 в регистр R3.

0 голосов
/ 27 мая 2011

ARM ISA пытается раскрыть доступные аппаратные ресурсы для каждой инструкции, например, поскольку в ЦП имеется сдвиг ствола, каждая инструкция может сдвигать / поворачивать один из своих операндов, а поскольку в ЦП имеются коды условий, каждая команда может быть выполнена условно.

Итак, инструкция по сборке ARM может выглядеть примерно так:

ADD[cond][S]

, где cond - это условие, закодированное двумя буквами, разрешающее условное выполнение, а S позволяет решить, должна ли текущая инструкция влиять на коды условий (очень полезно в сочетании с условным выполнением).

Затем вам придется искать инструкцию, используя только первую часть (ADD в этом примере).

0 голосов
/ 27 мая 2011

Загружает значение в 0x1234 в R3, если установлен бит меньше, чем в регистре CPSR.

в C: if (LESS_THAN_BIT_SET) r3 = * (0x1234);

Такесли в предыдущей инструкции вы установили бит меньше или равный:

mov r0, #0
cmp r0, #1 ; equivalent to subs r0, r0, #1

, тогда будет выполнена любая инструкция с условным флагом LE, иначе она будет рассматриваться как NOP.

Вот справочная страница: http://infocenter.arm.com/help/topic/com.arm.doc.dui0068b/Chdehgih.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...