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
erase timer.lib
c:\tasm\bin\tlib /0 timer +timer, timer
tcc -a -c test
tlink test,test,,timer /s /d
:notok
pause
Si quelqu'un sait ou je me suis planté, merci d'avance pour votre aide. (je cherche en fait à timer un code en mode réel sous dos).-