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
c'est vraiment compilé comme ça du C
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)); ...