Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 58
  1. #1

    [ASM] Interfacciare assembly e C

    Non ho trovato nessun tutorial nel sito, qualcuno ha qualche link da consigliarmi a proposito dell'argomento? Vorrei poter utilizzare delle routine in assembli all'interno di programmi scritti in C/C++. Qualcosa che va oltre l'inline assembly, vorrei poter linkare insieme listati scritti nei due linguaggi, di cui quello scritto in C sarebbe il principale e quello scritto in asm continene delle procedure.
    Mi servirebbe un piccolo esempietto pratico.

  2. #2
    Uso TASM e Turbo c.

  3. #3
    Qui puoi scaricarti l'ottimo tutorial sull'Assembly del Dr Paul Carter, c'è anche la versione in italiano , in cui al capitolo 4 illustra come interfacciare l'Assembly al C . Saluti

  4. #4
    Mi sarà sicuramente utile, grazie! Il problmea è che negli esempi viene utilizzata la sintassi per NASM e per DJGPP, mi ci vorrà un bel po' per capire tutto!

  5. #5
    E' da molto che non uso tasm e turbo cpp ...
    Se non erro devi fare nel .asm un public _nomefunzione come near
    Nel codice c/cpp ci fai un extern "C" di nomefunzione e compili con tcc che è presente in bin di tc ...
    Prova
    PS: ricorda che i parametri vengono passati al contrario di come li passi nel codice c/cpp, ossia la push dell'ultimo parametro è la prima ad essere effettuata
    Experience is what you get when you don’t get what you want

  6. #6
    Esempietto pratico? altrimenti divento matto..
    Sono sulla buona strada, grazie all'asm..

  7. #7
    codice:
    File *.cpp
    #include <iostream.h>
    #include <stdlib.h>
    
    extern "C" {
    void far scambia(char riga1,char riga2,char colore);
    }
    
    int main()
    {
       char col = 0x8b;
       randomize ();
       do
        {
          char carattere;
          
    	  asm{
    			mov ah,7
    			int 21h
    			mov carattere,al
             }
    		 
        if (carattere != 27)
    	   {
    	   char riga1, riga2;
    	   riga1 = random(25);
    	   riga2 = random (25);
    	   while (riga1 == riga2)
    	      riga2 = random (25);
           scambia (riga1, riga2,col);
    	
    	   asm{
    		 	rol col,1
    	      }
    	 
    	   }
        else
    	  break;
        }
       while (1492);
     return 0;
    }
    codice:
    File *.asm
    	.model tiny
    	.stack 50
    	.code
    	public _scambia
    
    _scambia proc far
    	push bp
    	mov bp,sp
    	push ax
    	push bx
    	push cx
    	push es
    	push si
    	push di
    	
    	mov ax,0b800h
    	mov es,ax
    
    	mov al,[bp+6]
    	mov ah,0
    	
    	push ax
    	call riga
    	pop cx
    
    	mov si,ax
    
    	mov al,[bp+8]
    	mov ah,0
    	
    	push ax
    	call riga
    	pop cx
    
    	mov di,ax
    	
    	mov ah,[bp+10]
    	mov bh,ah
    
    	mov cx,80
    cicloscambia:
    	  mov bl,es:[si]
    	  mov al,es:[di]
    	  mov es:[si],ax
    	  mov es:[di],bx
    	  add si,2
    	  add di,2
    	  loop cicloscambia
    
    	
    	pop di
    	pop si
    	pop es
    	pop cx
    	pop bx
    	pop ax
    	pop bp
            retf
    	endp
    
    riga proc near
    	push bp
    	mov bp,sp
    	push bx
    	
    	mov ax,[bp+4]
    	mov bl,160
    	mul bl
    	
    	pop bx
    	pop bp
    	ret
    	endp
    
    	end
    Ricorda di compilare con tcc in tc\bin\
    Experience is what you get when you don’t get what you want

  8. #8
    Grazie! Anche se questo è C++ e non C va bene lo stesso! Mi sembra che in C invece che extern "C" basta mettere solo extern . Ora lo provo e poi vi faccio sapere!
    Comunque mi sa che imparerò la sintassi NASM così da poter approfondire l'argomento studiando il tutorial passatomi da king64.

  9. #9
    Ah si ...
    Cmq serviva solo per dare l'idea ...
    è il primo prog che ho trovato nel mio HD ...
    Experience is what you get when you don’t get what you want

  10. #10
    Una curiosità. Secondo voi qual'è la sintassi assembly più diffusa? TASM, NASM o altro?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.