Code : Tout sélectionner
Macro PeekULong(adr)
(PeekA(adr) + PeekA(adr + 1) << 8 + PeekA(adr + 2) << 16 + PeekA(adr + 3) << 24)
EndMacro
mon_quad.q = PeekULong(*adresse)
Code : Tout sélectionner
Macro PeekULong(adr)
(PeekA(adr) + PeekA(adr + 1) << 8 + PeekA(adr + 2) << 16 + PeekA(adr + 3) << 24)
EndMacro
mon_quad.q = PeekULong(*adresse)
Code : Tout sélectionner
Macro PeekULong(adr)
PeekI(adr) & $FFFFFFFFFFFF
EndMacro
Code : Tout sélectionner
Macro q_t_
"
EndMacro
Macro __HL(__HL,_pr="$")
q_t_#__HL#=q_t_+_PR+RSet(Hex(PeekL(@__HL),#PB_Long),8,"0")+" "
EndMacro
Macro PeekULong(adr,_vq_)
_vq_.q=PeekA(adr+3)<<24
_vq_+(PeekA(adr)+PeekA(adr+1)<<8+PeekA(adr+2)<<16)
EndMacro
Structure l_n_s
StructureUnion
Vc.c[4]
Vl.l
EndStructureUnion
EndStructure
;; mise au point
Debug "mise au point"
Ul.l_n_s
Ul\vl=2147483647
; Debug mp_h(Ul,32,222)
Debug Hex(ul)
Debug Ul\vl
peekulong(Ul,vqq)
Debug vqq
Ul\vl=$12345678
; Debug mp_h(Ul,32,222)
Debug __HL(ul)
Debug Ul\vl
peekulong(Ul,vqq)
Debug vqq
Debug "essai avec long non signé"
; essai avec long non signé
Ul\vl=2147483647
; Debug mp_h(Ul,32,222)
Debug __HL(ul)
peekulong(Ul,vqq)
Debug vqq
Debug "pour avoir le plus grand nombre long non signé il faut placer $ff en add+3 et l'on obtient le double du signé+1"
; pour avoir le plus grand nombre no signé il faut placer $FF en add+3
ul\vc[3]=255
; Debug mp_h(Ul,32,222)
Debug __HL(ul)
peekulong(Ul,vqq) ; formule d'origine mauvaise
Debug vqq
Code : Tout sélectionner
Macro q_t_
"
EndMacro
Macro __HL(__HL,_pr="$")
q_t_#__HL#=q_t_+_PR+RSet(Hex(PeekL(@__HL),#PB_Long),8,"0")+" "
EndMacro
Macro __HQ (__HQ,_pr="$")
q_t_#__HQ#=q_t_+_PR+RSet(Hex(PeekQ(@__HQ),#PB_Quad),16,"0")+" "
EndMacro
Structure l_n_s
StructureUnion
Vc.c[4]
Vl.l
Vq.q
EndStructureUnion
EndStructure
;; mise au point
Debug "mise au point"
Ul.l_n_s
VVq.Q
Ul\vl=2147483647
; essai avec long non signé
Debug __HL(ul)
; peekulong(Ul,vqq)
; Debug vqq
Debug ul\Vq
Debug "pour avoir le plus grand nombre long non signé il faut placer $ff en add+3 et l'on obtient le double du signé+1"
; pour avoir le plus grand nombre no signé il faut placer $FF en add+3
ul\vc[3]=255
Debug "*************** Lecture d'un nombre en long non signé ******************"
Debug "Si l'on veut lire le plus grand nombre long non signé il suffit de le placer dans une zone signée plus grande"
CopyMemory(Ul, @VVq, 4)
Debug __hq(vvq)
Debug vvq
Code : Tout sélectionner
*mem = AllocateMemory(10)
PokeQ(*mem, $F00000FF)
Define q.q
#t = 10000000
CopyMemory(*mem, @q, 4)
Debug q
time = ElapsedMilliseconds()
For i = 1 To #t
CopyMemory(*mem, @q, 4)
Next
Debug ElapsedMilliseconds() - time
Macro PeekULong(adr)
PeekL(adr) & $FFFFFFFF
EndMacro
q = PeekULong(*mem)
Debug q
time = ElapsedMilliseconds()
For i = 1 To #t
q = PeekULong(*mem)
Next
Debug ElapsedMilliseconds() - time
Macro PeekULong_(adr)
(PeekA(adr) + PeekA(adr + 1) << 8 + PeekA(adr + 2) << 16 + PeekA(adr + 3) << 24)
EndMacro
q = PeekULong_(*mem)
Debug q
time = ElapsedMilliseconds()
For i = 1 To #t
q = PeekULong_(*mem)
Next
Debug ElapsedMilliseconds() - time
Merci à vous !4026532095
734 ms
4026532095
688 ms
4026532095
844 ms
Code : Tout sélectionner
Structure l_n_s
StructureUnion
Vc.c[4]
Vl.l
Vq.q
EndStructureUnion
EndStructure
mem.l_n_s
*mem = @mem
; *mem=mem ; même adresse que l'instruction précédente
PokeQ(*mem, $F00000FF)
Debug "**** ci-dessous sans transfert et sans conversion avec les structures "
Debug mem\vq
Debug PeekQ(*mem)
Define q.q
CopyMemory(*mem, @q, 4)
Debug q
Macro PeekULong(adr)
PeekL(adr) & $FFFFFFFF
EndMacro
q = PeekULong(*mem)
Debug q
Macro PeekULong_(adr)
(PeekA(adr) + PeekA(adr + 1) << 8 + PeekA(adr + 2) << 16 + PeekA(adr + 3) << 24)
EndMacro
q = PeekULong_(*mem)
Debug q
Code : Tout sélectionner
Structure l_n_s
StructureUnion
Vc.c[4]
Vl.l
Vq.q
EndStructureUnion
EndStructure
mem.l_n_s
*mem=@mem
; *mem=mem ; même adresse que l'instruction précédente
PokeQ(*mem,$F00000FF)
Debug "**** ci-dessous sans transfert et sans conversion avec les structures "
Debug mem\vq
Debug PeekQ(*mem)
Debug Val("$"+ Hex(PeekL(*mem),#PB_Long))
Define q.q
CopyMemory(*mem, @q, 4)
Debug q
Macro PeekULong(adr)
PeekL(adr) & $FFFFFFFF
EndMacro
q = PeekULong(*mem)
Debug q
Macro PeekULong_(adr)
(PeekA(adr) + PeekA(adr + 1) << 8 + PeekA(adr + 2) << 16 + PeekA(adr + 3) << 24)
EndMacro
q = PeekULong_(*mem)
Debug q