;************************************** ;* * ;* * ;* * ;************************************** ;______________________________________ ; ;stapelsegment : ;______________________________________ stack segment stack word 'stack' dw 100 dup (?) stack ends ;______________________________________ ; ;programmsegment : ;______________________________________ code segment public word 'prog' org 0 main: call init call there mov ax,04c00 ;dos eqivalent zu 'ExitProccess' int 021 init: mov ax,seg Buff02 ;daten- und extrasegment initialisieren mov es,ax mov ds,ax ret ;______________________________________ ; ;ab hier muss der Code Stehen ;______________________________________ there: mov dx, offset Intro mov ah, 9 int 021 A2: call _input cmp al, 27 jz ret mov dx, offset Ausg mov ah, 9 int 021 ;mov cx, 020 mov si, offset Save mov di, offset Buff02 cld A1: lodsb cmp al,'@' jz >A3 xor ah, ah call _output jmp A1 A3: mov al,10 stosb mov al,13 stosb mov al, '$' stosb mov dx, offset Buff02 mov ah, 9 int 021 jmp there ret _input: cld mov di, offset Save ;vorbereiten... mov ax, seg Save mov es, ax mov cx, 020 GetIt: mov ah, 1 ; Int 021 Funktion 1: Zeichen von der Tastatur lesen int 021 and ax, 0ff ; nur das in al wird benötigt cmp al, 0d ; ist es die Enter Taste? jz JumpOut ; dann ist das hier fertig cmp al, 27 ; Ist es die 'ESC' Taste? jz ret ; Rücksprung und das Programm wird geschlossen stosb Loop GetIt ; Und die nächste Ziffer holen JumpOut: mov al,'@' ;Schlußzeichen setzen stosb ret _output: cld mov bx,10 mov cx,0 X1: xor dx ,dx ; dx löschen div bx ; dx:ax durch bx (10) teilen add dl, 030h ; dem divisionsrest 30h hinzuaddieren push dx ; auf den stapel legen inc cx ; durchlauf zähler erhöhen cmp ax, 0 ; ist ax schon 0? jnz X1 ; nicht? dann das ganze noch einmal... rücksprung nach X1 X2: ; Ok, die Zahl wird einmal rumgedreht pop dx ; dx vom stapel mov [di],dl ; und dl in den an position [di] Puffer schreiben inc di ; schreibzeiger erhöhen loop X2 ; bis Durchlaufzähler = 0 mov al,',' stosb mov al,020 stosb ret code ends ;______________________________________ ; ;datensegment : ;______________________________________ data segment public word 'daten' Ausg db 0a, 0d db "Ausgabe:$" Buff02 db 192 dup (0) Dummy db '$' Save db 32 dup (?) Dummy2 db '@' Intro db 0a,0d db "**********************************************************",0a,0d db "* ASCII String zu Dezimal *",0a,0d db "* Gibt die dezimalen ASCII Werte des eingegebenen Textes *",0a,0d db "* Programm Beenden mit *",0a,0d db "* 2009 Heinz Volker Viehof *",0a,0d db "**********************************************************",0a,0d db 0a,0d,0a,0d db "Eingabe:$" data ends end