Sorry wszystkich za to że zwracam się do was z tak banalnym, a pracochłonnym problemem jakim jest opisanie linijka po linijce poniższego kodu programu w asemblerze. Ja nie mam pojęcia co tam się dzieje i nie potrafię tego opisać, a muszę oddać dokładnie opisany projekt. Jeżeli ktoś może mi pomóc, to z góry wielki dzięki i proszę nie odsyłajcie mnie do książek bo dużo mi to nie pomoże.
ASSUME CS:code, SS:DSTACK, DS:data
DSTACK segment stack
db 64 DUP ("stack")
DSTACK ENDSdata segment
dlugosc_lini dw 0 x dw 0 kolor db 13 pocz_x dw 0 pocz_y dw 0 szer_wyp dw 0 wys_wyp dw 0
data ENDS
code segment
Punkt PROC ; Procedura rysuje punkt
push dx
push dimov dl, kolor mov di, x mov es:[di+bx],dl pop di pop dx ret
Punkt ENDP
Przelicz_wsp PROC ; Przelicza współrzędne punktu
push cx
push axmov ax, pocz_x mov x,ax mov cx, pocz_y sss: add x, 320d loop sss pop ax pop cx ret
Przelicz_wsp ENDP
Plamka PROC ; procedura oczekująca na powrót plamki w pionie
mov dx,3dah
ram1:
in al,dx
test al,8
jnz ram1
ram2:
in al,dx
test al,8
jz ram2
ret
Plamka ENDPPrawy_bok PROC ; Rysuje linię skośną skierowaną w prawo
push cx
mov cx, dlugosc_linicall Przelicz_wsp ff: add x,320 ;dodajemy 320 do x czyli jakby 1 do y, ze wzgledu na szerokosc ekranu rowna 320 mov kolor, 10 call Plamka call Punkt mov kolor,0 call Plamka call Punkt loop ff pop cx ret
Prawy_bok ENDP
Lewy_bok PROC ; Rysuje linię skierowaną w gore
push cx
mov cx, dlugosc_linicall Przelicz_wsp gg: sub x, 320 ;ekran ma 320 punktow szerokosci, wiec jezeli odejmiemy 320 od x, to tak, jakbysmy odjeli 1 od y mov kolor,11 call Plamka call Punkt mov kolor, 0 call Plamka call Punkt loop gg pop cx ret
Lewy_bok ENDP
Podstawa PROC ; Rysuje linię poziomą skierowaną w lewo
mov cx, dlugosc_linicall Przelicz_wsp ee: dec x mov kolor, 12 call Plamka call Punkt mov kolor, 0 call Plamka call Punkt loop ee ret
Podstawa ENDP
Gora PROC ; Rysuje linię poziomą skierowaną w prawo
mov cx, dlugosc_linicall Przelicz_wsp ee: inc x mov kolor, 12 call Plamka call Punkt mov kolor, 0 call Plamka call Punkt loop ee ret
Gora ENDP
Start:
mov ax,data
mov ds,ax ; rejestr DS wskazuje nam segment z naszymi danymimov ax,0013h ;uruchamia tryb graficzny 320*240
int 10h
mov ax,0A000h
mov es,axpocz:
mov kolor,28mov dlugosc_lini,100
mov pocz_x,110
mov pocz_y,100
call Goramov dlugosc_lini,50
mov pocz_x,210
mov pocz_y,100
call Prawy_bokmov dlugosc_lini,100
mov pocz_x,210
mov pocz_y,150
call Podstawamov dlugosc_lini,50
mov pocz_x,110
mov pocz_y,150
call Lewy_boksprawdz_klawisz:
push es ;sprawdzamy czy nie został naciśnięty dowolny klawisz
xor ax,ax
mov es,ax
mov ax,es:[41Ah]
cmp ax,es:[41Ch]
pop es
jz poczmov ax,0003h ;jeżeli został naciśnięty klawisz to kończymy program
int 10hmov ax,0003h ;wraca do trybu dosowego
int 10hmov ax,4c00h ;zakończ
int 21hcode ENDS
end Start