Création d'une lib sous tasm et linkage avec du code tc avec tlink
rdany62
Messages postés14Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention12 février 2016
-
8 oct. 2009 à 13:16
rdany62
Messages postés14Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention12 février 2016
-
9 nov. 2009 à 12:42
Bonjour,
Je cherche à créer une librairie statique avec tasm et la lier avec un code écrit avec turbo c. tout ce passe bien (assemblage, compilation et linkage), mais à l'exécution (dans une invite de commande sous WinXP), j'ai un plantage du type 'le programme XXX a utilisé une instruction invalide à l'adresse machin etc...'. Après test sous turbo debugger, le code C appelle bien le code assembleur, qui lors du ret (j'ai aussi essayé avec retf et retn) renvoie vers autre chose que mon code C. Je me demande si je n'ai pas merdouillé un tantinet avec la pile ou le modèle mémoire...
Voici le code C (test.c):
#include <stdio.h>
extern void cdecl testp(void);
int main(void)
{
/*printf("Appel de testp().");*/
testp();
return 0;
}
Le code asm (timer.asm):
TITLE Timer
.model small
.stack 100h
.data
.code
start:
public _testp
_testp proc __CDECL__
push bp
mov bp,sp
mov ax, 03h
int 10h
xor ax, ax
int 16h
pop bp
ret
_testp endp
end
Le batch utilisé pour compiler, etc... (make.bat)
@echo off
set path=c:\tasm\bin;%path%
set path=c:\tc;%path%
c:\tasm\bin\tasm timer.asm /mx
rem /z /zn
if not %errorlevel% ==0 goto :notok
rdany62
Messages postés14Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention12 février 2016 9 nov. 2009 à 12:42
Bonjour,
Je te remercie de ta réponse. J'en ai discuté avec l'un de mes enseignants, Visiblement, le main() de la source C est appelée par le DOS, qui appelle à son tour testp(). Mon enseignant m'a fourni une solution, mais n'ayant plus Internet chez moi pour cause de déménagement, et n'ayant pas les sources sur moi aujourd'hui, je ne peux les poster. je le ferais cependant assez vite, d'autant plus que maintenant çà marche (bien qu'uniquement en modèle large, mais bon...). A très bientôt donc !