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 :D (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

Code : Tout sélectionner

bin = %10010100

While bin
  Debug bin & 1
  bin >> 1
Wend
Dri

Publié : mer. 21/mars/2007 19:25
par flaith
Merci Dri :D

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
Image