Comment je peux faire pour récupérer la valeur de top_estack() en nostub? Vu que c'est une variable globale ...
c'est bon, je vais essayer un truc à Paxal
movea.l $C8,a0 ; movea.l top_estack*4(a0),a0 ; jsr (a0)
gentilTimide64 Le 06/06/2003 à 12:11Edité par tails le 06/06/2003 à 12:14 non c'est une variable globale, pas une fonction
(en fait j'ai posé la question pour rie, mais c'était pour me rassurer)
On fait comment alors?
(Bon ben,c'est pas gagné, je crois que Tails et sa réputation sera obligé de se casser si ca continue)
Mais encore ?
(Je crois bien que l'on est dans le forum asm)
Je vais répondre de manière beucoup plus intelligent que toi : le site CPEV
(Ah la la, et dire que vous faites les durs)
Si tu veux, mais les ROMCALLS ne sont pas toutes appelées de la même manière en asm. D'où le probleme. Moi je pense plutot qu'il faudrait un move.l (a0),a0 au lieu du dernier jsr de jackiechan (p#6)
Et ton d0.w contient bien top_estack ? C'est pas une ROMCALL2 ? C'est pour ca que ma caltoche plantait
Donc en fait c'est
ESI top_estack(void) - et pas ESI top_estack-
C'est ca ?
c'est une variable, mais qui a une entree dans la table des rom_call
Nil Le 06/06/2003 à 15:29 Mais le mieux, c'est quand tu fais du basic avec des inclusions asm : ça te génère du fortran avec des includes cobol (c'est valable aussi - et ça c'est surprenant - pour des pregrammes Java avec des appels hardware [en hacks] : ça te génère du lisp avec des includes prolog)
C'est très fin...
Tails, top_estack est une variable. Pour avoir son contenu, tu fais (en supposant que la jump table est dans a5, ce qui est le cas quand tu définis OPTIMIZE_ROM_CALLS sur TIGCC):
movea.l 0x109*4(a5),a0
movea.l (a0),a0
Sinon, c'est:
movea.l 0xC8.w,a0
mova.l 0x109*4(a5),a0
movea.l (a0),a0
Là, je parle en TIGCC. Je ne connais pas CC / AS...
aze Le 07/06/2003 à 14:52 [cite]jackiechan a écrit :
Ça veut dire que la variable top_estack est directement dans la table des ROM_CALLs ?
[cite]
c l'adresse de la variable top_estack qui est dans la table des romscall, pas sa valeur
> movea.l 0x109*4(a0),a0 plutôt
En effet. J'ai tellement l'habitude d'écrire (a5) (en fait plutôt (%a5) ou (%%a5): je n'utilise que GNU as, donc il y a % ou %% selon que je fais de l'assembleur simple ou de l'assembleur avec opérandes C - je ne mets pas --register-prefix-optional)...
> c l'adresse de la variable top_estack qui est dans la table des romscall, pas sa valeur
Oui.
Link Le 08/06/2003 à 20:01 et c'est placé dans A0 parce que top_estack est un pointeur (je crois qu'il y a un typedef ESQ *ESI), un ESQ étant un unsigned(?) char...

Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.
Merci, en fait pour moi qui utilise "ams_c" il faut que je mette -4*top_estack(a0),a0
au lieu de 4*top_estack(a0),a0
Au fait, pourquoi l'equipe de la tigcc emploie des ".s" comme formats dans ses codes. (Le 68k Guide est incomplet) ?
cf la doc, c du gnu asm ...