[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-Befehlwritez 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)