Вопрос по c, arm, assembly – ARM Assembler - Как мне использовать CMP, BLT и BGT?

7

Быстрый вопрос для вас, ребята, в моем цикле мне нужно использовать CMP, BLT и BGT для сравнения некоторых значений. Как бы использовать указанные инструкции в следующем цикле?

Я пытаюсь использовать BGT, BLT и CMP, так как они мне нужны для работы моего приложения. Проблема в том, что я понятия не имею, как их использовать. Если бы я хотел использовать CMP для сравнения r6 с r4 и поместить разницу в r7, как бы я это сделал? Тот же вопрос, если бы я хотел использовать BLT, если r7 меньше 0, как бы я это сделал?

  BGT ??????? ; branch if greater than 5
  CMP ???????? ; compare r6 with r4 , put difference into r7
  BLT ???????? ;branch if r7 is less than 0
  BGT ???????? ;branch if r7 is greater than 0

Вот весь мой цикл:

LoopStart

  BL WaitBUT1
  BL readTemp
  BL checkTemp
  BGT ??????? ; branch if greater than 5
  BL errorVal
  CMP ???????? ; compare r6 with r4 , put difference into r7
  BLT ???????? ;branch if r7 is less than 0
  BL FanOn
  BL errorLedOn
  BL systemLedOn
  BL heaterOn
  BGT ???????? ;branch if r7 is greater than 0
  BL FanOff
  BL errorLedOff
  BL systemLedOff
  BL heaterOff
  BL WaitBUT2
  BL FanOff
  BL errorLedOff
  BL systemLedOff
  BL heaterOff

  B LoopStart
Ваши вопросы неясны. Просьба уточнить. Bo.
Я добавил дальнейшее описание к моему вопросу. user1080390

Ваш Ответ

3   ответа
0

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0068b/CIHIDDID.html

Из того, что можно прочитать, для того, что вы пытаетесь сделать, может потребоваться две инструкции, а не одна (если только ваш ассемблер ARM не выполняет какую-то специальную обработку)

С уважением,
филиал

1

with r4 and put the difference into r7, how would I do this?

subs r7, r6, r4    /* r7 ← r6 - r4 */

The same question if I wanted to use BLT if r7 is less than 0, how would I do this?

bmi _exit          /* branch if r7 < 0 */

BMI (минус / минус) Когда N включено (N равно 1), где N - флаг, который будет включен, если результат инструкции даст отрицательное число. Отключено иначе.

Почему subS вместо sub? Поскольку S является необязательным суффиксом, который при указании, флаги условия (например, N) обновляются в результате операции.

С уважением.

9

стра условий. Это может быть сделано сcmp или добавивs большинству инструкций. Ознакомьтесь с документацией по сборке ARM для деталей. Быстрый пример:

Филиал еслиr0 больше 5:

cmp r0, #5 ;Performs r0-5 and sets condition register
bgt label_foo ;Branches to label_foo if condition register is set to GT

сравнитьr6 сr4 положить разницу вr7, ответвление еслиr7 < 0:

subs r7, r6, r4 ;Performs r7 = r6 - r4 and sets condition register
blt label_bar ;Branches to label_bar if r7 < 0 (in which case r6 < r4)

Похожие вопросы