View Full Version : shift
DarkSiDE
17-01-2004, 12:56
lo shift aritmetico e logico a sinistra sono equivalenti?
il risultato è lo stesso (shift a sinistra e inserimento di uno zero come cifra meno significativa), la differenza che c'è a livello assembler (istruzioni SHL e SAL) è data dal fatto che lo shift aritmetico imposta il flag di overflow nel caso in cui l'operazione faccia cambiare di segno all'operando.
maxithron
17-01-2004, 14:34
considerando un operando di 8 bit.
DarkSiDE
17-01-2004, 14:57
quindi se faccio uno shift su 10000000 in entrambi i casi avrò 00000000, vero?
maxithron
17-01-2004, 15:07
Non sono sicuro(da tempo non mastico un pò di assembly) ma da quello che ricordo, il tuo numero 10000000 il bit più significativo e cioè il bit7 (1) non viene perduto ma viene memorizzato nella flag carry mentre il bit meno significativo bit0 (0) dovrebbe essere sovrascritto da un valore nullo.
Sottolineo il condizionale...
maxithron
17-01-2004, 17:44
E, sempre se non ricordo male, con questo metodo,quando il contatore,cioè il secondo operando era uguale ad 1, risultava essere più efficiente e veloce di quando si sceglie il contatore dal CL.
DarkSiDE
17-01-2004, 20:03
a dir la verità a me nn interessa come e se viene modificata la parola di stato, mi basta sapere come viene modificato il numero
il dubbio mi è sorto quando per controllare come si comportava l'assemblatore ho provato a debuggare con il turbo debugger l'exe mi ritrovavo con shl anche al posto di sal, ho compilato con il masm..
DarkSiDE
17-01-2004, 20:17
grazie a entrambi :)
VegetaSSJ5
17-01-2004, 23:31
Originariamente inviato da DarkSiDE
quindi se faccio uno shift su 10000000 in entrambi i casi avrò 00000000, vero?
in assembbler mips si, te lo assicuro io
repne scasb
19-01-2004, 22:16
DarkSiDE
20-01-2004, 08:18
Originariamente inviato da repne scasb
Penso tu stia parlando di assembly dell'80x86. In questo caso SHL e SAL sono sinonimi, non esiste alcuna differenza. Questo spiega perche' il Turbo debugger visualizzi sempre l'istruzione SHL. A conferma di cio' ti dico che le due istruzione hanno la medesima codifica, ad esempio:
SHL ax,1
SAL ax,1
hanno entrambe codifica pari a 0D1h,0E0h. Per quanto riguarda i flag/registro il comportamento e' il seguente (SHL ax,1):
Il bit 0 viene impostato a 0, il bit 15 passa nel carry, il bit di overflow viene impostato nel seguente modo: se i bit 14 e 15 sono uguali viene impostato a 0, se i bit 14 e 15 sono diversi viene impostato ad 1.
esattamente, mi riferivo all'asm 80x86, sei stato chiarissimo grazie
curiosità: cosa significa la tua firma ? :confused:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.