Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [ASM] esempi con vettori?

    Ciao!

    mi chiedevo se qualcuno di voi conoscesse qualche sito o avesse qualche programma di esempio scritto in assembly per x86 che usa vettori per compiere operazioni del tipo:
    trovare la media dei valori contenuti in un vettore, ribaltare un vettore di caratteri etc...
    esercizi non molto complessi, giusto per capire come funziona la cosa con i vettori in asm...
    Ho cercato su google, ma non si trova molto!!!

    help me please!
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    Somma di un vettore di byte

    codice:
    	DOSSEG
    	.MODEL small
    	.STACK 10h
    
    	.DATA			; Nel Data Segment...
    TAB	db	01h, 0FFh	; Tabella di numeri
    LUN	EQU	$-TAB		; Lunghezza della tabella
    SOM	dw	?		; Somma tabella
    
    	.CODE			; Nel Code Segment...
    Inizio:	StartupCode
    
    ; Inizializzazione
    	MOV	AX , 0		; Inizializzazione somma a 0
    	MOV	CL , LUN	; Contatore dei numeri
    	LEA	BX , TAB	; Puntatore alla tabella
    
    ; Corpo del programma
    Ciclo:	CMP	CL , 0		; Verifica se ci sono numeri da sommare
    	JZ	FineCiclo	; Uscita dal ciclo, non ci sono altri numeri
    	ADD	AL , [BX]	; Parte bassa della somma
    	ADC	AH , 0		; Eventuale riporto
    	INC	BX		; Punta al numero successivo
    	DEC	CL		; Manca un numero in meno
    	JMP Ciclo		; Torna all'inizio del ciclo
    FineCiclo:			; Fine del ciclo
    
    ; Salvataggio risultato
    	MOV	[SOM] , AX	; Salva la somma della tabella		
    
    	ExitCode 0
    	END Inizio
    *********************************
    Andrea
    *********************************

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    conversione in maiuscolo di una stringa (vettore di byte (caratteri) in cui l'ultimo elemento è il $ così rispetta la convenzione DOS)

    codice:
    ; Segmentazione del DOS
    	DOSSEG
    ; Modello di memoria
    	.MODEL	small
    ; Memoria per lo stack
    	.STACK	100h
    
    ;------------------------------------------------------------------------------
    ; Data segment
    ;------------------------------------------------------------------------------
    	.DATA
    STR1	db	'ciAo a Tutti$'
    STR2	db	$-STR1 DUP (?)
    LMIN	EQU	'a'			; Limite inferiore
    LMAX	EQU	'z'			; Limite superiore
    DIFF	EQU	'A' - 'a'		; Differenza tra lettere minuscole e maiuscole
    
    ;------------------------------------------------------------------------------
    ; Code Segment
    ;------------------------------------------------------------------------------
    	.CODE
    Begin:	StartupCode			; Inizio del programma
    
    ; Inizializzazione dei registri
    	LEA	SI , STR1		; Punta all'inizio della stringa
    	LEA	DI , STR2		; Inizio della seconda stringa
    
    ; Algoritmo
    Ciclo:
    	MOV	AL , [SI]		; Prelevo il carattere
    	CMP	AL , LMIN		; Se non c'è Carry, è >= a
    	JC	NoMin			; Se salti, non è minuscola
    	CMP	AL , LMAX + 1		; Se c'è Carry, è <= z, ossia < z+1
    	JNC	NoMin			; Se salti, non è minuscola
    	; Lettera minuscola, da convertire
    	ADD	AL , DIFF		; Porta il carattere in maiuscolo
    NoMin:	MOV	[DI] , AL		; Salva il carattere (modificato quando necessario)
    	CMP	AL , '$'		; Vediamo se la stringa è finita
    	JZ	FineC			; Se salti, la stringa è finita
    	INC	DI			; Prossima posizione valida
    	INC	SI			; Prossimo carattere
    	JMP	Ciclo			; Torna al ciclo
    FineC:
    
    ; Fine del programma
    	ExitCode	0		; Corretta terminazione del programma
    	END		Begin		; Uscita dal programma

    unione insiemistica di due vettori

    codice:
    ; Segmentazione del DOS
    	DOSSEG
    ; Modello di memoria
    	.MODEL	small
    ; Memoria per lo stack
    	.STACK	100h
    
    ;------------------------------------------------------------------------------
    ; Data segment
    ;------------------------------------------------------------------------------
    	.DATA
    V1	db	2, 3, 4
    L1	EQU	$-V1
    V2	db	5, 4, 8
    L2	EQU	$-V2
    L3	EQU	L1 + L2 + 1
    V3	db	L3 DUP (?)
    
    ;------------------------------------------------------------------------------
    ; Code Segment
    ;------------------------------------------------------------------------------
    	.CODE
    Begin:	StartupCode			; Inizio del programma
    
    	MOV	AH , L1
    
    ; Copio il primo vettore nel terzo
    	LEA	SI , V1
    	LEA	DI , V3
    	INC	DI
    	MOV	CX , L1
    Copia:	MOV	AL , [SI]
    	MOV	BYTE PTR [DI] , AL
    	INC	SI
    	INC	DI
    	Loop 	Copia
    
    ; Analizzo il secondo vettore
    	MOV	CX , L2
    	LEA	SI , V2
    
    Sec:	MOV	AL , [SI]
    	MOV	DX , L1
    	LEA	BX , V1
    
    Cerca:	CMP	BYTE PTR [BX] , AL
    	JZ	Next
    	INC	BX
    	DEC	DX
    	Jnz	Cerca
    	; Non trovato
    	MOV	[DI] , AL
    	INC	AH
    	INC	DI
    
    Next:	INC	SI
    	Loop	Sec
    
    	MOV	[V3] , AH
    
    ; Algoritmo
    
    ; Salvataggio dei risultati
    
    ; Fine del programma
    	ExitCode	0		; Corretta terminazione del programma
    	END		Begin		; Uscita dal programma
    *********************************
    Andrea
    *********************************

  4. #4
    grazie Squall!!!


    e se ne volessi altri ? dove li potrei trovare ?

    mi servirebbero anche esempi di agganci tra moduli asm in programmi scritti in C e come gestire i parametri che vengono salvati nello stack...
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    x mettere l'asm in C dovresti usare la parola chiave ASM

    asm {
    ....
    ....
    }

    x quanto riguarda il secondo punto, intendi richiamare una routine che vuole i parametri dentro lo stack?
    *********************************
    Andrea
    *********************************

  6. #6
    quando una funzione in C ne richiama una scritta in asm salva nello stack prima tutti i parametri e poi la procedura in asm li prende uno ad uno e li gestisce con "BP + locazione di memoria desiderata".

    Più o meno so come funziona, ma mi piacerebbe vedere qualche altro esempio, magari con la spiegazione passo passo di quello che accade nello stack quando la funzione viene eseguita...

    Oltre a questo:

    codice:
    asm { 
    .... 
    .... 
    }
    c'era anche quello di usare la funzione scritta in asm come una libreria esterna al modulo scritto in C, mi interesserebbe di più capire come fare per usare questo metodo, cioè come faccio a dire che il file in C deve andare a cercare le funzioni nel file scritto in asm ? come lo compilo ?
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    uhm, no questo nn l'ho mai provato, non ti saprei aiutare :rollo: :rollo: , se trovo qualcosa cmq te lo posto
    *********************************
    Andrea
    *********************************

  8. #8
    io ho capito più o meno come fare, ma non ho capito con che opzione compilare il file asm per usarlo come libreria...

    cmq va beh... se trovi qualcosa fammelo sapere
    Grazie!
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    uhm, nn puoi compilarlo con il compilatore asm e includere l'obj?
    *********************************
    Andrea
    *********************************

  10. #10
    si in effetti l'idea che avevo era questa...

    cioè tasm nome_file.asm

    e creo il file oggetto...

    però poi non so come collegare il file nome_file.obj all'interno del file scritto in C...

    #include < nome_file.obj >



    o devo compilare il file C usando qualke opzione che permetta di includere il file oggetto in asm ?
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

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.