-
Notifications
You must be signed in to change notification settings - Fork 0
/
rahmen.asm
128 lines (105 loc) · 4.56 KB
/
rahmen.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
.286
PUBLIC RAHMEN
ASSUME CS:CODE,DS:CODE,SS:CODE,ES:BILD
BILD SEGMENT AT 0b800h
BILD ENDS
; BX (ZEILEA,SPALTEA)
; DX (ZEILEB,SPALTEB)
CODE SEGMENT
RAHMEN proc Near
pusha
push es
push ds
mov ax,BILD ;lade bildspeicher-Adresse
mov es,ax ;nach es
xor ax,ax ;l”sche ax Register
;---------------------------------------------------------------------------
mov al,bh ; bx = (Spalte B / Spalte A)
xor bh,bh ; dx = (Zeile B / Zeile A)
mov bh,dl ; hier werden die Register BH mit BL
xor dl,dl ; vertauscht
mov dl,al
;---------------------------------------------------------------------------
Zeile_A_B:xor ax,ax ;AX wird gel”scht
mov al,2d
mul bl
xor bl,bl ;Spalte A wir aubereitet (Wert * 2)
mov bl,al ;und zurckgeschrieben nach bl
xor ax,ax
mov al,2d
mul bh
xor bh,bh ;Spalte B wir aubereitet (Wert * 2)
mov bh,al ;und zurckgeschrieben nach bh
Ecke1: xor ax,ax ;ax wird gel”scht
mov al,160d
mul dl ;Zeile A wird mit 160 multiplizier
add al,bl ;addiere Zeile A mit Spalte A
mov si,ax ;sichere Wert nach SI
push si ;Ergebnis auf Stack fr Ende des Stiches
sub al,bl ;subrt. Spalte A von Zeile A
push ax ;Zeilenanfang auf den Stack
mov byte ptr es:[si],"Ú" ;SI = Ecke1
mov byte ptr es:[si+1],cl
Ecke2: xor ax,ax ;seber beschiá wie oben nur mit dem
mov al,160d ;unterschied das Ecke = DI ist
mul dh
push ax ;Zeile B auf Stack
add al,bl ;addiere Spalte A mit Zeile B
mov di,ax
mov byte ptr es:[di],"À" ;DI = Ecke2
mov byte ptr es:[di+1],cl
add si,160d ;erh”he Eckewert1 um eine Zeile
linker_Strich:
mov byte ptr es:[si],"³" ;SI wird ver„nder um einen
mov byte ptr es:[si+1],cl
add si,160d ;senkrechten Strich zu erhalten
cmp si,di ;vergleiche Strich mit Ecke2
jb linker_Strich
Ecke3: xor dx,dx
pop dx ;hole Zeile A vom Stack
xor ax,ax
mov al,bh
add dx,ax ;Addiere Spalt B und Zeile B
xor si,si
mov si,dx
mov byte ptr es:[si],"Ù" ;SI = Ecke 3
mov byte ptr es:[si+1],cl
add di,2d ;erh”he Eckwert3 um eine Spalte
untere_Strich:
mov byte ptr es:[di],"Ä" ;DI wir ver„ndert um einen
mov byte ptr es:[di+1],cl
add di,2d ;wagerechten Strich zu erhalten
cmp di,si ;Vergleiche Strich mit Ecke3
jb untere_Strich
Ecke4: xor dx,dx
pop dx ;hole Zeile A vom Stack
xor ax,ax
mov al,bh
add dx,ax ;addiere Zeile A mit Spalt B
xor di,di
mov di,dx
mov byte ptr es:[di],"¿" ;di = Eckwert4
mov byte ptr es:[di+1],cl
sub si,160d ;verringere Ecke3 um eine Zeile
rechter_Strich:
mov byte ptr es:[si],"³"
mov byte ptr es:[si+1],cl
sub si,160d
cmp si,di
ja rechter_Strich
xor dx,dx
sub di,2d ;verringere Ecke4 um eine Spalte
pop dx ;hole Adresse von Ecke1 nach DX
oberer_Strich:
mov byte ptr es:[di],"Ä"
mov byte ptr es:[di+1],cl
sub di,2d
cmp di,dx ;vergleiche Strich mit Ecke1
ja oberer_Strich
pop ds
pop es
popa
ret
RAHMEN endp
CODE ENDS
END