8
votes

Bras Assembleur - Comment utiliser CMP, BLT et BGT?

Question rapide pour vous, dans ma boucle, j'ai besoin d'utiliser CMP, BLT et BGT pour comparer certaines valeurs. Comment utiliserait lesdites instructions dans la boucle suivante?

J'essaie d'utiliser BGT, BLT et CMP, car j'en ai besoin de faire mes travaux d'application. Le problème est que je n'ai aucune idée de la façon de les utiliser. Si je voulais utiliser CMP pour comparer R6, avec R4 et mettre la différence dans R7, comment ferais-je cela? La même question si je voulais utiliser BLT si R7 est inférieure à 0, comment ferais-je cela? P>

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


2 commentaires

Vos questions ne sont pas claires. Précisez s'il vous plaît.


J'ai ajouté une autre description à ma question.


3 Réponses :


0
votes

Vous devriez vérifier la documentation du bras à (exemple pour la documentation CMP): http: //infocenter.arm. com / help / index.jsp? topic = / com.arm.doc.dui0068b / cihiddid.html

de ce que vous pouvez lire ce que vous essayez de faire peut nécessiter deux instructions plutôt qu'une seule (à moins que votre assembleur de bras ne procède à un traitement spécial)

genre Cordialement,
Bo


0 commentaires

11
votes

Vous ne pouvez pas faire une branche conditionnelle sans le premier réglage de la condition Inscrivez-vous d'une manière ou d'une autre. Cela peut être fait avec CMP code> ou en ajoutant s code> à la plupart des instructions. Découvrez la documentation de l'assemblage des bras pour plus de détails. Exemple rapide:

branche si R0 code> supérieur à 5: p> xxx pré>

comparaison r6 code> avec R4 code>, mettre la différence dans r7 code>, branche si r7 : p>

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)


0 commentaires

1
votes

Si je voulais utiliser CMP pour comparer R6, avec R4 et mettre la différence dans R7, comment ferais-je cela? p> xxx pré>

La même question si je voulais utiliser BLT si R7 est inférieur à 0, comment ferais-je cela? P> blockQuote>

bmi _exit          /* branch if r7 < 0 */


0 commentaires