CSEG SEGMENT ASSUME CS:CSEG DDOUT PROC MOV BX,16 ; fortgesetzt durch 16 (Zahlensystemsbasis) dividieren M1: CMP DX,0 ; hoeherwertige 16 Bit gesetzt ? JNE M2 CMP AX,BX ; alle Divisionen durchgefuehrt ? JB M3 M2: MOV CX,AX ; niederwertige 16 Bit sichern MOV AX,DX ; hoeherwertige 16 Bit als 1. Dividend MOV DX,0 ; nur hoeherwertige 16 Bit sind 1. Dividend DIV BX ; durch 10 dividieren XCHG AX,CX ; niederwertige 16 Bit als 2. Dividend DIV BX ; erneut durch 10 dividieren PUSH DX ; abgetrennte Ziffer auf den Stack legen MOV DX,CX ; naechster 32 Bit Dividend in DX:AX CALL M1 ; rekursiver Aufruf zwecks Abtrennung naechster Ziffer POP AX ; abgetrennte Ziffer vom Stack holen M3: ADD AL,'0' ; ASCII-Code der Ziffer ermitteln CMP AL,'9' ; ASCII-Luecke zwischen 9 (39h) und A (41h) erwischt ? JBE M4 ADD AL,7 ; Luecke ueberbruecken M4: MOV AH,2h ; DOS-Funktionscode Zeichenausgabe MOV DL,AL ; ASCII-Code des auszugebenden Zeichens in DL INT 21h ; DOS-Funktion Zeichenausgabe ausfuehren RET ; und zurueck ... DDOUT ENDP MAIN PROC MOV DX,1234h ; auszugebende Zahl in DX:AX MOV AX,5678h CALL DDOUT ; Aufruf der Routine Doppelwortausgabe MOV AX,4C00h ; normales Programmende INT 21h ; DOS-Funktion Programmende aufrufen MAIN ENDP CSEG ENDS SSEG SEGMENT STACK DW 32767 DUP (?) SSEG ENDS END MAIN