Page 1 sur 1
Decalage et recup du signe (comment?) [RESOLU]
Publié : lun. 19/mars/2007 19:43
par flaith
Hello tous,
je lisais l'aide et j'ai retenue surtout ceci
Code : Tout sélectionner
f.b=-128 >> 1 ; La valeur de 'f' sera -64. -128=%10000000, -64=%11000000. Lors du décalage, le bit le plus fort reste (conservation du signe).
comme il y a conservation du signe (CF ?), comment peut-on le récupérer ?
Publié : lun. 19/mars/2007 19:56
par Dr. Dri
pour récupérer le signe tu peux essayer ca :
Code : Tout sélectionner
Procedure EstNegatif(Entier.q)
ProcedureReturn (Entier >> 63) & 1
EndProcedure
b.b = -5
w.w = -5
l.l = -5
q.q = -5
Debug EstNegatif(b)
Debug EstNegatif(w)
Debug EstNegatif(l)
Debug EstNegatif(q)
sinon on parle de propagation du signe, il y a deux façons de décaler les bits
soit en propageant le bit de poid foirt (x >> n équivaut x / 2^n)
soit sans le propager (ca propage d'office des 0)
Dri
Publié : lun. 19/mars/2007 20:21
par flaith
Merci Dri

(en fait ça va aussi me servir)
effectivement, je me suis mal exprimé, en fait je désire récupérer le bit qui sort lors du décalage, en asm le bit est dans CF, un peu comme ça :
Code : Tout sélectionner
test = 0
! mov ax, 10010100b
! mov word [v_test], ax
! mov ecx,8
!shift:
! shr word [v_test], 1 ; shift right
! jb egal_1 ; si CF (carry flag) = 1
! push ecx
Debug "0"
! pop ecx
! jmp cont
!egal_1:
! push ecx
Debug "1"
! pop ecx
!cont:
! loop shift
y-a-t'il un autre moyen de le faire qu'en ASM ?
Publié : mer. 21/mars/2007 19:14
par Dr. Dri
attention a la propagation du bit de poids fort si jamais le nombre est négatif...
pour un nombre positif tu peux faire comme ca
Dri
Publié : mer. 21/mars/2007 19:25
par flaith
Merci Dri

Publié : mer. 21/mars/2007 19:27
par Dr. Dri
compatible avec les nombres négatifs, avec un tout pitit peu d'asm
Code : Tout sélectionner
bin = %10001000100010001000100010010100
Debug bin
While bin
Debug bin & 1
!shr dword [v_bin], 1
Wend
Dri
Publié : mer. 21/mars/2007 20:32
par flaith