.MODEL Small ;EXE-Datei
.STACK100h
.286;wegen pusha+popa
.DATA
Msg1 DB"Geben Sie die Zahl ein: $"
CR_LF DB10,13,"$";Anf. nächste Zeile
Puffer1 DB6DUP (?) ;Puffer für Ausgabeproz.
Puffer STRUC ;Puffer für Numin
Max DB6
Anz DB ?
Txt DB6DUP (?)
Puffer ENDS
Buffer Puffer <> ;Speicher für Puffer
NumIn PROC NEAR ;Eingabeproz. push ax bx dx si di ;geht nur bei TASM mov dx,OFFSET Buffer mov ah,0Ah int21h ;Zahlenstring einlesen xor cx,cx ;CX=0 mov cl,Buffer.Anz mov si,cx mov bx,OFFSET Buffer+1 add bl,Buffer.Anz ;Ende des Zahlenstrings adc bh,0;Falls Überlauf mov di,1;DI=1=Faktor f. Ziffer xor cx,cx ;CX=0 cmp Buffer.Anz,0;Gar keine Eingabe? je NullZ
LoopA: mov al,[bx] ;Ziffer bei BX nach AX xor ah,ah ;AH=0 sub ax,30h ;ASCII nach BIN mul di ;AX*DI=DX:AX DX immer 0
jc NullZ ;Überlauf, Zahl zu groß add cx,ax ;CX=CX+AX mov ax,di ;AX=DI mov di,10;di=10 mul di ;AX*DI=DX:AX DX immer 0 mov di,ax ;DI=AX, DI ist Faktor!
clc ;Lösche CF0 dec bx ;BX-1 dec si ;SI-1 jnz LoopA ;SI = 0 ?
NullZ: pop di si dx bx ax ;Nur bei TASM ret;Zurück zum Hauptprog.
Numin ENDP;Ende der Proz.
Ausgabe PROC NEAR ;Ausgabeprozedur
pusha ;Register sichern xor cx,cx ;CX=0=Zeichenzähler mov di,OFFSET Puffer1+6;DI an Pufferende mov bx,10;Nachher durch 10 dividieren
Loop1: xor dx,dx ;DX=0 div bx ;AX/10, Rest in DX bzw. DL add dl,30h ;DL nach ASCII dec di ;DI-1 mov [di],dl ;ASCII Ziffer in Puffer inc cx ;CX+1 cmp ax,0;Ist AX=0 ? jne Loop1 ;Springe wenn nein
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.