frizzo28
21-02-2007, 16:31
Ciao a tutti come complilatore uso il TASM (Turbo assembler).
Dovrei creare una libreria che si sia in grado di
1 - Aquisire un numero a + cifre
2 - Stamapare un numero a + cifre
Le procedure le ho scritte e funzionano correttamente... il problema che non ho idea di come crare una libreria esterna finora io copiavo e incollavo in coda ai miei programmi le procedure e le usavo.
- Qundi come faccio a creare una libreria? Qual'è la sintassi che devo usare?
- Nei programmi che faccio come richiamo la libreria (il corrispondente del #include<> del C?):muro: :muro:
P.S. mi è stato detto di usare il file make.exe ma come si usa?
grazie
ciao
frizzo28
21-02-2007, 17:20
Dimenticavo di dire che nelle procedure che ho creato i parametri sono passati tramite i registri
Ciao a tutti come complilatore uso il TASM (Turbo assembler).
Dovrei creare una libreria che si sia in grado di
1 - Aquisire un numero a + cifre
2 - Stamapare un numero a + cifre
Le procedure le ho scritte e funzionano correttamente... il problema che non ho idea di come crare una libreria esterna finora io copiavo e incollavo in coda ai miei programmi le procedure e le usavo.
- Qundi come faccio a creare una libreria? Qual'è la sintassi che devo usare?
- Nei programmi che faccio come richiamo la libreria (il corrispondente del #include<> del C?):muro: :muro:
P.S. mi è stato detto di usare il file make.exe ma come si usa?
grazie
ciao
segui questi passi:
nel file .asm devi includere la tua lib con questa dichiarazione:
;################ FILE INCLUDE #################
INCLUDE okay_ex.inc ; libreria di procedure extern
il file lib in pratica per il Tasm è un file con estensione .inc il mio per esempio è cosi:
;Okay_m.inc
;;;;;;;;;;;;;;;;;;;;;;;; MACRO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;; REGISTRA STRINGHE ;;;;;;;;;;;;;;;;;;;;;;;;
RecordSTR macro stringha
xor cx,cx
mov cx,20
mov dx,OFFSET stringha + 2
mov ah,40h ; append sringa
int 21h
xor cx,cx
mov cx,2 ; dimensione append, 2 byte
mov dx,OFFSET Acapo ; 10+13
mov ah,40h ; append sringa
int 21h ; call dos function
endm
DisplayFloat macro Number, places
;displays a floating point double word sized variable on the screen
lea bx, number
mov cx, places
call ftoa
endm
;;;;;;;;;;;;;;;;;;;;;; FINE MACRO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
...salvato come .inc e queste 2 procedure sono linkate nella compilazione all'exe. Ora da exe creato come fai call DisplayFloat esegue la procedura della lib che è appunto il file .inc dichiarato come detto all'inizio nel file .asm
la lib è un semplice file .asm
;########### direttive per l'assembler ############
.386 ; set di istruzioni a 32 bit
;################ segmento dati ###################
DATASEGM SEGMENT PARA PUBLIC USE16 'DATA'
public message
Message db "Premi un tasto...",'$'
DATASEGM ENDS
;################ fine segmento dati ###################
;############### segmento codice ##################
CODESEGM SEGMENT PARA PUBLIC USE16 'CODE'
public clear_screen, pause, setposcurs
ASSUME cs:CODESEGM,ES:CODESEGM,SS:CODESEGM,DS:CODESEGM
;------------- inizio blocco procedure ------------
CLEAR_SCREEN PROC ; funziona quasi come il com CLS del DOS
PUSH AX
PUSH BX
PUSH CX
PUSH DX
XOR AL,AL ;Cancella intera finestra
XOR CX,CX ;L'angolo superiore sinistro è a (0,0)
MOV DH,24 ;La riga inferiore dello schermo è la 24
MOV DL,79 ;Il limite destro è la colonna 79
MOV BH,7 ;Utilizza l'attributo normale per spazi
MOV AH,6 ;Richiama la funzione SCROLL-UP
INT 10h ;Cancella la finestra
MOV AH,06 ; funzione SCROLL UP
MOV AL,0 ; numero di linee 0
MOV BH,01110000b ; attributo di riemp.
;MOV BH,4 ; attributo di riemp
MOV CH,0 ; riga angolo alto sn 0
MOV CL,0 ; col. angolo alto sn 0
MOV DH,24 ; riga angolo basso dx 24
MOV DL,79 ; col. angolo basso dx 79
INT 10h ; interruzione BIOS
POP DX
POP CX
POP BX
POP AX
RET
CLEAR_SCREEN ENDP
Pause PROC
xor bx,bx
MOV AX,seg Message
MOV DS,AX
MOV DX,OFFSET Message
MOV AH,7
int 21h
PUSH AX
PUSH BX
PUSH CX
PUSH DX
XOR AL,AL ;Cancella intera finestra
XOR CX,CX ;L'angolo superiore sinistro è a (0,0)
MOV DH,24 ;La riga inferiore dello schermo è la 24
MOV DL,79 ;Il limite destro è la colonna 79
MOV BH,7 ;Utilizza l'attributo normale per spazi
MOV AH,6 ;Richiama la funzione SCROLL-UP
INT 10h ;Cancella la finestra
POP DX
POP CX
POP BX
POP AX
RET
Pause ENDP
SetPosCurs proc
push bx ;
push ax ;
mov ah,2 ;
mov bh,0 ;
int 10h ;
pop ax ;
pop bx ;
ret ;
SetPosCurs endp
;-------------- fine blocco procedure -------------
CODESEGM ENDS
;############### fine segmento codice ##################
END
per linkare il tutto fai così in un file .bat:
d:\archivio\tasm\bin\tasm /zi /l d:\archivio\tasm\batch16\template\template
d:\archivio\tasm\bin\tasm /zi /l d:\archivio\tasm\batch16\template\okay_lib
d:\archivio\tasm\bin\tlink /v d:\archivio\tasm\batch16\template\template okay_lib
rem d:\archivio\tasm\bin\td d:\archivio\tasm\batch16\template\template
frizzo28
21-02-2007, 20:53
Grazie x la risposta solo che come dici tu ogni volta che compili un programma lui si deve ricompilare tutte le procedure giusto? è come fossero scritte tutte nel programma anche se poi nn sono usate.. Io ivece dovrei fare un file .lib (o simile)
gia compilato che viene incluso nel file in qualche modo... e vengono usate le procedure al suo interno...
mi è stato detto di usare il make.exe della borland ma nn ho idea da dove cominciare...
grazie ciao
frizzo28
24-02-2007, 17:48
Grazie a tutti ho risolto così:
ho fatto un normalissimo programma però di sole procedure
ho dichiarate le procedure far
subbito dopo il .CODE ho scritto
public nomeprocedura1
public nomeptrocedura2 etc
ho compilato con tasm nomefile
ho creato la libreria con: tlib libreria nomefile.obj
nei programmi che creo non devo far altro che scrivere
extrn nomeprocedura
poi tasm nomeprogramma e poi ovviamente tlink nomeprogramma libreria.lib
Evvai!!!:D :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.