cmd copy funktioniert wegen Assembler nicht

üäpöol

Erfahrenes Mitglied
Hi,

ich hoffe der Titel ist nicht komplett verwirrend und ich bin im richtigen Forum.
Ich schreibe zurzeit an meinem eigenen kleinen OS und gehe nach diesem Tutorial vor: http://www.tutorials.de/content/171-ein-eigenes-kleines-betriebssystem.html
Ich habe schon ein bisschen gecodet und stoße immer wieder auf ein komisches Problem. Wenn ich versuche die boot.bin und die kernel.bin zu kopieren, kopiert die cmd manchmal nur die boot.bin und einen kleinen Teil der kernel.bin... Das tritt immer wieder im Zusammenhang mit dem cmp Befehl und/oder Registeraufrufen. Ein Beispiel:
Code:
mov ax, word [Variable1]
sub ax, word [Variable2]
funktioniert nicht (zumindest an manchen Stellen in meinem Code)
Code:
mov ax, word [Variable1]
mov bx, word [Variable2]
sub ax, bx
funktioniert.
Bisher konnte ich alles so umschreiben, dass es funktioniert, jetzt bin ich aber an einer Stelle, an der nicht mal mehr
Code:
cmp ax, word [Variable]
je Ende
im Gegensatz zu nur
Code:
cmp ax, word [Variable]
funkioniert. Andere Sache funktionieren an dieser Stelle ohne Probleme, und auch der obere Code funktioniert nur an dieser Stelle nicht. Der Assembler gibt weder Fehlermeldung noch Warnung aus, aber kopiert werden die beiden Dateien trotzdem nicht.
Die Datei ist immer jonstant groß, weil ich den Rest der Datei einfach mit Nullen ausfülle.
Ich hoffe jemand hat einen Ansatz, woran mein Problem liegen könnte.

Danke im Voraus!
 
Hi,

mir ist noch etwas aufgefallen.
Ich wollte wissen, ab welcher Stelle die kernel.bin nicht mehr kopiert wird.
Das letzte ASCII (?) Zeichen der *.img ist ein SUB. Jetzt hab ich mal nachgseschaut, was das bedeutet (bei Wikipedia http://de.wikipedia.org/wiki/Steuerzeichen). Ich zitiere:
"Steht als Ersatz für ein Zeichen, das ungültig oder fehlerhaft ist, z. B. wegen eines Paritätsfehlers bei der Übertragung.
Dateiendezeichen (EOF, End of File) für Textdateien unter CP/M mangels bytegenauer Dateilängen, war anfänglich, obwohl unnötig, auch unter DOS üblich."
Kann das damit etwas zu tun haben? Alleine, dass etwas von End of File da steht, macht mich schon stutzig. Und inwiefern hat das etwas mit dem Assemblercode zu tun.
Soll ich mal den ganzen Code posten (ist ein Makro)?
 
Wow! Du bist ein Genie, sheel! Es funktioniert. Gibt's dafür auch noch eine Erklärung?
EDIT:
Nicht dafür, dass sheel genial ist, sondern, dass man /b anfügen muss.
 
Oh. Ich hab mich zu früh gefreut. Ich kann das Betriebssystem zwar ausführen, aber das Makro wird nur einmal ausgeführt -> Das Makro zeichnet eine Linie und es wird nur noch eine Linie gezeichnet. Danach stürzt das OS ab. Hat das damit etwas zu tun?
 
Unter Windows gibts programmiermäßig zwei Arten, um Dateien zu öffnen.
Text/Binär.
Einer der Unterschiede: Bei Text wird das Byte -1 als Dateiende verstanden (Binär eben nicht).

Bin mir nicht sicher, welche Öffnungsart copy generell nimmt bzw. wie die ermittelt wird,
aber mit /b wird auf jeden Fall Binär genommen.
Dein Aufruf war wohl im Textmodus und hat bei -1 aufgehört.

Gruß
 
Zurück