Bon, voici le code, à titre indicatif (si quelqu'un a la même difficulté, il pourra peut-être pointer ici grâce à Google.
Voici donc comment tester un dépassement de capacité en général :
MOV AX,0
MOV BX, d0
MOV CX, d1
MOV AX,d0
ADD AX,d1
JMP verif
; Ici, tout en sauvegardant temporairement les valeurs de d0 et d1 dans les registres,
; j'accumule les valeurs dans AX pour proceder ensuite a des verifications :
verif:
CMP AX,0
JL resultatnegatif
JMP resultatpositif
; Je verifie ici que AX est positif ou negatif.
resultatnegatif:
;Si AX est negatif
NEG AX
CMP AH,0
JE stockageoctet
resultatpositif:
;Si AX est positif
CMP AH,0
JE stockageoctet
JMP alternative
stockageoctet:
;Si je suis ici, c'est qu'on peut stocker dans un octet. C'est donc ce qui va se faire.
JMP Exceptiondesecurite
;Je controle l'exception de securite (la raison est indiquee dans le TP redige)
ExceptionControlee:
MOV d2, AL
ADD BX, CX
JS inversesigne
;Si la valeur du calcul des variables stockees auparavant est negative (SF=1), alors on inverse le signe
JMP fin
inversesigne:
NEG d2
JMP fin
Exceptiondesecurite:
CMP d2, 128
JGE alternative
JMP ExceptionControlee
;En fonction de la verification de l'exception, je prends soit l'alternative, soit je retourne
;dans le stockage de l'octet.
alternative:
MOV d3, AX
ADD BX,CX
JS inversesigne2
JMP fin
inversesigne2:
NEG d3
JMP fin
;Si je suis ici, c'est que la valeur ne peut tenir que dans un mot.
;C'est fini (et moi, je vais me prendre un cachet d'aspirine.)
Les commentaires parlent d'eux-mêmes 