Home |
8086 Assembler:
|
Zurück zur Assemblerauswahlseite |
Der in Programmsegmentpräfix (PSP) ab Adresse 81h gespeicherte Text ist mit einigen Ausnahmen eine exakte Kopie der Befehszeile 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 kommndozeile 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 zeicxhen 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
|
|