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

  1. 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