|
|
|
![]() |
|
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: 03:01.