Veuillez consulter cette page à partir de l'interface principale.
version 2011-09-19

SUB : Soustraction entre deux opérandes.

La soustraction réutilise le système de l'ADDition, mais la deuxième opérande est inversée (en suivant le principe de A-B=A+(-B)).

Formes courtes : La deuxième opérande (le registre snd) est soustraite à la première opérande (si4 qui peut être un registre ou une valeur immédiate de 4 bits) et le résultat est écrit dans la deuxième opérande (snd).

Version longue : Le registre source (snd) est soustrait à la valeur du champ Imm16 (16 bits, avec extension de signe pour YASEP32) et le résultat est écrit dans le registre de destination (si4).

; D4 = 123h
; R1 = 1h
SUB R1 D4   ; D4= D4+(-R1) = 123h+FFFFFFFEh = 122h
SUB 4 R1 D4 ; D4= 4h+(-R1) =   4h+FFFFFFFEh =   3h

La soustraction d'une valeur immédiate à un registre est possible avec ADD, en ajoutant une valeur immédiate négative :

; R1 = 5678h
ADD -4 R1 D4 ; D4= 5678h+(-4) = 5674h

Cet opcode permet aussi la NEGation d'un registre grâce à un alias qui soustrait ce registre à la valeur immédiate 0.

Le résultat est tronqué aux 16 (YASEP16) ou 32 (YASEP32) bits de poids faible. La retenue peut être accédée avec la condition CARRY. Ce bit est mis à 1 lorsqu'il n'y a pas de retenue :

; R1 = 4h
SUB 3 R1 ; R1 = 3 - 4 = -1 ==> retenue=0
SUB 4 R1 ; R1 = 4 - 4 = 0  ==> retenue=1
SUB 5 R1 ; R1 = 5 - 4 = 1  ==> retenue=1