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
    

Anmelden zum Antworten