salut a tous !
alors comment fait-on pour obtenir ,en assembleur un pointeur sur un fichier qui se trouve dans la vat?
il faut passer par LEA ?
est ce qu'on peut traiter des SYM_ENTRY en assembleur ?
toutes les interruptions couplé avec les fonctions
int compress_file(char* name) { asm(" move.l 4(%a7),%a0 clr.w -(%a7) move.l %a0,-(%a7) move.l 200,%a0 move.l 2572(%a0),%a0 jsr (%a0) addq.l #6,%a7 moveq #0,%d0 jsr ziplib@0005 "); }
compress(SYM_ENTRY *ptr) { asm(" move.b #0,d0 move.l 4(a7),a0 jsr ziplib::zipfile "); } void _main(void) { SYM_ENTRY *ptr = SymFindPtr(STM_STR("folder\file"),0); compress(*ptr); }
.text .even .globl compress compress: link.w %a6,#0 #APP move.l 8(%a6),%a0 move.b #0,8(%a6) jsr ziplib::zipfile //la y me dit que ca va pas #NO_APP unlk %a6 rts .text
Ximoon
: Dis-toi bien que tout ce que tu peux faire en C, tu peux le faire en assembleur.
bidoo :
euh oui je veux bien mais coment
bidoo
: oui mais là j'ai juste besoin de ca pour appeler une librairie de kernel,
Flanker :
je vais essayer de faire çaint compress_file(char* name) { asm(" move.l 4(%a7),%a0 clr.w -(%a7) move.l %a0,-(%a7) move.l 200,%a0 move.l 2572(%a0),%a0 jsr (%a0) addq.l #6,%a7 moveq #0,%d0 jsr ziplib@0005 "); }
bidoo :
arf desolé flanker je t'ai fait tourné en bourrique, excuse moi j'ai pas assez cherché par moi meme ...![]()
bon g trouvé la solution mais il me reste un probleme de syntaxe asm , keskiva pas ds le bloc d'asm ci dessous?
void compress(void *ptr)
{
asm("move.l %0,%%a0;"
: :"g"(ptr));
asm("move.b #0,%d0");
asm("ziplib::zipfile");
}
void _main(void)
{
SYM_ENTRY *pteur=SymFindPtr(SYMSTR("main\tetris"),0);
compress(HeapDeref(pteur->handle)); }
Flanker :
essaie :compress(SYM_ENTRY *ptr) { asm(" move.b #0,d0 move.l 4(a7),a0 jsr ziplib::zipfile "); }
Kevin Kofler :
Et on n'a pas besoin d'assembleur inline pour appeler ziplib, il suffit de déclarer la fonction en passage par registres (avec le bon nom, c'est-à-dire ziplib__0005).
#define USE_KERNEL #include <tigcclib.h> void compress(void *ptr) { asm("move.l %0,%%a0 move.b #0,%d0 jsr ziplib__0006" ::"g"(ptr)); ngetchx(); printf("ca a fonctionné\nl'erreur est aprés ! "); } void _main(void) { SYM_ENTRY *pteur=SymFindPtr(SYMSTR("main\che"),0); compress(HeapDeref(pteur->handle)); }
Mr Flanker
... int compress_file(char* name) {
asm(" ...
Mr Flanker
...compress_file(SYM_STR(name)); ...