Speicher in Assembler



  • Hiho zusammen,

    ich brauche ein Speicherfeld von 64000 bytes.
    wenn ich in meinem Datensegment "Feld db 64000 dup(0)" definiere, ist mein Programm gleich 64 KB ohne dieser Anweisung 1 KB gross.
    Deswegen dachte ich mir ich lass diese Anweisung weg, da ich den Speicher sowieso nur über DS:[SI] addressiere.

    1.Darf ich das machen oder muss ich da Angst haben irgendwas wichtiges im Speicher zu überklatschen?

    2.Gibt es ausser über das Datensegment sonst noch irgendwelche Möglichkeiten Speicher zu reservieren?

    Habe 16bit-Tasm von anno dazumal verwendet(der von TurboPascal 7).

    Danke für eure Antworten
    Robert



  • Hi

    jup. Es gibt einen DOS-Interrupt, mit dem du einfach so Speicher reservieren kannst:
    ah=48h
    bx=Anzahl an paragraphs, die du reservieren moechtest (Bytes16)
    int 21h
    wenn cf gesetzt ist (jc) dann ist irgendwas schief gelaufen => wahrscheinlich nicht genug Speicher frei...
    Ansonsten wird in ax die Segmentaddresse des reservierten Speicherblocks zurueckgegeben und in bx der groesste zusammenhaengende freie Speicherblock (in Bytes
    16)

    Es gibt uebrigens noch eine Moeglichkeit schon beim Programmstart Speicher zu reservieren: uninitialisierte Segmente anlegen.
    Bsp:
    Feld db 64000 dup (?)
    Das ganze muss natuerlich hinter den initialisierten Segmenten liegen, sonst wird das "?" durch 0-Bytes ersetzt. Leider weiss ich net mehr, in wie fern sich das in TP7 umsetzen laesst=> ausprobieren 🙄😃


Anmelden zum Antworten