Der in Programmsegmentpräfix (PSP) ab Adresse 81h gespeicherte Text ist mit einigen Ausnahmen eine exakte Kopie der Befehlszeile beginnend hinter dem Namen des aufgerufenen Programms. Einige der Angaben werden jedoch verschluckt:
Mit dem folgenden kleinen Programm lässt sich ausprobieren, wie Aufrufparameter im PSP dargestellt werden. Damit lassen sich mögliche Unklarheiten klären - als da sind -
Wie sieht der Bereich aus,
Ausprobieren ist angesagt! Ein rasch zusammengestelltes Programm dazu ist weiter unten dargestellt. | |
![]() | Bild links: Der Bildschirmabdruck mit schwarzem Hintergrund beantwortet fast alle gestellten Fragen. Allerdings geht aus dem Bildschirmabdruck die Beantwortung der letzten Frage (Eingabe von Blanks hinter dem letzten Parameter) nicht hervor: Die hinter dem letzten Parameter eingetippten Blanks werden unter COMMAND.COM in den PSP kopiert. Verwendet man 4DOS als Kommandointerpreter, werden sie abgeschnitten. Außerdem räumt 4dos im PSP besser auf (vergleiche nächstes Bild). |
![]() |
comment # dies programm zeigt die eintragungen der programmaufrufparameter aus der kommandozeile in den psp ab adresse 80h # .model small .stack 128 spc equ ' ' cr equ 0dh lf equ 0ah int21 macro intnr ifnb <intnr> mov ah,intnr endif int 21h endm print_crlf macro mov dl,cr int21 2 mov dl,lf int21 2 endm ;testhilfe: minidump, aufruf mit: adresse, anzahl bytes ;angezeigt wird das extra-segment mdump macro adresse,anzahl local mdump11,mdump22,mdump33,mdump44,mdump99 mov bx,adresse mov cx,anzahl mdump11: ;;ausgabe adresse call mdump44 mdump22: ;;ausgabe wert mov al,bl and al,0fh ;;ausgabe neue zeile? jnz mdump33 ;;nein call mdump44 ;;ja mdump33: ;;ausgabe hexa byte push cx mov dl,spc int21 2 mov al,es:[bx] inc bx call hex_out pop cx dec cx jnz mdump22 print_crlf jmp mdump99 mdump44: ;;ausgabe neue zeile mit adresse push cx print_crlf mov al,bh call hex_out mov al,bl call hex_out mov dl,':' int21 2 pop cx ret mdump99: endm .code _start: xor ch,ch mov bx,80h ;hier anzahl parameterzeichen mov cl,es:[bx] jcxz dump ;wenn keine parameter inc bx lese: mov dl,es:[bx] cmp dl,cr ;cr = ende der kommandozeile je dump inc bx int21 2 ;anzeige 1 zeichen in dl jmp lese dump: mdump 80h,20h xor al,al ;programmende int21 4ch ;unterprogramm hexadezimale anzeige ;---------------------------------- ;ausgabe 8 bit zahl (in al) in hexa hex_out: push ax shr al,1 shr al,1 shr al,1 shr al,1 call conv pop ax conv: and al,0fh daa add al,0f0h adc al,40h ;ausgabe zeichen in al zum bildschirm printchr: cmp al,cr ;cr? je printchr8 printchr1: push dx push cx push bx mov dl,al int21 2 pop bx pop cx pop dx ret printchr8: print_crlf ret end _start |