PDA

View Full Version : HELP programma Assembly


csvqkm
25-06-2004, 00:22
Salve a tutti , sono un novello nel campo della programmazione e stò tentando di affacciarmi all' assembly , ho trovato un ottimo tutorial ma ad un tratto riporta un esempio di codice che non riesco a linkare.
Il compilatore utilizzato è il tasm 5. Il codice viene correttamente compilato ma non riesco a linkarlo mi dice "Fatal: no program entry point"

Di seguito il codice che tento invano di utilizzare:
; TUT4.ASM

.MODEL small ; indica al compilatore il modello di memoria da usare

.STACK 100h ; dimensiona lo Stack



.DATA ; inizio del segmento dati

Messaggio DB "Salve Mondo", 13, 10, '$' ;dichiarazione del messaggio



.CODE ; inizio del segmento di codice

mov ax, SEG Messaggio ; ax = indirizzo del Segmento Dati

mov ds, ax ; ds = ax

mov dx, OFFSET Messaggio ; ds = offset del Segmento Dati

mov ah, 09h ; ah = 09h

int 21h ; chiamata all'interrupt DOS

mov ah, 4Ch ; ah = 4Ch

int 21h ; chiamata all'interrupt DOS

END ; fine del programma


Per favore nn fatemi mollare prima ancora di iniziare :rolleyes:

AnonimoVeneziano
25-06-2004, 00:45
Che linker usi?

Ciao

csvqkm
25-06-2004, 02:12
Uso il tlink del pacchetto della borland tasm 5.
Nel codice nn sembrano esserci errori eppure il linker funziona l'ho provato con alcuni programmi di esempio della borland.

App posso usare anche un altro linker diverso da quello incluso nel pakketto della borland?

cionci
25-06-2004, 02:29
Metti START: dopo .CODE

repne scasb
25-06-2004, 10:00

repne scasb
25-06-2004, 10:02

csvqkm
25-06-2004, 11:03
Originariamente inviato da repne scasb
Stai tentando di linkare un vecchio codice (<1992) con un nuovo linker (TLINK.EXE del TASM 5). Ci sono due sistemi per risolvere:

1) Mantieni la vecchia sintassi e utilizzi un linker obsoleto (TLINK del TASM 2).
2) Devi specificare l'entry point di CS.

Nel caso 2) devi modificare il codice nel seguente modo:


.MODEL small
.STACK 100h

.DATA

Messaggio DB "Salve Mondo",13,10,'$'

.CODE

quello_che_ti_pare: ; DA AGGIUNGERE

mov ax,@data
mov ds,ax
mov dx,OFFSET Messaggio
mov ah,9h
int 21h
mov ah,4Ch
int 21h

END quello_che_ti_pare ; DA MODIFICARE



Grazie a tutti applicando questa modifica funziona ma vorrei saper il motivo per cui senza nn va.
Se ho ben capito bisogna necessariamente specificare un etichetta!?

cionci
25-06-2004, 11:04
Originariamente inviato da repne scasb
Non basta. Non solo devi dichiarare l'entry point, ma devi anche chiuderlo con END START.
Giusto ;)

cionci
25-06-2004, 11:05
Originariamente inviato da csvqkm
Grazie a tutti applicando questa modifica funziona ma vorrei saper il motivo per cui senza nn va.
Se ho ben capito bisogna necessariamente specificare un etichetta!?
Perchè la prima etichetta nel segmento codice viene presa come entry point...

C'è un po' in tutti gli assemblatori questa cosa...

csvqkm
25-06-2004, 11:48
Ok grazie mille a tutti ;)