La soustraction réutilise le système de l'ADDition, mais la première 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