-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrahmen2.asm
134 lines (108 loc) · 4.95 KB
/
rahmen2.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
;---------------------------------------------------------------------------
;
; cls_RAHMEN.ASM
;
; Stand : 11.02.92
;
; Diese Funktion zeichnet einen Rahmen in einer beliebigen GrӇe und einer
; beliebigen Farbe auf den Bildschirm. Der Aufruf erfolgt folgerdermaáen:
;
; mov bl,SPALTEA
; mov bh,ZEILEA
; mov dl,SPALTEB
; mov dh,ZEILEB
; mov cx,FARBE
; CALL RAHMEN4
;
; bl = Spalte des linken Punktes
; bh = Zeile des oberen Punktes
; dl = Spalte des rechten Punktes
; dh = Zeile des unteren Punktes
; cl = Farbe des Rahmens
;
;---------------------------------------------------------------------------
PUBLIC CLS_RAHMEN
ASSUME CS:CODE,DS:CODE,SS:CODE,ES:BILD
.286
BILD SEGMENT AT 0b800h
BILD ENDS
CODE SEGMENT
CLS_RAHMEN proc Near
pusha ;DI,SI,BP,SP,DX,CX,AX
push es ;ES,
push ds ;DS alle Register aus Stack
mov ax,BILD ;Segmentanfang nach AX
mov es,ax ;und dann nach ES(b800h)
; mov bl,SPALTEA ;Spalte_A nach BL
; mov bh,ZEILEA ;Zeile_A nach BH
; mov dl,SPALTEB ;Spalte_B nach DL
; mov dh,ZEILEB ;Zeile_B nach DH
; mov cl,FARBE ;Farbe 0_0000_000 (Blin./Hinter/Vorder)
xchg bh,dl ;vertausch BH mit DL Register
mov cx,0d ;Attribut schwarz
;---------------------------------------------------------------------------
Spalte_A_B:
shl bl,1 ;BL wird mit Zwei Multi.
shl bh,1 ;BH wird mit Zwei Multi.
;---------------------------------------------------------------------------
Zeile_A: mov ax,160d
mul dl ;Zeile A wird mit 160 multiplizier
mov si,ax ;sichere Wert nach SI (Zeile_A)
Zeile_B: mov ax,160d ;
mul dh ;Zeile B wird mit 160 multi.
mov di,ax ;sichere Wert nach DI (Zeile_B)
;---------------------------------------------------------------------------
mov dl,bh ;sichere Spalte B nach DL
xor bh,bh ;dann l”sche Register Bh
mov byte ptr es:[si+bx]," " ;Zeile_A + Spalte_A
mov byte ptr es:[si+bx+1],cl
mov byte ptr es:[di+bx]," " ;Zeile_B + Spalte_A
mov byte ptr es:[di+bx+1],cl
push si ;sichere Zeile A auf Stack
add si,160d ;verringere Zeile A um eine Zeile
linker_Strich:
mov byte ptr es:[si+bx]," " ;Zeile_A + (Z„hler)
mov byte ptr es:[si+bx+1],cl
add si,160d ;verringere Zeile A um eine Zeile
cmp si,di ;Vergleiche Strich mit Zeile_B
jb linker_Strich
pop si ;hole Zeile A wieder vom Stack
push bx ;Sichere Spalte A
inc bx
inc bx ;erh”he Spalte A
unterer_Strich:
mov byte ptr es:[di+bx]," " ;Zeile_B + (Z„hler)
mov byte ptr es:[di+bx+1],cl
inc bl
inc bl ;erh”he Spalte A um eine Spalte
cmp bl,dl ;Vergleiche Strich mit Spalte_B
jb unterer_Strich
pop bx ;hole Spalte A zurck vom Stack
inc bl
inc bl ;verringer Spalte A um eine Spalte
oberer_Strich:
mov byte ptr es:[si+bx]," " ;Zeile_A + (Z„hler)
mov byte ptr es:[si+bx+1],cl
inc bl
inc bl ;verringere Spalte A um eine Spalte
cmp bl,dl ;Vergleiche Strich mit Spalte_B
jb oberer_Strich
mov bl,dl ;Zeile_B nach BL
mov byte ptr es:[si+bx]," " ;Zeile_A + Spalte_B
mov byte ptr es:[si+bx+1],cl
mov byte ptr es:[di+bx]," " ;Zeile_B + Spalte_B
mov byte ptr es:[di+bx+1],cl
add si,160d ;Verringere Zeile A um eine Zeile
rechter_Strich:
mov byte ptr es:[si+bx]," " ;Zeile_A + (Z„hler)
mov byte ptr es:[si+bx+1],cl
add si,160d ;Verringer Zeile A um eine Zeile
cmp si,di ;vergleiche Strich mit Zeile_B
jb rechter_Strich
pop ds
pop es
popa
ret
CLS_RAHMEN endp
CODE ENDS
END