Integrer mes fonctions ASM en C??

Francois Castoguay -  
 mo.by -
Bonjours j'aimerais savoir comment utiliser mes fonction asm en C, car je me suis fait une petit fonction style putpixel et j'aimerais l'utiliser dans mes programme C. J'aimerais adapter ce code pour pouvoir utiliser les variables de mon code C pour déterminer l'emplacement du pixel aulieu de mettre des constantes dans le code:
----------------------------------------------------------------------------
mov ax,0a000h ;met l`addresse de début de mémoire vidéo dans ax
mov es,ax ;pour la transféré dans l`extra segment
mov ax,100 ; valleur de y dans ax
mov bx,100 ; valleur de y dans bx
shl ax,8 ; multiplie y par 256
shl bx,6 ; multiplie y par 64
add ax,bx ; add y * 256 + y * 64 (pour faire 320*y)
add ax,160 ; add x (car offset = 320*y+x)
mov di,ax ; mettre dans le destination index
mov al,1 ; choisir la couleur désirer de la palette dans al
mov es:[di],al ; mettre la couleur a l`addresse es:[di]
----------------------------------------------------------------------------

1 réponse

mo.by
 
Je ne l'ai jamais fait avec le C, mais je suppose que c'est pareil que pour le fortran. Il faut passer l'adresse des paramètres par la pile.
Exemple: du sous programme call ADAT(TAB) qui récupère la date du calculateur.
TAB est un tableau de 3 entiers sur 2 octets:
pile struc
savbp dw ?
savds dw ?
retour dd ?
tab dd ?
finpil dd ?
pile ends
cgroup group kmsl
kmsl segment public 'code'
assume cs:cgroup
public adat
adat: proc far
push bp
push ds
mov bp,sp
mov ah,2Ah
int 21h
lds di,[bp].tab
mov word ptr [di+4],cx ; valeur de l'année
xor ax,ax
mov al,dh
mov word ptr [di+2],ax ; valeur du mois
mov al,dl
mov word ptr [di],ax
pop ds
pop bp
ret finpil-retour-4
adat endp
kmsl ends
end

amicalement Olivier
0