SUBS |
Soustraction signé |
| ARM |
Syntaxe
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| #imm |
Ce paramètre permet d'indiquer une valeur immédiate. |
Description
Cette instruction permet d'effectuer une multiplication d'entier long.
Remarques
- SUBS pc, lr, #imm est une manière de retourner d'une fonction avec ajustement : Dans cette forme, le contenu de lr (Link Register) est diminué
d'un offset immédiat #imm, puis le résultat est placé dans pc, provoquant un saut vers une nouvelle adresse. Cette technique est souvent utilisée
pour retourner à un appelant, tout en sautant certaines instructions si nécessaire.
- pc comme destination déclenche un changement de flot d'exécution : Le fait d'écrire dans le registre pc signifie que l'instruction va
modifier directement le compteur de programme. Cela équivaut à un branch, donc on quitte le flot d'exécution normal, souvent pour revenir d'un appel système ou gérer
un retour spécifique.
- Très utilisée dans les gestionnaires d'exceptions ou SVC : Cette instruction apparaît fréquemment dans les gestionnaires SVC pour revenir du mode superviseur
vers le mode utilisateur, en ajustant l'adresse de retour contenue dans lr. C'est un retour sécurisé et contrôlé vers le code appelant, en contournant les
instructions indésirables.
- Le suffixe S met à jour les drapeaux de condition : L'instruction SUBS met à jour les flags N (négatif), Z (zéro), C (retenue) et V (débordement). Ces
informations peuvent être utilisées après le retour si le flot continue dans un contexte où l'état des drapeaux est testé.
- Peut être utilisée pour vérifier les privilèges ou l'état post-traitement : Lorsqu'elle est utilisée dans des routines critiques (comme les gestionnaires
d'interruptions), cette instruction permet non seulement de retourner, mais aussi de préparer des tests logiques sur le résultat de la soustraction, grâce à la mise à
jour des drapeaux.
- L'immédiat #imm est souvent égal à 4 ou 8 : L'offset immédiat #imm est généralement la taille d'une instruction ARM ou Thumb. Soustraire
cette valeur revient à sauter l'instruction de retour ou de SVC elle-même, pour reprendre l'exécution juste après le point d'appel.
- Alternative compacte à MOV pc, lr + offset : Alors que MOV pc, lr est un retour simple, SUBS pc, lr, #imm offre une version plus flexible permettant de
moduler dynamiquement l'adresse de retour, en évitant d'ajouter une instruction supplémentaire de calcul d'adresse.
- Un mauvais usage peut entraîner des comportements critiques : Mal utiliser cette instruction, par exemple avec un #imm incorrect ou dans un contexte mal
préparé, peut conduire à des erreurs critiques d'exécution, comme un saut vers une zone invalide ou une corruption du flot de programme. Une maîtrise complète du contexte
d'exécution est nécessaire.
Dernière mise à jour : Dimanche, le 12 novembre 2017