; Sei eine Folge von Zahlen gegeben, die auf 16 Bits, ohne ; Vorzeichen dargestellt sind. Zeigen Sie am Bildschirm alle ; Zahlen der Folge an. _data segment ausgeben_tmp db 5 dup (?), 13, 10, '$' String dw 20, 01234h, 0, 15, 65530, 0111010111b Ende_String label word _data ends _text segment assume cs:_text assume ds:_data ausgeben: ; beim Eintritt: ax = Zahl die ausegeben werden soll ; gibt die Zahl von ax aus ; die Werte der Register bleiben unverändert ; wir speichern die Werte der Register damit wir sie im Unterprogramm ; benützen können push bx push cx push dx ; wir berechnen die Darstellung in Basis 10 mov bx, offset ausgeben_tmp+5 ; bx=die Adresse der letzte Ziffer ; die schon geschrieben ist mov cx, 10 ; cx = 10 (Konstante) ausgeben_Schleife: mov dx, 0 div cx ; dl=aktuelle Ziffer, ax=Rest der Zahl dec bx add dl, '0' mov byte ptr [bx], dl cmp ax, 0 jne ausgeben_Schleife ; am Bildschirm anzeigen: mov dx, bx mov ah, 09h int 21h ; den Kontext zurücksetzen pop dx pop cx pop bx retn ; Ende des Unterprogrammes ausgeben ; Hauptprogramm ; Wir machen eine Schleife wo wir die Elemente der Folge durchlaufen ; und zeigen jedes Element am Bildschirm an. start: mov ax, _data mov ds, ax mov si, offset String cld Schleife: cmp si, offset Ende_String je Ende lodsw call ausgeben jmp Schleife Ende: mov ax, 4C00h int 21h _text ends _stack segment stack db 512 dup (?) _stack ends end start