2012-04-12 7 views
1

Vor einigen Jahren schrieb ich x86 Assembly-Programme für MS-DOS-Betriebssystem; Die meisten von ihnen laufen unverändert im Windows CMD.EXE-Befehlsprozessor. Meine Frage bezieht sich auf zwei spezifische Punkte in diesen Programmen:Große Parameter und Fehlerlevel in alten MS-DOS-Assembly-Programmen?

  • Die Programmparameter bei Offset 81H in dem Programmsegment befinden Präfix und eine maximale Länge von 127 Zeichen haben.

  • Der ERRORLEVEL-Wert, den das Programm zurückgibt, wird im AL-Register vor der Funktion zum Beenden des Programms (4CH) des INT 21H geladen, so dass es auf Werte im Bereich 0-255 beschränkt ist.

erkannte ich, dass ein 32-Bit-Wert mit Vorzeichen als Error-in Windows XP ausgeführt werden die Befehle in einem DOS-Fenster Parameter von bis zu 8 KB Größe verarbeiten und zurückgeben kann. Meine Frage ist also: Gibt es eine SIMPLE Möglichkeit, dass ein MS-DOS-Assemblierungsprogramm im alten Stil Zugriff auf 8KB-Parameter haben und 32-Bit-ERRORLEVEL-Werte zurückgeben kann?

Ja, ich weiß, dass ein Windows-kompatible Montageprogramm hat Zugriff auf diese Funktionen, aber ich frage mich, ob ein Programm, das auf eine sehr einfache Art und Weise tun könnte ...

+3

MS-DOS (und andere DOS-Varianten) waren aufgrund des Betriebssystems selbst auf diese Grenzen beschränkt, nicht wegen des Codes IIRC. Als solche (und da sie immer noch unter einer DOS-Emulation laufen und nicht als echte Windows-Kommandozeilen-/Konsolen-Apps), können diese Einschränkungen nicht ohne ein Neuschreiben entfernt werden, um sie zu echten Windows-Apps, AFAIK, zu machen. –

+0

@KenWhite: Danke für deine Antwort. Ist diese Überarbeitung sehr umfangreich? Wenn nicht, könnten Sie das einfachste mögliche Beispiel für ein solches Programm oder einen Link zu einem solchen Beispiel posten? – Aacini

+0

@Aacini hier ist ein Beispiel für eine Windows-Masm32 Hallo Welt: http://StackOverflow.com/q/4568306/309483 –

Antwort

0

Ihre 16-Bit-Programme laufen auf 32-Bit-Windows aufgrund NTVDM. Mehr und mehr Maschinen erhalten standardmäßig 64-Bit-Betriebssysteme, und 64-Bit-Windows hat nicht einmal die NTVDM, so dass es nicht mehr funktioniert.

Ich rate Ihnen, Ihre Programme auf 32 oder 64-Bit-Windows zu portieren.

Nach der Portierung ist der Zugriff auf die Befehlszeile einfach. WinMain und Main haben beide die Befehlszeile als Argument.