ARM汇编程序 - 如何使用CMP,BLT和BGT?

use*_*390 7 c embedded assembly arm

快问我们,在我的循环中,我需要使用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
Run Code Online (Sandbox Code Playgroud)

这是我的整个循环:

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
Run Code Online (Sandbox Code Playgroud)

Leo*_*Leo 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
Run Code Online (Sandbox Code Playgroud)

比较r6r4,把差转换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)
Run Code Online (Sandbox Code Playgroud)