|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
[assembler] Come creare una libreria?
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?) P.S. mi è stato detto di usare il file make.exe ma come si usa? grazie ciao
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
Dimenticavo di dire che nelle procedure che ho creato i parametri sono passati tramite i registri
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
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 Codice HTML:
;########### 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: Codice HTML:
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 |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
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
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
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!!!
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:18.




















