Anonim / 11 miesięcy, 4 tygodnie temu | Download | Plaintext | Odpowiedz |

  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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
 format MZ
stack stk:256 
entry codseg:main 




macro pixel x0,y0{

push ax
push cx
push bx

push bp ; Zachowanie wartoci rejestru BP na stosie 

; określenie wsprzdnych pixel'a i obliczenie jego adresu


mov ax,[y0]; okrelenie wsprzdnej Y pixel'a
mov bx,[x0]; okrelenie wsplrzdnej X pixel'a


mov cl,bl ; mniej znaczcy bajt wsprzdnej X do BX
push dx
mov dx,80; wprowadznie do DX iloci blokw pixel'i w jednej linii
mul dx; (dx,ax)<-dx*ax


;przesunicie o AX 1-go bloku potrzebnej linii o wsprzdnej Y
pop dx
shr bx,1;
shr bx,1;
shr bx,1; przesunicie BX o trzy pozycje w prawo
add bx,ax; w BX znajduje si przesunicie bloku,
; który zawiera potrzebny pixel
mov ax,VideoB_Seg; adowanie do AX adresu segmentu buforu Video
mov es,ax; rejestr ES bdzie zawiera adres segmentu buforu Video
and cl,7 ; wyodrbnienie numeru pixel'a w bloku
xor cl,7 ; inwersja bitu
mov ah,1 ; przygotowanie maski bitu
shl ah,cl; przesunicie maski na odpowiedni pozycj
; mov ah,0FFh
; obsuga rejestrw kontrolera graficznego
mov dx,3CEh; zadanie adresu portu kontrolera graficznego
mov al,8 ; okrelenie numeru rejestru bitowej maski
out dx,ax ; zmiana rejestru maski bitowej
mov ax,0005h;
out dx,ax ; zadanie wartoci rejestru trybu
mov ah,0 ;
mov al,3 ;
out dx,ax ; zadanie wartoci rejestru cyklicznego przesunicia
mov ax,0D00h;
out dx,ax ; zadanie wartoci rejestru ustawi/resetowa
mov ax,0F01h;
out dx,ax ; zadanie wartoci rejestru ustawi/resetowa
; zmiana wartoci pixel'a
or [es:bx],al;
pop bp
pop bx
pop cx
pop ax
}




VideoB_Seg  EQU  0A000h;  Okrelenie segmentu buforu Video  
;------------------ Segment danych --------------------------- 
segment sdat use16        
TSIM     db ?




x dw ?
y dw ?
z dw ?
v dw ?
xx dw ?
yy dw ?

           
;--------------- Koniec segmentu danych *** 
;----------------- Segment stosu ----------------------------- 
segment stk  use16    
      db 256 dup (?) 
;----------------- Koniec segmentu stosu 
;----------------- Segment programu -------------------------- 
segment codseg use16         

main:
    push ds
    push bx 
    mov bx,sdat 
    mov ds,bx 

; Wywoanie funkcji BIOS'u w celu zmiany trybu pracy monitora na graficzny 
    mov ah,0
    mov al,10h; Tryb 640 X 350 ilo kolorw 16 
    int 10h





        mov cx,9Fh                                    ; najstarszy bit - ust. dł linii gł.
        mov ax,200; okrelenie wsprzdnej Y pixel'a 
        mov bx,300; okrelenie wsplrzdnej X pixel'a 
        bart:
        add ax,1                                        ; gęstość px




    call AA 
        loop bart 

        mov ax,189; okrelenie wsprzdnej Y pixel'a 
        mov bx,300; okrelenie wsplrzdnej X pixel'a 
        mov cx,16
        szym:
        add ax,6
        push cx
        push bx
        push ax
        mov cx,3
        add cx,ax
        sub cx,190
        bart2:
        add bx,1
        add ax,1
    call AA 
        loop bart2
        pop ax
        pop bx
        pop cx
        loop szym


        mov ax,189; okrelenie wsprzdnej Y pixel'a 
        mov bx,300; okrelenie wsplrzdnej X pixel'a 
        mov cx,16
        szym2:
        add ax,6
        push cx
        push bx
        push ax
        mov cx,3
        add cx,ax
        sub cx,190
        bart3:
        sub bx,1
        add ax,1
    call AA 
        loop bart3
        pop ax
        pop bx
        pop cx
        loop szym2


    pop bx 
    pop ds  

    mov  ah,1 
    int 21h 

    mov ax,0003h 
    int 10h 

    mov ah,1 
    int 21h 

    mov ax,4c00h 
    int 21h 
    ret









AA: 
     
;------MODYFIKACJA-------------

        push ax;                
        push bx;
        push dx;
        push bp; Zachowanie wartoci rejestru BP na stosie
        push cx;
; określenie wsprzdnych pixel'a i obliczenie jego adresu 

    
    mov cl,bl ; mniej znaczcy bajt wsprzdnej X do BX 
    push dx 
    mov  dx,80; wprowadznie do DX iloci blokw pixel'i w jednej linii 
    mul  dx; (dx,ax)<-dx*ax 
;przesunicie o AX 1-go bloku potrzebnej linii o wsprzdnej Y 
    pop  dx 
    shr  bx,1 ;
    shr  bx,1; 
    shr  bx,1; przesunicie BX o trzy pozycje w prawo 
    add  bx,ax; w BX znajduje si przesunicie bloku,  
; który zawiera potrzebny pixel 
    mov  ax,VideoB_Seg; adowanie do AX adresu segmentu buforu Video 
    mov  es,ax; rejestr ES bdzie zawiera adres segmentu buforu Video 
    and  cl,7 ; wyodrbnienie numeru pixel'a w bloku  
    xor  cl,7 ; inwersja bitu 
    mov  ah,1 ; przygotowanie maski bitu 
    shl  ah,cl; przesunicie maski na odpowiedni pozycj 
;   mov ah,0FFh
; obsuga rejestrw kontrolera graficznego 
    mov  dx,3CEh; zadanie adresu portu kontrolera graficznego 
    mov  al,8   ; okrelenie numeru rejestru bitowej maski
    out  dx,ax ; zmiana rejestru maski bitowej 
    
    mov  ax,0005h; 
    out  dx,ax  ; zadanie wartoci rejestru trybu 

    mov  ah,0   ; 
    mov  al,3   ; 
    out  dx,ax  ; zadanie wartoci rejestru cyklicznego przesunicia  

    mov  ax,0200h; 
    out  dx,ax  ; zadanie wartoci rejestru ustawi/resetowa 

    mov  ax,0f01h;
    out  dx,ax  ; zadanie wartoci rejestru ustawi/resetowa 
; zmiana wartoci pixel'a 
    or   [es:bx],al; 
        pop cx
        pop bp
        pop dx
        pop bx
        pop ax
    ret