[TASMX]"No memory available" Fehlermeldung bei assemblieren



  • HI,
    bei mir läuft Tasmx über Dosbox auf einem 64-Bit System.

    .modell small
    .stack 100h
    .data
    
    matrix dw 00,01,02,03,04,05
           dw 10,11,12,13,14,15
           dw 20,21,22,23,24,25
           dw 30,31,32,33,34,35
           dw 40,41,42,43,44,45
           dw 50,51,52,53,54,55
    
    N      =   6
    
    include macros.mac
    jumps
    
    .code
    
    start:
    	mov ax, @Data
    	mov ds, ax
    
    	mov bx,0
    	xor di,di
    
    schleife1:
    	writez matrix[bx][di]	; zeilen(bx) und spaltenzähler(di)
    			     	; erstes zeilenelemnt(0) audgeben
    	add di, type matrix  	; type liefert den Wert 2, da matrix als Word definiert ist		     
    	cmp di, N*type matrix	;
    	jl schleife1
    	nl
    	add bx, N*type matrix	; zeilenzähler auf anfang n„chster zeile
    	xor di,di	     	; spaltenzähler zurücksetzen
    	cmp bx, N*N*type matrix	; abbruch für die zeilenangabe
    	jl schleife1
    
    ende:
    mov ah, 04ch
    int 21h
    end start
    

    Wenn ich dieses Programm assembliere, kriege ich die Fehlermeldung:
    "No enough memory available to complete operation". Ich habe einen Asus-Laptop mit 4 GB Arbeitsspeicher. Die Directories sind auch richtig eingestellt. Andere Programme können ohne Probleme assembliert werden. Mein Prof konnte mir auch nicht helfen. Ich glaube, dass liegt an type-Befehl.



  • Sicher mal die die Register DI und BX während der macro-Aufrufe

    push di
    push bx
    writez / nl
    pop bx
    pop di
    

    JL sollte besser JB sein (unsigned).
    Beider der Rückgabe von TYPE bist du dir Sicher?



  • Versuch auch mal, das ganze mit fasm in einer .com Datei umzusetzen.

    Für eine .com Datei in fasm brauchst du nur den Header org 100h, und sonst nix weiter, dann erstellt der Assembler die com Datei von alleine, schau aber auch nochmal ins Manual. Schließlich kann man mit fasm auch 64 Bit Assembler programmieren, und das ist auch nicht zu verachten, oder frag deinen Prof, warum er nicht wenigstens Yasm einsetzt, schließlich kann man den auch frei herunterladen, ist nasm-compatibel und immer ziemlich aktuell.

    Und guck dir das ganze mit dem Dos-Debugger z.B. debug clone von Paul Vojta
    http://math.berkeley.edu/~vojta/ oder ein einfaches debug proggi von einer Dosdiskette
    genauer an, bzw. hast du sicher auch den Turbodebugger, wenn du den problemlos in der Dosbox nutzen kannst.

    Und man könnte auch mal versuchen, den Code direkt in debug umzusetzen, das hat den Vorteil, das man mit Assemblerdirektiven und modi(tasm mode masm mode usw.) nicht so durcheinanderkommt, und den Debugger auch gleich vor der Nase hat.

    In debug kann man die Daten z.B. mit e200 00,01,00,02,00,03,00,04 usw. eingeben oder mit einem assemblerloop, der die Daten nach Adresse 200 schreibt, z.B. mit einer Befehlskette wie

    1E6D:0100 B137           MOV    CL,37                         
    1E6D:0102 BB0002         MOV    BX,0200
    1E6D:0105 31C0           XOR    AX,AX
    1E6D:0107 8807           MOV    [BX],AL
    1E6D:0109 43             INC    BX
    1E6D:010A 8827           MOV    [BX],AH
    1E6D:010C 43             INC    BX
    1E6D:010D FEC4           INC    AH
    1E6D:010F E2F6           LOOP   0107
    1E6D:0111 90             NOP
    1E6D:0112 90             NOP
    1E6D:0113 90             NOP
    -g 111
    

    ach so, vielleicht hilft auch noch ein Blick hierhin (bezüglich der unterschiedlichen Modi):
    http://andremueller.gmxhome.de/



  • dedmazay schrieb:

    HI,
    bei mir läuft Tasmx über Dosbox auf einem 64-Bit System.[...]
    Wenn ich dieses Programm assembliere, kriege ich die Fehlermeldung:
    "No enough memory available to complete operation". Ich habe einen Asus-Laptop mit 4 GB Arbeitsspeicher. Die Directories sind auch richtig eingestellt. Andere Programme können ohne Probleme assembliert werden. Mein Prof konnte mir auch nicht helfen. Ich glaube, dass liegt an type-Befehl.

    Scheinbar geht dem Assembler irgendwo beim Verarbeiten deiner Quellcodes der Speicher aus.
    Auf Anhieb faellt mir dazu ein:

    Wie viel erweiterten Speicher hast du in der Konfiguration deiner DOS-Box eingestellt? Die Standardeinstellung ist AFAIR ziemlich wenig...

    Wie gross ist die Datei macros.mac?

    Dass der Meta-Befehl type allein diesen Fehler verursacht, halte ich fuer eher unwahrscheinlich, aber wie du im Kommentar bereits geschrieben hast, kannst du ihr auch einfach durch die Konstante 2 ersetzen.



  • Ja, stimmt, an type wird es nicht liegen. Ich habe den Speicher auf 64 MB eingestellt. Mein macros.mac ist 15 kByte groß. Pushen und popen auch. Trotzdem kommt immer noch die Fehlermeldung. Ich bin verzweifelt. Meine Kommilitonen kriegen es zum Laufen, nur bei mir nicht. Weder bei Linux noch im Windows. Das muss an Dosbox oder an meinem System liegen. Aber die Einstellungen im Dosbox sind die Gleichen wie bei Studienkollegen. Ich versuche jetzt mit Fasm und Yasm. So wie ich jetzt verstanden habe, muss ich Yasm in eine IDE implementieren. Kriege ich aber mit CodeBlocks nicht hin.



  • Man braucht für yasm keine IDE. Auch nicht für VC++ masm, kann man beide von der Konsole aus aufrufen, aber für masm braucht man auch die passenden Syntaxkenntnisse.
    Wenn Konsoleaufruf unklar ist, dann hilft z.B. Erhards Seite http://www.henkessoft.de/Assembler/Assembler.htm weiter.

    Und bei dem geposteten Code, läuft der tatsächlich so, wie hier gepostet, bei den Kommilitonen?
    Mir kommt der Macro-Befehl

    writez matrix[bx][di]
    

    ein wenig seltsam vor. Hat der alles, was er braucht? Wie ist das Macro aufgebaut? Funzt es korrekt? Wird ein Interrupt benutzt, wenn ja welcher usw.
    Und guck mal auch mal, was passiert, wenn du oben .stack 100h auslässt. Im Moment brauchste ja auch noch gar keinen Stack. Und gerade hier liegt oftmals der Hund (bei Emulatoren) begraben.



  • Es funktioniert plötzlich. Ich habe nichts gemacht und TASM assembliert wie es soll. 😕



  • dedmazay schrieb:

    Es funktioniert plötzlich. Ich habe nichts gemacht und TASM assembliert wie es soll. 😕

    ...hat vermutlich der Nikolaus kurz vorbeigesehn und schwupps war er wieder wech...;)

    (naja, bei artigen Kindern, warum auch nicht)


Anmelden zum Antworten