Ho provato a capire l'assembly per una parte di un gioco DOS e c'è un'operazione che continua a essere chiamata che utilizza tutti e 4 i registri. Posso vedere cosa fa ogni riga ma non riesco a capire cosa dovrebbe fare tutto il codice insieme.
Qualcuno può darmi un'idea?
Il codice è:
seg000: 3825 some_math_op_on_regs proc far; CODICE XREF: sub_72C6 + 19FPseg000: 3825; sub_72C6 + 1DDP ... seg000: 3825 cmp cl, 10hseg000: 3828 jnb short loc_383A; Salta se CF = 0seg000: 382A mov bx, dx; il registro c è < 16; spostare d in bseg000: 382C shr ax, cl; Sposta a destra di un valore in c (logico) seg000: 382E sar dx, cl; Sposta d destra del valore in c (aritmetico) seg000: 3830 neg cl; Nega c (complemento a 2) seg000: 3832 add cl, 10h; Aggiungere 16 a cseg000: 3835 shl bx, cl; Shift b a sinistra del valore in c (logico) seg000: 3837 o ax, bx; OPPURE aeb, memorizzare il risultato in aseg000: 3839 retfseg000: 383A; -------------------------------------------------- ------------------ seg000: 383Aseg000: 383A loc_383A:; CODICE XREF: some_math_op_on_regs + 3jseg000: 383A sub cl, 10h; il registro c è > = 16; sottrarre 16 da cseg000: 383D xchg ax, dx; Cambia i valori in a e dseg000: 383E cwd; Converti word in doublewordseg000: 383F sar ax, cl; Sposta a destra di un valore in c (aritmetico) seg000: 3841 retfseg000: 3841 some_math_op_on_regs endp