Page 1 sur 1

Convertir un Byte en Word

Publié : dim. 30/avr./2006 19:51
par SPH
Imaginez la valeur "Look.b" qui lit le Byte 'A2'. Il s'agit de -94 mais si les bits correspondants etaient dans un Word, il s'agirait de 162.
Alors ma question est : comment passer la valeur absolue d'un Byte dans un Word ?

Moi, j'ai trouvé ceci :

Code : Tout sélectionner

look2.w=-look.b!%11111110
Y a t'il mieux ? :?

Publié : dim. 30/avr./2006 20:00
par Flype
va voir ici http://purebasic.hmt-forum.com/viewtopi ... highlight=

il y a MakeWord() un peu plus bas... :wink:

Publié : dim. 30/avr./2006 20:04
par AWEAR
Maintenant que je comprend un peu mieux l'assembleur, je proposerai comme ca.

Code : Tout sélectionner

x.b = -92
y.w
!mov al, [v_x]
!mov [v_y], ax
Debug y
Le problème est que tu dis que le résultat doit être 162, que je trouve 166 avec ta méthode, et 164 avec la mienne.

Publié : dim. 30/avr./2006 20:11
par SPH
AWEAR a écrit :Maintenant que je comprend un peu mieux l'assembleur, je proposerai comme ca.

Code : Tout sélectionner

x.b = -92
y.w
!mov al, [v_x]
!mov [v_y], ax
Debug y
Le problème est que tu dis que le résultat doit être 162, que je trouve 166 avec ta méthode, et 164 avec la mienne.
pour ta methode, je propose de rajouter apres 'y.w' :

Code : Tout sélectionner

!xor  ax, ax
ou (plus rapide) :

Code : Tout sélectionner

!xor  ah, ah
J'ai corrigé mon premier post car en recopiant, j'ai mis -92 alors que c'etait -94 (A2 en hexa)

Publié : dim. 30/avr./2006 20:30
par flaith
ou

Code : Tout sélectionner

x.b = -92
y.w = x & 255
Debug y

Publié : dim. 30/avr./2006 20:33
par KarLKoX
flaith a écrit :ou

Code : Tout sélectionner

x.b = -92
y.w = x & 255
Debug y
J'ai toujours utilisé cette méthode, elle est rapide et me convient comme cela :)

RESULTATS

Publié : dim. 30/avr./2006 20:59
par SPH

Code : Tout sélectionner

x.b = -92 
y.w 

;Goooooooooooo 
temps = GetTickCount_() 
For chrono = 1 To 100000000
;Goooooooooooo 



;STOOOOOOOOOOP 
Next :temps = GetTickCount_() - temps 
Debug ";Le temps mis est de " + Str(temps) + "ms"; : End;+T+I+M+E+R+ 
;STOOOOOOOOOOP 
; R E S U L T A T S (testé 2 fois) :

; SPH
; y.w=-x.b!%11111110
;Le temps mis est de 8156ms
;Le temps mis est de 8188ms


; AWEAR (grand vainqueur)
; !mov al, [v_x]
; !mov [v_y], ax
;Le temps mis est de 4031ms
;Le temps mis est de 3969ms

; !xor ah, ah
; !mov al, [v_x]
; !mov [v_y], ax
;Le temps mis est de 3812ms
;Le temps mis est de 3766ms

; !xor ax, ax
; !mov al, [v_x]
; !mov [v_y], ax
;Le temps mis est de 3782ms
;Le temps mis est de 3828ms

; flaith & KarLKoX
; y.w = x & 255
;Le temps mis est de 7390ms
;Le temps mis est de 7500ms

Publié : dim. 30/avr./2006 22:08
par AWEAR
Tadam, Awear vainqueur par K.O :lol:

Publié : lun. 01/mai/2006 2:48
par Flype
attention SPH pour faire un speedtest il ne faut jamais activer le debugger sans quoi les résultats sont pas forcement realistes, surtout lors de test PB vs ASM.

utilise juste un MessageRequester() à la place du Debug Str(temps) + "ms".

:wink:

Publié : lun. 01/mai/2006 8:45
par SPH
Debuggueur desactivé :


; R E S U L T A T S (testé 2 fois) :

; SPH
; y.w=-x.b!%11111110
;Le temps mis est de 1375
;Le temps mis est de 1469


; AWEAR (grand vainqueur quand meme)
; !mov al, [v_x]
; !mov [v_y], ax
;Le temps mis est de 829
;Le temps mis est de 797


; flaith & KarLKoX
; y.w = x & 255
;Le temps mis est de 1266
;Le temps mis est de 1188

Publié : lun. 01/mai/2006 17:50
par Fred
le '; !xor ah, ah' est obligatoire, sinon il peut y avoir des problemes car mov al,[xx] ne change pas la valeur de ah.

Publié : lun. 01/mai/2006 17:54
par Dr. Dri
Et on peut avoir une estimation pour l'arrivée des nombres non signés en PB ?

Dri ^^

Publié : mar. 02/mai/2006 21:52
par Fred
Ce n'est pas au programme pour l'instant.