PILE 32 BITS/64 BITS

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 27 févr. 2013 à 19:05
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 17 oct. 2013 à 10:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54997-pile-32-bits-64-bits

mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 4
17 oct. 2013 à 10:38
Bonjour,

Vous venez de ré-inventer ce que faisait le langage FORTH nativement.
http://fr.wikipedia.org/wiki/Forth_%28langage%29

Il existe un processeur dont le langage "assembleur" est le FORTH:
http://en.wikipedia.org/wiki/RTX2010
et
http://www.intersil.com/en/products/space-and-harsh-environment/rad-hard-digital/rh-microprocessors-and-peripherals/HS-RTX2010RH.html#0.html

Votre exemple en assembleur RTX2010:

4 8 *


Et c'est tout!

datasheet du RTX2010:
http://www.da.isy.liu.se/~mj/TSEA20/rtx2000.pdf

J'en ai eu un en main... Il cartonne pour les FFT (Fast Fourier Transform). Le RTX2010 équipe les TGV allemands (ICE) pour le contrôle des moteurs électriques.

A+
cs_parki Messages postés 75 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 25 mars 2019
27 févr. 2013 à 19:18
Pas de problème BruNews,je suis là pour apprendre.
je corrige la partie 64 bits et je reposte le tout rapidement.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 févr. 2013 à 19:05
Tu as testé tout cela (la partie x64) ?

Désolé mais je n'y vois quasi rien de bon.

Exemple:
;reservation de la pile pour les 4 QWORDS
;obligatoires (dans l'ordre RCX,RDX,R8,R9)
;plus l'adresse de retour RIP
;soit 5 QWORDS*8=40 octets

NIET !!! ce n'est pas le calcul du recul de RSP
RIP est pushé par le 'CALL', n'entre donc pas dans le calcul.
CALCUL:4 param 4*8 32
Ensuite on ajoute à 32 ce qu'il manque pour obtenir un multi de 8 qui ne soit pas multi de 16.
Pourquoi:
A son entrée, toute fonction s'attend à trouver un RSP aligné sur 8 et NON 16. C'est ce qui se passera si tu appliques ce que je viens d'expliquer car c'est bien RIP pushé par CALL qui t'aura mis en 8 non 16. Tout ceci est en autre indispensable pour l'utilisation des registres xmm.
Ex:
aFunc PROC
movdqa [rsp - 24], xmm6
aFunc ENDP

aFunc SAIT que [rsp - 24] est bien ALIGN16 sinon badaboum prog !!!
Rejoignez-nous