Page 1 sur 1

De l'ASM dans mon code PB

Publié : mar. 19/juil./2005 9:07
par kelly
Regardez ca :

Code : Tout sélectionner

Dim n64.b(50)
...
...
...
X=n64(7)
Ce genre de code, je souhaite l'ecrire en partie en ASM. Mais si je garde le Dim en PB, comment transformer le "X=n64(7)" ?
Plus clairement, comment mettre dans EAX (EAX ??) le debut du tableau octal puis regarder ce qu'il y a dans ce tableau a EAX+deplacement ?

Publié : mar. 19/juil./2005 9:38
par fweil
kelly,

Voici une piste pour répondre à ta question :

Code : Tout sélectionner

Result.l

Dim n64.b(50)
n64(7) = 23
X=n64(7)
Debug X

;
; Une façon de prendre l'adresse du bon élément est de prélever celle-ci avec l'attribut de variable @
;
Address = @n64(7)
!  MOV     eax, dword [v_Address]
!  MOV     ebx, [eax]
!  MOV     dword [v_Result], ebx

Debug Result

;
; Dans PureBasic, l'adresse de départ d'un tableau est stockée dans une variable a_Nom_du_tableau
;
!  MOV     eax, dword [a_n64]
!  ADD      eax, 7
!  MOV     ebx, [eax]
!  MOV     dword [v_Result], ebx

Debug Result
J'imagine que cela ne répondra à tout dans le cadre d'un développement de programme, alors reviens avec la suite des questions.

Slts

Publié : mar. 19/juil./2005 10:41
par kelly
haaaa, merci beaucoup.
Pour l'instant, tout va bien. :wink:

Publié : mar. 19/juil./2005 13:13
par Anonyme2
Encore une petite précison

tu peux utiliser les registres eax et edx sans souci.

Pour les autres, si tu utilises des commandes PB dans ta procedure, mieux vaut les sauvegarder avant ta routine et les restituer après ta routine et/ou l'appel de fonction PB voire de fonctions de libs externes.

Essaye de poster tes messages sur l'ASM dans la section ASM du forum :wink:

Publié : mar. 19/juil./2005 15:27
par kelly
Une erreur que je n'arrive pas a corriger.
La partie ASM doit multiplier 2 registres 8 bit et ecrire le resultat dans AX :

Code : Tout sélectionner

Result.b
Resulta.w

Address = @n64(i) 
!  MOV     ebx, dword [v_Address] 
!  MOV     al, [ebx] 

Address = @i1
!  MOV     ebx, dword [v_Address] 
!  MOV     dl, [ebx]
!  MOV     ah, 0
!  MUL     dl                         ; je pense que l'erreur est la
!  MOV     [v_Resulta], ax     ; ou la

i2.w= Resulta

Debug ("====")
Debug i2
i2=n64(i)*i1                        ; la vrai valeiur de i2
Debug i2

Publié : mar. 19/juil./2005 16:01
par nico
Kelly,

les questions portant sur l'assembleur doivent être postées dans la section ASM du Forum; cette section est récente, ce serait bien de l'utiliser.

Merci de poursuivre cette discussion dans la section ASM.

:)

Publié : mar. 19/juil./2005 18:11
par Dr. Dri
Ou alors il serait bien qu'un modo déplace le topic...

Dri