De l'ASM dans mon code PB

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

De l'ASM dans mon code PB

Message 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 ?
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message 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
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

haaaa, merci beaucoup.
Pour l'instant, tout va bien. :wink:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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:
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.

:)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Ou alors il serait bien qu'un modo déplace le topic...

Dri
Répondre