; ASMBOX.ASM: Zeichnet ein Rechteck im Grafik-Bildschirm ; ; Autor: Frank Riemenschneider ; ; Eingabe: AX = X-Koordinate (0-239) der oberen linken Ecke ; BX = Y-Koordinate (0-63) der oberen linken Ecke ; CX = X-Koordinate (0-239) der unteren rechten Ecke ; DX = Y-Koordinate (0-63) der unteren rechten Ecke ; ; Ausgabe: keine DATASEG X1 dw ? ; X-Koordinate linke obere Ecke X2 dw ? ; X-Koordinate rechte untere Ecke Y1 dw ? ; Y-Koordinate linke obere Ecke Y2 dw ? ; Y-Koordinate rechte untere Ecke CODESEG PROC AsmBox push ax ; Alle Register retten, die nicht schnell push bx ; genug in den n„chsten Stack kommen push cx push dx push di mov [X1], ax ; Koordinaten abspeichern mov [Y1], bx mov [X2], cx mov [Y2], dx mov dx, [Y1] call AsmLine ; obere Linie zeichnen mov ax, [X2] mov dx, [Y2] call AsmLine ; rechte Linie zeichnen mov ax, [X1] mov bx, [Y2] call AsmLine ; untere Linie zeichnen mov cx, [X1] mov bx, [Y1] call AsmLine ; linke Linie zeichnen BoxExit: pop di pop dx pop cx pop bx pop ax ret ; Back home ENDP ; BOX.ASM: Regelt die Parameterbernahme von Turbo Pascal aus fr ; die ASMBOX-Routine in Turbo Assembler ; ; Eingabe: Parameter der Box-Funktion auf dem Stack ; Box( Xol, Yol, Xru, Yru:WORD ); ; Ausgabe: keine CODESEG PROC Box FAR Xlo:WORD, Ylo:WORD, Xru:WORD, Yru:WORD PUBLIC Box mov ax, [Xlo] ; Anfangs- und Endkoordinaten in die mov bx, [Ylo] ; entsprechenden Register bringen mov cx, [Xru] mov dx, [Yru] ; Koordinaten testen cmp ax, 0 ; XAnf < 0? jge BoxLab1 xor ax, ax BoxLab1: cmp ax, 239 ; XAnf > 239? jle BoxLab2 mov ax, 239 BoxLab2: cmp bx, 0 ; YAnf < 0? jge BoxLab3 xor bx, bx BoxLab3: cmp bx, 63 ; YAnf > 63? jle BoxLab4 mov bx, 63 BoxLab4: cmp cx, 0 ; XEnde < 0? jge BoxLab5 xor cx, cx BoxLab5: cmp cx, 239 ; XEnde > 239? jle BoxLab6 mov cx, 239 BoxLab6: cmp dx, 0 ; YEnde < 0? jge BoxLab7 xor dx, dx BoxLab7: cmp dx, 63 ; YEnde > 63? jle BoxLab8 mov dx, 63 BoxLab8: cmp ax, cx ; XAnf > XEnde? jle BoxLab9 xchg ax, cx BoxLab9: cmp bx, dx ; YAnf > YEnde? jle BoxLab10 xchg bx, dx BoxLab10: call AsmBox ; Box-Routine aufrufen ret ; Back home ENDP