Voici l'algorithme simplifiés des instructions du microprocesseur de la famille des 80x86 :
MODULE AAA * Vaut 1 si c'est vrai retenue d'AL ← AL > 0F9h SI ( ( AL ∩ 0Fh > 9 ) U ( AF = 1 ) ALORS AL ← ( AL + 6 ) ∩ 0Fh AH ← AH + 1 + retenue d'AL Drapeau AF ← 1 Drapeau CF ← 1 SINON AL ← 0Fh Drapeau AF ← 0 Drapeau CF ← 0 FIN SI MODULE AAD(immédiat 8) AL ← AH x immédiat 8 bits + AL AH ← 00h MODULE AAM(immédiat 8) AH ← AL ÷ immédiat 8 AL ← AL MOD immédiat 8 MODULE AAS * Vaut 1 si c'est vrai AL inférieur ← AL < 6 SI ( AL ∩ 0Ah ) U ( AF = 1 ) ALORS AL ← ( AL - 6 ) ∩ 0Fh AH ← AH - 1 AL inférieur Drapeau CF ← 1 Drapeau AF ← 1 SINON AL ← AL ∩ 0Fh Drapeau CF ← 0 Drapeau AF ← 0 FIN SI MODULE ADC(Opérande Cible,Opérande Source) Opérande Cible ← Opérande Cible + Quantité Source + drapeau CF MODULE ADCX(dest,source) SI taille de l'opérande est 64 bits ALORS CF:dest(63..0) ← dest(63..0) + source(63..0) + CF SINON CF:dest(31..0) ← dest(31..0) + source(31..0) + CF FIN SI MODULE ADD(Opérande Cible,Opérande Source) Opérande Cible ← Opérande Cible + Quantité Source drapeau CF ← retenue MODULE ADDPD(dest,source) dest(0..63) ← dest(0..63) + source(0..63) dest(64..12) ← dest(64..12) + source(64..127) MODULE ADDPS(dest,source) dest(31..0) ← dest(31..0) + source(31..0) dest(63..32) ← dest(63..32) + source(63..32) dest(95..64) ← dest(95..64) + source(95..64) dest(127..96) ← dest(127..96) + source(127..96) MODULE ADDSD(dest,source) dest(0..63) ← dest(0..63) + source(0..63) MODULE ADDSS(dest,source) dest(31..0) ← dest(31..0) + source(31..0) MODULE ADDSUBPD(dest,source) dest(0..63) ← dest(0..63) - source(0..63) dest(64..127) ← dest(64..127) + source(64..127) MODULE ADDSUBPS(dest,source) dest(0..31) ← dest(0..31) - source(0..31) dest(32..63) ← dest(32..63) + source(32..63) dest(64..95) ← dest(64..95) - source(64..95) dest(96..127) ← dest(96..127) + source(96..127) MODULE AESDEC(dest,source) STATE ← dest RoundKey ← source STATE ← InvShiftRows( STATE ) STATE ← InvSubBytes( STATE ) STATE ← InvMixColumns( STATE ) dest(127..0) ← STATE XOR RoundKey MODULE AESDECLAST(dest,source) STATE ← dest RoundKey ← source STATE ← InvShiftRows( STATE ) STATE ← InvSubBytes( STATE ) dest(127..0) ← STATE XOR RoundKey MODULE AESENC(dest,source) STATE ← dest RoundKey ← source STATE ← ShiftRows( STATE ) STATE ← SubBytes( STATE ) STATE ← MixColumns( STATE ) dest(127..0) ← STATE XOR RoundKey MODULE AESENCLAST(dest,source) STATE ← dest RoundKey ← source STATE ← ShiftRows( STATE ) STATE ← SubBytes( STATE ) dest(127..0) ← STATE XOR RoundKey MODULE AESIMC(dest,source) dest(127..0) ← InvMixColumns( source ) MODULE AESKEYGENASSIST(dest,source,immediat) X3(31..0) ← source(127..96) X2(31..0) ← source(95..64) X1(31..0) ← source(63..32) X0(31..0) ← source(31..0) RCON(31..0) ← ZeroExtend(immediat(7..0)) dest(31..0) ← SubWord(X1) dest(63..32) ← RotWord( SubWord(X1) ) XOR RCON dest(95..64) ← SubWord(X3) dest(127..96) ← RotWord( SubWord(X3) ) XOR RCON MODULE AND(Opérande Cible,Opérande Source) Opérande Cible ← Opérande Cible ∩ Opérande Source drapeau CF ← 0 drapeau OF ← 0 MODULE ANDNPD(dest,source) dest ← ¬ dest ∩ source MODULE ANDNPS(dest,source) dest ← ¬ dest ∩ source ... |
Dernière mise à jour : Vendredi, le 22 décembre 2017