
;	Makrodatei zur Assemblerprogrammierung im RA-Praktikum WS 99/00

; -------------------------------------------------------------------------

SHOW_DL MACRO		; Makro zeigt Zeichen, das äquivalent zum Inhalt von DL ist an
        push ax	; Sichere Register auf den Stack
        mov ah,02h	; Lade Code für Interrupt nach AH
        int 21h	; Auslösen des Interrupts
        pop ax		; Stelle Register wieder her
        ENDM

; ------------------------------------------------------------

MSDOS   MACRO		; Makro regelt definierte Rückkehr zu MS-Dos
        mov ah,4ch	; Lade Code für Interrupt
        int 21h	; Auslösen des Interrupts
        ENDM

; ----------------------------------------------------------

SHOW_NUMBER_IN_AL MACRO	; Makro zeigt 1-Byte-große (zweistellige) Hexadezimalzahl in AL an
        push ax         	; Rette Registerinhalte auf Stack
        push bx
        push cx
        push dx
        push ax         	; AL im Stack zwischenspeichern
        mov cl,4        	; Speichere 4 in Register CL
        shr al,cl       	; Schiebe logisch um 4 Positionen nach rechts, Löscht 1erStelle aus AL
        mov bh,al     		; Speichere die so erhaltene 16er-Stelle in BH
        pop ax          	; AL wieder aus dem Stack holen
        mov cl,0fh      	; Lade 0fH nach CL
        and al,cl       	; Logisches UND, löscht die 16er Stelle aus AL
        mov bl,al       	; Speichere so erhaltene 1er Stelle in BL
        mov ax,bx       	; Schiebe BX nach AX
        add ax,3030h    	; Addiere 3030H zu AX --> nun ASCII-Zahl
        cmp ah,3ah      	; Vergleiche AH mit 3AH
        jl M1           	; Springe zu M1, wenn 16er Stelle mit Dezimalziffer besetzt
        add ah,07h      	; Addiere 07H zu AH --> Korrektur von Ascii-Zeichen
M1:  	cmp al,3ah      	; Vergleiche AL mit 3AH  
        jl M2           	; Springe zu M2, wenn 1er Stelle mit Dezimalziffer besetzt
        add al,07h      	; Addiere 07H zu AL --> Korrektur von Ascii-Zeichen
M2:   	mov dl,ah       	; Schiebe AH nach DL
        SHOW_DL         	; DL anzeigen
        mov dl,al       	; Schiebe AL nach DL
        SHOW_DL         	; DL anzeigen
        pop dx          	; Wiederherstellen der Registerinhalte
        pop cx
        pop bx
        pop ax
        ENDM

; --------------------------------------------------------------------------------------------------
;	Achtung dieses Makro darf nur einmal im Quelltext auftauchen, da die darin definierten
;	Sprungmarken M1 und M2 sonst für Fehler sorgen


