Kleine Frage zu PUBLIC, EXTRN und GLOBAL.
-
tag'chen, *indeckung geht*
also hab mich langsam mal soweit im tutorial vorgearbeitet das ich bei dem Geltungsberei von Variablen angekommen bin.
bis hierhin muss ich sagen war eigentlich auch alles sehr schön beschrieben, fooe das geht auch noch weiter so
aber ein wundert mich jetzt:PUBLIC
Um eine Variable für andere Programme verfügbar zu machen, ist eine zusätzliche Angabe notwendig
DATASEG msg db 20 dup(?) PUBLIC msg
wie meint er das fuer andere programme?, meint er damit auch zB. WindoofPaint, WMA ect?
EXTRN
Damit ein anderes Programm auf diese Variable zugreifen kann, ist in diesem Programm folgende Abgabe notwendig
DATASEG EXTRN msg:byte
wo muss diese definition getrofen werden?, ich dem programm welche die Variable eines anderen nutzen will?
GLOBAL
GLOBAL arbeitet so, dass alles, was im gleichen Modul definiert ist, als PUBLIC gesetzt wird, alles, was nicht im gleichen Modul definiert ist, wird als EXTRN behandelt
DATASEG GLOBAL msg:byte anz:word anz dw 800
hier ist meine frage, was befdeutet das ":byte oder :word" dahinter, ist das nur der datentyp der Variable?
danke shcon mal wenn ihr euch die mühe macht meine fragen anzuschaun
Gruß Tobi.
-
hmm.... kann mir keiner antwort geben?
-
T0bi schrieb:
wie meint er das fuer andere programme?, meint er damit auch zB. WindoofPaint, WMA ect?
Damit sind andere Programme von dir gemeint. Fremde Programme kennen deine Funktionen und Variablen ja gar nicht.
T0bi schrieb:
wo muss diese definition getrofen werden?, ich dem programm welche die Variable eines anderen nutzen will?
Ja.
T0bi schrieb:
hier ist meine frage, was befdeutet das ":byte oder :word" dahinter, ist das nur der datentyp der Variable?
Genau. Außer den Variablentypen "byte", "word" und "dword" gibt es noch die Sprünge "near" und "far" und "abs" für Konstanten.
Als kleines Beispiel mal ein Programm, welches zwei externe Funktionen nutzt:
ext.asm:public print ; diese funktionen public exit ; sind public code segment print proc far mov ah,09h int 21h print endp exit proc far mov ah,4Ch int 21h exit endp code ends end
main.asm:
extrn print:far ; hier werden die extrn exit:far ; funktionen importiert daten segment string db "Hello World!$" daten ends code segment assume cs:code,ds:daten start: mov ax,daten mov ds,ax lea dx, string call print ; hier werden sie genutzt call exit code ends end start
Assemblieren und ausführen:
tasm main.asm tasm ext.asm tlink main + ext main.exe