MS-DOS/ASM: Wie komme ich an die Konsolenparameter?

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

MS-DOS/ASM: Wie komme ich an die Konsolenparameter?

Beitrag von DarkSoul »

Wenn ich unter MS-DOS (richtiges DOS bzw. DOSBOX, also nicht die normale Console) z.b. folgendes eingebe:

C:/>MYPROC.COM /help

Wie komme ich unter x86-Assembler (NASM) an diesen Parameter bzw wie stelle ich fest, ob überhaupt einer angegeben wurde? In Google finde ich da irgendwie nichts wirklich brauchbares.

Ich habe anhand von C vermutet, dass sich dieser aufm Stack befinden würde (weil C übergibt ihn als Funktionsparameter und die landen ja beim Aufruf aufm Stack). Habe mit
org 100h
pop ax
push ax
...
am Beginn gehofft, einen Zeiger zu erhalten. Fehlanzeige. Das Ergebnis war Totalabsturz (weil ich damit wohl eines mehr abgehoben habe, als ich durfte). :mrgreen:

Geht das vllt. nur mit EXE? Ich möchte möglichst COM behalten. :mrgreen:

Bislang hat MYPROC.COM keine Parameter, aber ich würde dort gerne /help implementieren.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: MS-DOS/ASM: Wie komme ich an die Konsolenparameter?

Beitrag von RSBasic »

Warum möchtest du sowas machen? Was ist das Ziel deines Vorhabens?
Ich frage deshalb, weil 16 Bit und MS-DOS in neueren Betriebssystemen nicht mehr unterstützt werden.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: MS-DOS/ASM: Wie komme ich an die Konsolenparameter?

Beitrag von DarkSoul »

Reines Interesse. Programmieren, wie es früher war. :mrgreen:

Nostalgie

Andere spielen eben alte Spiele aus der Ära und ich daddel eben gerne alte Programmiersprachen. Mir wurde das damals als Kind verboten und ich möchte es nachholen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: MS-DOS/ASM: Wie komme ich an die Konsolenparameter?

Beitrag von NicTheQuick »

Ich bin sicher, dass die Helle da weiterhelfen kann. Er ist hier im Board der ASM-Profi. Und ich gehe mal davon aus, dass er auch schon zu DOS-Zeiten damit angefangen hat.
Bild
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Re: MS-DOS/ASM: Wie komme ich an die Konsolenparameter?

Beitrag von Helle »

Ja, da habe ich eben doch feuchte Augen bekommen... Waren das noch Zeiten...
So, das Zauberwort lautet PSP, Program Segment Prefix. Lässt sich u.a. mit dem ES-Segment auslesen. An Adresse 80h steht die Anzahl der Bytes nach dem Prgramm-Namen bei Programm-Aufruf, ab Adresse 81h steht der "Text", fängt üblicherweise mit einem Leerzeichen an (dem zwischen Programm-Namen und Übergabe-Parameter).

Code: Alles auswählen

mov BX,81h ;oder 82h ohne Leerzeichen lesen
L:
mov AL,ES:[BX]
inc BX
Anzeige von AL oder sonstwas
usw., Schleife oder Test auf 0Dh (Return bei Prog-Aufruf) 
Versuchs mal!
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: MS-DOS/ASM: Wie komme ich an die Konsolenparameter?

Beitrag von DarkSoul »

Leider funktioniert dein Code nicht wirklich.

Hast du dich evtl. vertippt und meintest

Code: Alles auswählen

mov al,[es:bx]
? Weil NASM hat da gemeckert.

Habe so dirty folgendes mit deinem Code versucht:

Code: Alles auswählen

  org 100h
start:
  mov bx,82h ;oder 82h ohne Leerzeichen lesen
  mov dl,[es:bx]
  mov ah, 2h  
  int 21h

  mov ax, 4Ch
  int 21h
section .data
  ;nüscht :-)
Müsste ja theoretisch das erste Char vom Parameter ausgeben. Tut es aber nicht. Er gibt ein anderes aber immergleiches Char aus. :cry:

EDIT: Hat nun doch geklappt! Hatte mich klein wenig vertan. Danke!!!!! :D (Hatte zuerst falsches Register fürn Ausgabe-INT geladen, korrigiert und dann nicht auf Speichern gedrückt X.X)
Bild
Antworten