Professional Documents
Culture Documents
.,'?.Y.' A
--~-,,,,,
~.1:-'f.~
A_~
l
l
~~~~~~d-~
ASSEM;BL-Y
Nyitott rendszer kpzs
-tvoktats -oktatsi segdlete
TANKNYV
LSI Oktatkzpont
A Mikroelektronika Alkalmazsnak
Kultrjrt Alaptvny
ISBN
9635771177
Tartalomjegyzk
Elsz
...... ,.................................................................................. 5
ELSZ
Ebben a knyvben megprblom egy kicsit mskppen
megkzelteni a gpi kd programozst mint ahogyan az az
eddig megjelent hasonl tmj kiadvnyokban trtnt. Nem
elssorban a programozs elmleti rszvel kvnok foglalkozni,
hanem sokkal inkbb annak gyakorlati oldalval. Clom az,
hogy mindenki, aki ezt a knyvet elolvassa, szert tehessen egy
olyan alaptudsra, amit mr sajt magtl tovbb tud fejleszteni
abba az irnyba, amire azt fel kvnja hasznlni. Ahhoz, hogy
valaki assembly nyelven programozzon lnyeges elnyt jelent
valamilyen magasabb szint (BASIC, PASCAL, stb.) nyelv
alapfok ismerete, mivel gy az itt lertak megrtse sokkal
egyszerbb vlik. Annak, aki mg soha nem programozott
szmtgpet azt tancsolom, hogy tegye vissza a polera ezt a
knyvet, s prblkezzon az elbb emltett nyelvek valamelyiknek megismersvel, gy biztosan sokkal hamarabb lesz
sikerlmnye. Annak pedig, aki gy dnt, hogy mgis belevg,
annak sok sikert kvnok.
Agrdi Gbor
is ll a szmitgp:
kvetkezk:
10
mkdse:
AX
46
5
1649
655 36
Hexadecimlis
Binris
AH
AL
00000000 0010111 o b
00000000 00000101 b
0000011 o 01110001 b
1111111111111111 b
AHAL
002Eh
0005h
06 71 h
OFF FF h
0101110000001001b
0000000000001101b
A cm:
(5A09h)
(OOO Dh)
01011100000010010000b (5A090h)
+
0000000000001101b ( OOODh)
= 01010110000010011101b (5A09Dh)
Ugyanezt rhetjk el gy is:
Szegmensregiszter:
lndexregiszter:
A cm:
0101011010110101b
0011010101001101b
(56B5h)
(354 Dh)
01010110101101010000b (56B50h)
0011010101001101b ( 354Dh)
= 01010110000010011101b (5A09Dh)
12
cs
DS
ES
ss
Code Segment
Data Segment
Extra Segment
Stack Segment
Kdszegmens
Adatszegmens
Extraszegmens
Veremszegmens
Az indexregiszterek pedig:
SI
Dl
Source Index
Destinatien Index
Forrsindex
Clindex
assembly
szvegszerkesztre
13
Segment
assume CS:Kd, DS:Adat, SS:Stack
Start:
Kd
Ends
Adat
Segment
Adat
Ends
Stack
Segment
Stack
Ends
End
Start
Segment
assume CS:Kd, Ds:Kd
Org
100h
Start:
Kd
14
En ds
End
Start
Segment
;Szegmensdefinci.
assume Cs:PeldaOI, Ds:PeldaOI ;Cs s ds regis2terek belltsa
;a szegmens elejre.
Start:
mov
mov
u,PeldaOI
ds,u
;A ds regiszter belltsa.
IS
ax,4c00h
21h
En ds
End Start
;Kilps a DOS-ba
;A szegmens vge.
;A program vge.
16
ax,42527
;Ax regiszterhe tlti a 42527 szmot.
ax,52h
;Ax regiszterhe tlti a 52h (82) szmot.
al,62
;Al regiszterhe tlti a 62 szmot.
ax,bx
;Ax regiszterhe tlti bx rtkt
al,bh
;AI regiszterhe tlti bh rtkt
ax,cmke
;Ax regiszterhe tlti a cmke szegmenseimt
ax,word ptr lcmkel
;Ax regiszterhe tlti a cmke 16 bites
;tartal mt.
al,byte ptr [cmke)
;Ax regiszterhe tlti a cmke 8 bites
;tartalmt
ax,[si)
;Ax regiszterhe tlti az indexregiszter
;ltal mutatott 16 bites rtket.
al,[si)
;AI regiszterhe tlti az indexregiszter
;ltal mutatott 8 bites rtket.
ax,[si+2J
;Az indexregiszter+2 cm ltal
;mutatott adat kerl ax-he.
ax,[si+bx+2)
;Mint elbb. de si+bx+2 cmen lev.
ax,es:[si)
;Ha nem az alaprtelmezs szerinti ds
;ltal mutatott szegmensbl kvnunk
adatot tlteni a regiszterhe. akkor azt gy
;kell jellni.
u,es:[si+2)
mov
u,es:(si+bx+2)
;lv
ax.,offset cmke
mov
mov
mov
[si),ax
mov
[si),al
mov
[si+2J,ax
mov
(si+bx+2J,ax
mov
es:[si),ax
mov
es:(si+bx),ax
mov
es:[si+bx+2),ax
17
18
Segment
assume cs:Pelda02,ds:Pelda02
;Szegmensdefinci.
;Cs s ds regiszterek bell;!sa a szegmens elejre.
Start:
mov
mov
ax,Pelda02
ds,ax
;A ds regiszter belltsa.
mov
mov
ax,Ob800h
es,a:x
mov
di,ll46
;A di indexregiszterbe
;belltja az offsetcmet.
mov
ai,"A"
mov
ah,7
mov
es:[di[,ax
19
as,4c00b
2lb
En ds
End Start
;Kilps a DOS-ba.
;A szegmens vge.
;A program vge
Segment
assume cs:Pelda03,ds:Pelda03
;Szegmensdefinci.
;Cs s ds regiszterek bell;tsa a szegmens elejre.
Start:
mov
mov
as,Pelda03
ds,ax
;A ds regiszter belltsa.
mov
mov
as,Ob800b
es,as:
mov
mov
ab,O
mov
bl,160
mul
bl
20
di,ax
mov
mov
ab,O
;Nullzza ab-t
mov
mul
add
bl,l
bl
di,ax
mov
mov
mov
es:(diJ,ax
mov
int
KOORD_X: db
KOORD_Y:db
BETU:
db
SZIN:
db
Pelda03
ax,4c00b
l lb
;Kilps a DOS-ba.
40
ll
"A"
7
Eo ds
End Start
;A szegmens vge.
;A program vge
21
22
Segment
assume cs:Pelda04,ds:Pelda04
;Szegmensdefinci.
;Cs s ds regiszterek bell;tsa a szegmens elejre.
ax,Pelda04
ds,ax
;A ds regiszter belltsa
mov
mov
ax,Ob800b
es,u
mov
mov
bl,l60
mul
bl
mov
di,ax
mov
mov
mul
add
di,ax
mov
mov
.l_Pelda04: mov
al,(siJ
cmp
al,255
jz
V ege
mov
es:(diJ,ax
Start:
23
di,l
;A kvetkez kperny-pozci
inc
si
;A kvetkez bet.
jmp
. l_Pelda04
V ege:
mov
int
all,4c00h
2lh
:Kilps a DOS-ba.
KOORD_X:
KOORD_Y:
SZOVEG:
SZIN:
db
db
db
db
30
12
"A kiratand szveg",2SS
7
Pelda04
En ds
End Start
;A szegmens vge.
;A program vge
24
mveletek:
25
A not mvelet
mkdse:
mkdse:
eredmny_-
26
1100
1010
1000
-------------"-~-=----.0..:....------
1100
1010
1110
1100
1010
0110
27
mkdse:
A rol utasts
mkdse:
28
29
Segment
assume cs:PeldaOS,ds:PeldaOS
;Szegmensdefinei
;Cs, ds belltsa
Start:
mov
mov
u,PeldaOS
ds,u
mov
mov
u.,Ob800h
es.u
mov
int
u.,3
l Oh
xo r
di,di
;Di nullzsa.
mov
si,offset SZOVEGl
call
Kiirol
mov
call
mov di,l60
:A kvetkezszveg
;kezdcme.
mov
call
mov
call
30
si,offset SZOVEG2
Kiirol
bl,byte ptr [SZAM2[
Kiiro2
Kiirol
.l_Kiirol:
Kiirol
mov
mov
call
di,3:ZO
si,otfset SZOVEG3
Kiirol
mov
and
call
mr
int
u,ax
;Billen~.
mov
int
u,4c00b
l lb
16b
Proc
;Kilps a DOS-ba.
mov
ex, l 6
mov
ab,l5
mov
al,[si)
mov
es:[di),ax
;A Itiratand bett al
;regiszterbe tlti, Dlllid
;kirja es:[di) ltal
;mutatott cmre.
add
inc
di,l
si
;A kvetkez karakterpozc.
;A kvetkez karakter.
loop
.t_Kiirol
ret
;Visszatrs a hv
;programrszhez.
bdp
;A rutin vge.
31
.l_Kiirol:
.l_Kiirol:
Proc
add
di,6
;Hrom karakterpozcival
;arrbb lp. l
mov
cx,B
mov
ab, lS
mov
ai,"O"
sbl
b l, l
j ne
.l_Kiirol
mov
al,"l"
mov
es:(diJ,u
;A szmjegyet a kpemyre
;rjuk.
add
di,l
loop
. l_Kiirol
ret
; Visszatrs a rutinbl.
Kiirol
End p
;A rutin vge.
SZOVEGI:
SZOVEGl:
SZOVEGJ:
SZAMl:
SZAMl:
db
db
db
db
db
PeldaOS
En ds
End Start
32
------=-==-=-=-=-~.:.....=..--"---'-'='.------'------'--"-"-''------
------ -- -
33
Segment
assume cs:Pelda06,ds:Pelda06
;Szegmensdefinici
;Cs, ds bellitsa
Start:
mov
mov
ax.,Pelda06
ds,ax
mov
mov
ax.,Ob800h
es,ax
34
u,3
l Oh
xo r
di,di
;Di nullzsa.
mov
si,oft'set SZOVEGI
call
Kiirol
mov
call
mov di,160
Kiirol
.l_Kiirol:
mov
call
si,oft'set SZOVEG2
Kiirol
mov
cl, l
mov
ro r
call
xo r
int
ax,ax
16h
;Billentyvrs.
mov
int
ax,4c00h
ll h
;Kilps a DOS-ba.
Proc
mov
cx,ll
;A szveg 21
mov
ah, l 5
mov
al,[ si)
mov
es:[di),ax
;A kiratand bett al
;regiszterbe tlti, majd
;kiilja es: [d i) ltal
;mutatott cmre.
ll.
35
di,l
si
;A kvetkez karakterpozci.
;A kvetkez karakter
loop
.I_Kiirol
ret
;Visszatrs a hiv
;programrszhez.
Kiirol
End p
;A rutin vge.
Kiirol
Proc
.I_Kiirol:
.l_Kiirol:
Kiirol
36
add
di,6
;Hrom karakterpozcival
;arrbb lep.
mov
cx,S
mov
ah,l5
mov
ai,"O"
shl
bl,l
j ne
.l_Kiirol
mov
al,"l"
mov
es:(di),ax
;A szmjegyet a kpemyre
;rjuk.
add
d i,l
loop
.l_Kiirol
re t
;Visszatrs a rutinbl.
End p
;A rutin vge.
En ds
End Start
;A szegmens vge.
;A program vge.
Segment
assume cs:Pelda07,ds:Pelda07
;Szegmensdefinci
;Cs, ds belltsa
Start:
mov
mov
ax,Pelda07
ds,ax
mov
mov
ax,Ob800h
es, u
mov
int
ax,J
l Oh
xo r
d i, d i
;Di nullazsa.
mov
bx,offset HEXTABLE
37
mov
ah,l5
mov
cx,4
mov
cx,4
llOr
al,al
;Trli az al regisztert.
dx,l
al, l
l_Pelda07
.l_Pelda07: shl
rel
loop
;A szmjegynek megfelel
;karakterkdot tlti al
;regiszterhe
x! at
kpemyre.
mov
es: [di],ax
;s ezt kirja a
add
di,l
pop
Cll
loop
.l_Pelda07
;A kvetkez szmjegy
;kiratsa.
llOr
int
ax,ax
16h
;Billentyvrs.
mov
int
ax,4c00h
ll h
;Kilps a DOS-ba
HEXSZAM:dw
5bleh
;A kirand szm.
HEXTABLE: db
"Oil3456789ABCDEF"
;Konvertl tbla.
Pelda07
38
Ends
End Start
;A szegmens vge.
;A program vge.
[Program 8)
Pelda08
Segment
assume cs:Pelda08,ds:Pelda08
;Szegmensdefinici
;Cs, ds belltsa
Start:
mov
mov
ax,Pelda08
ds,ax
mov
mov
ax,Ob800h
es,ax
mov
int
ax,3
tO h
mov
di,otfset SZAMHELY
mov
mov
bx,lO
; Az oszts mrtke.
xor
cx,cx
;A szmll nullzsa.
.t_Pelda08: xor
div
dx,dx
bx
[di),dl
mov
40
ex
;A szmll nvelse.
inc
di
or
jnz
ax,ax
l_Pelda08
;Ax vizsglata.
;ha nem O, ugrs vissza.
mov
dec
si,di
si
xo r
di,di
;Di nullzsa.
mov
ab, IS
;Sznbellts.
.2_Pelda08: mov
al,[si)
edd
mov
a1,48
es:[di),ax
add
d i,2
;Kvetkez
dec
si
;Elz
too p
.2_Pelda08
;Ismtls a szmjegyek
;szmnak megfelelen.
xo r
int
ax,ax
16b
;Billentyvrs.
mov
int
ax,4c00b
2 lb
;Kilps a DOS-ba.
DECSZAM: dw
34576
SZAMHELY:db
Pelda08
En ds
End Start
pozci.
szmjegy.
;Szegmens vge
;Program vge
41
Segment
assume cs:Pelda09,ds:Pelda09
;Szegmensdefinci
;Cs, ds belltsa
Start:
mov
mov
ax,Pelda09
ds,u
mov
mov
u,Ob800h
es,ax
mov
int
ax,J
l Oh
u,200h
l ah
;A:z id lekrdezse
.l_Pelda09: mov
int
42
Kiiro
Kiiro
call
Kiiro
;s kirsa.
mov
int
u,lOOb
16b
jz
. l_Pelda09
xo r
u,ax
16b
int
mov
int
ax,4c00b
ll b
;s visszatr a DOS-boz.
;A rutin kezdete.
Proc
mov
di,1670
mov
ab, lS
;Sznbellts
mov
bx,cx
call
Kiirol
;kirja az ra rtkt
add
d i,l
;Helyet hagy a
call
Kiirol
;Kirja a percet
add
di,l
;A kettspont helye.
mov
call
bb,db
Kiirol
mov
mov
mov
al,":"
es:[di-6),ax
es: [di-ll),ax
kettspontnak
ret
;Visszatrs a rutinbl.
End p
43
Proc
.l_Kiiro2:
mov cll,l
push Cll
;Egyszerre 2 szmjegyet
;runk ki.
.2_Kiiro2:
mov
u,4
xo r
al,al
;Al nullzsa.
shl
rel
Ioop
bx,l
al, l
.2_Kiiro2
add
mov
al,48
es:[di),ax
;talaktja karakterkdd
;s kilja a kpemyre.
add
di,2
;A kvetkez kphely.
pop
loop
Cll
;A kvetkez szmjegy.
.l_Kiiro2
rel
;Visszatrs a rutinbl.
Kiiro2
End p
Pelda09
En ds
End Start
;A szegmens vge.
;A program vge.
44
Segment
assume cs:PeldalO,ds:PeldalO
;Szegmensdefinci.
;Cs, ds belltsa."
Start:
mov
mov
ax,PeldalO
ds,ax
mov
mov
ax,Ob800h
es,ax
;Videomemria szegmenseimt
;es regiszterhe tlti.
45
u,3
lOb
;Kpernytrls.
call
Kiiro
;A menpontok kiratsa.
.l_PeldalO: call
Cs ik
;A mutat kiraksa.
.l_PeldalO: mov
int
jz
IOr
int
u,lOOb
l 6b
.l_PeldalO
;Billentyzet
figyels.
U,Bll
l6b
cm p
jz
ab,lcb
Enter
;Enter figyelse
;Ugrs ba az.
cmp
joz
ab,48b
.3_Peldal0
cm p
jz
dec
jmp
l_PeldalO
.J_PeldalO: cm p
joz
ab,50h
.2_Peldal0
;Ha aMUrATOmgnem az
cm p
jz
inc
jmp
Enter:
.l_Enter:
46
mov
;Cl ciklusvltozha a
el,byte ptr [MUTATO)
;MUI'ATO rtkt tlti.
mov
mov
add
loop
si,otfset ClMEK
bx,[si)
si ,2
.l_Enter
jmp
bx
.J_Enter:
mov
int
jz
mr
int
cm p
jz
cmp
u,lOOb
16b
.J_Enter
u, u
l 6b
ab,llb
.4_Enter
ab,l7b
jnz
.J_Enter
jmp
Start
.4_Enter:
mov u,4c00b
int
l lb
;Klps a DOS-hoz.
Menul:
Menu2:
mov
call
jmp
si,offset SZOVEG2
Kiirol
.l_Enter
Menu3:
mov
call
jmp
si,offset SZOVEGJ
Kiirol
.l_Enter
Menu4:
Menu5:
mov
call
jmp
Cs ik
Proc
mov
mov
si,offset SZOVEG5
Kiirol
.l_Enter
47
.l_Csik:
.2_Csik:
xo r
mul
add
mov
mov
mov
mov
add
loop
ah,ah
bl
ax,l499
di,ax
cx,ll
al,7
es:[di),al
d i,2
.l_Csik
mov
mov
mov
xo r
mul
add
mov
mov
mov
mov
add
loop
si,offset MENUK
ah,7
di,l660
;A mr ismert szveg
;kirat rutin azzal a
;kiegsztssel, hogy a
;O kdra az eltrolt di
;rtk! kiolvassa, hozzad
;160-at (igy sort emel),
;majd ismt elmenti .
;A 255 kd jelenti a szveg
;vgt s a rutinbl val
;visszatrst.
;s kiszmalja a mutat
;kezdcmt.
ret
C sik
End p
Kiiro
Proc
mov
mov
mov
.l_Kiiro:
push d i
.2_Kiiro:
mov
inc
cm p
jz
cm p
jz
mov
add
jmp
48
al,[ si)
si
ai,O
.J_Kiiro
al,255
.4_Kiiro
es:[di[,ax
d i,2
.2_Kiiro
.4_Kiiro:
pop
add
jmp
di
di,l60
.l_Kiiro
pop
di
ret
Kiiro
Endp
Kiiro2
Proc
mov
xo r
shl
mov
mov
mov
mul
add
add
mov
al,[si)
ah,ah
ax,l
di,ax
al,[ si +l)
b l, l 60
bl
di,ax
si,2
ah,12
.l_Kiiro2:
mov
inc
cm p
jz
mov
add
jmp
al,[ si)
si
ai,O
.2_Kiiro2
es:[di),ax
d i,2
.l_Kiiro2
.2_Kiiro2:
ret
Kiiro2
End p
MUTATO: db
MUTAT02:db
MENUK:
db
db
db
db
db
49
db
db
db
db
db
KERDES:
db
CIMEK:
dw
dw
dw
dw
dw
offset Menu l
offset Menu2
offset Menu3
offset Menu4
offset Menu5
PeldalO
En ds
End Start
Nos a program mrettl nem szabad megijedni, mert rszegysgeiben vizsglva nagyon sok minden ismersnek tnhet.
Egybknt ez valjban egy parnyi program, a gyakorlatban ilyen
rvid feladattal ritkn tallkozunk.
Egy program mkdsnek elemzsekor az egyik megkzelts az, amikor a programot rszegysgeiben vizsgljuk s csak az
egyik programrszbl a msikba tvitt paramtereket kell szmontartani a pontos mkds megrtshez. Ez a mdszer itt is clravezet.
50
51
S2
SJ
Segment
assume cs:Peldall,ds:Peldall
;Szegmensdefinci.
;Cs s ds regiszterek
;Hozzrendelse a crnkkhez.
Start:
mov
mov
ax,Peldall
ds,ax
mov
int
ax,J
l Oh
;Kpernytrls.
mov
mov
int
mov
mov
int
mov
ax,4a00h
;A program ltal lefoglalt
;memriaterletet 16K
bx,l024
21 h
;mretre vltoztatjuk
ax,4800h
Xrnk a DOS-tl egy
;64K mret memrialapot
bx,4096
21 h
word ptr [MEMOCIMJ,ax;Ennek szegmenseimt a
;memriavltozba tesszk_
mov
mov
int
mov
ax,JdOOh
;A FILENEV alatt trolt nev
dx,offset FILENEV
;file megnyitsa olvassra.
2lh
word ptr [FILESZAM[,ax;A visszakapott file azonost
;informcit a memriba mentjk.
54
;A ds regiszter rtkt
ds
;elmentjk, mivel mi nem
bx,ax
ax,word ptr [MEMOCIM);a ds ltal mutatott
;szegmensre kvnunk betlteni
ds,ax
;hanem az ltalunk lefoglaltax,JfliOb
;ra. A DOS htrnya viszont,
dx,dx
;hogy a betltend file
cx,Oftlh
;helyet a ds :dx regiszterben
2lh
;kell megadni a rutinnak.
pop
ds
mov
mov
int
;A file lezrsa.
ax,JeOOh
bx,word ptr [Fll..ESZAM]
2lh
xo r
xo r
mov
mov
push
mov
mov
mov
xo r
.l_Peldall: mov
inc
cm p
jz
di,di
si,si
al,ds:[si)
si
al,l3
.2_Peldall
;A kiral rutin.
cm p
jz
al,255
Kilepes
mov
add
jmp
es:[di+bx),ax
bx,2
.l - Peldall
;A bet kiratsa s a
;pozcik lltsa.
;j bet.
add
jmp
bx,bx
si
d i, l 60
.I_Peldall
pop
ds
;A ds eredeti rtknek
;visszalltsa.
.2_Peldall: xo r
inc
Kilepes:
;A ds visszalltsa.
55
8li,8X
mov
int
&ll,4c00h
21 h
FILESZAM:dw
MEMOCIM:dw
FILENEV: db
Peldall
;Billentyvrs.
16h
?
?
"nevek.txt",O
En ds
End Start
;Kilps a DOS-hoz
56
57
Segment
assume cs:Peldall,ds:Peldall
Start:
mov
mov
mov
es,ax
eid
mov
mov
mov
mov
cx,47
di,offset SZOVEG
si,offset SZO
al,[si]
u,Peldall
ds,ax
joz
Nincs
;Szegmensdefinci
;Cs,ds kijellse
;Ds,es regiszter belltsa
;a kd elejre.
;A d jelzhitet tri.
;A vizsglt szveg hossza.
;A szveg s a keresett
;sz cmnek belltsa.
;Al regiszterbe a keresett
;sz kezdbetjt tlti.
;Es:di cmen lv karaktert
;sszehasonltja al rtkvel
;s ha nem egyezik, nveli
;di-t,cskkenti ex-et s
;ismtli mindezt, mg nem
;tall egyez bett, vagy ex
;rtke nem O.
;Ha a vizsglatbl val
;kilpskor z flag rtke
;O, akkor vgignzte a
;szveget s nem tallt
;egyez bett.
dec
di
push ex di si
58
Nincs:
TalaJt:
Kilepes:
Kiiro
.l_Kiiro:
movcx,6
repz cmpsb
pop
si di ex
;A regiszterek visszatltse.
jz
Talalt
inc
jmp
di
.l_Peldal2
mov
call
jmp
si,offset UZENETl
Kiiro
Kilepes
mov
mov
sub
push
call
si,offset UZENET2
ax,di
ax,offset SzOVEG
ax
Kiiro
;UZENET2 kiratsa,
;a megtallsi pozcibl
;kivonjuk a szveg offsetcmt
;s ezt elmentjk a szmkir
;rutin szmra.
pop
call
ax
Kiiro2
;Ax elhvsa,
;a szm kiratsa.
xo r
int
mov
int
ax,ax
16h
ax,4c00h
21 h
;s kilps.
;Billentyvrs.
;Kilps a DOS-ba.
Proc
mov
mov
mov
int
xo r
mov
ax,Ob800h
es,ax
ax,J
l Oh
di,di
ah,l5
;Kperny-bellts.
mov
inc
al,[si)
si
;Az Si cmen
;kiratsa.
lv
szveg
59
ret
Kiiro
Eodp
Kiirol
Proc
.l_Kiirol:
60
ai,O
.l_Kiiro
es:[di[,u
di,l
.l_Kiiro
mov
di,otrset SZAMHELY
mov
bx,lO
xo r
Cli,CX
;A szmll nullzsa.
xo r
div
dx,dx
bx
mov
[di),dl
inc
ex
;A szmll nvelse.
inc
di
or
joz
ax,ax
.l_Kiirol
;Ax vizsglata,
;ha nem O, ugrs vissza.
mov
dec
si,di
si
mov
di,44
mov
ah, lS
;Sznbellts.
mov
al,(si(
add
mov
al,48
es:(di(,ax
add
d i,l
;Kvetkez
dec
si
;Elz
loop
.l_Kiirol
;Ismtls a szmjegyek
;szmnak megfelelen.
xo r
int
ax,ax
16h
;Billentyvrs.
mov
int
ax,4cOOh
ll h
;Kilps a DOS-ba.
pozci.
szmjegy.
ret
Kiirol
End p
SZOVEG:
db
SZO:
db
"amiben"
;A keresett sz.
UZENETl: db
UZENETl: db
SZAMHELY:db
5 dup (O)
Peldall
En ds
End Start
nagyon
egyszer
egy
62
63
[Program 13)
PeldalJ
Segment
assume cs:PeldalJ,ds:nothing
Start:
mov
si,80h
;A OTA
;teszi.
mov
inc
cl,lsil
si
;A paramterrsz hosszat u
;regiszterbe teszi s a
;mutatt eggyel nveli.
64
kezdeimt
si-be
u,Ob800b
es,u
;A videomemria kezdeimt
;es regiszterile tlti.
.l_Pelda13: mov
call
mov
ab,"/"
Keres
dx,si
;A l jel keresse.
mov
call
ab,","
Keres
;A , karakter keresse.
push ex
mov
mov
sub
sub
dec
call
pop
push
mov
mov
call
cx,si
di,si
di,l
C:l,dx
ex
Szamito
ex
dx
dx,si
ab,","
Keres
push
mov
mov
sub
sub
dec
call
ex
C:I,S
di,si
di,l
ex
Szamito
pop
pop
ex
di
sbl
di,l
mov
mov
mul
add
u,dx
bl,160
bl
di,ax
c:~,dx
65
;Kpemytrls.
ah,15
al,[si)
es:[di),ax
si
di,2
.2_Pelda13
xo r
int
ax,ax
16h
;Billentyvrs.
mov
int
ax,4c00h
21 h
;Kilps.
al,[si)
si
cl
al, ah
.l_Keres
bl,l
dx,dx
al,[di)
;A legkisebb helyirtk.
;Ox nullzsa.
;A di ltal mutatott szmjegyet
;al regiszterhe tlti.
dec
di
;Cskkenti di-t
sub
al,48
mov
int
mov
.2_Pelda13: mov
mov
inc
add
loop
Keres
Proc
.l_Keres:
mov
inc
dec
cm p
jnz
re t
Keres
End p
Szamito
Proc
mov
xo r
.I_Szamito: mov
66
bl
add
dx,ax
mov
mul
mov
ax,IO
bl
bll,ax
;A kvetkez helyirtket
;gy kapjuk, hogy a jelenlegit
:megszorozzuk 10-el.
loop
.l_Szamito
ret
Szamito
En dp
Peldall
En ds
End Start
68
Segment
assume cs:Pelda14,ds:nothing
Prg_SlSS
Prg_timer
Timer
equ
equ
equ
6lb
43b
4lb
;A 8255 portcme
;A:z oszt programozsnak
;s belltsnak portcme.
69
mov ai,IOllOllOb
out Prg_timer,al
mov
out
mov
out
u, ll 93
Timer,al
al,ah
Timer,al
in
or
out
ai,Prg_8l55
ai,OOOOOOllb
Prg_8l55,al
;A hangszr bekapcsolsa
cs,Oflllh
.l_Peldal4
ai,Prg_8155
al,llllllOOb
Prg_8l55,al
u,4c00h
ll h
;A hangszr kikapcsolsa.
mov
.I_Peldal4: loop
in
and
out
mov
int
Peldal 4
;Kilps a DOS-ba.
En ds
End Start
70
mkdse:
[Program 15]
PeldalS
Segment
assume cs:PeldalS, ds:PeldalS
org lOOh
;Szegmensdefinci
;Cs,ds hozzrendelse.
;A program kezdcme.
Start:
jmp
Init
Drive_lnt
dd
Rutin
Proc Far
assume cs:PeldalS,ds:Nothing
pushf
push u: ex
72
mov
out
al,10110110b
43h,al
mov
out
mov
out
ax,SOO
4lh,al
al,ab
4lb,al
al,61h
ai,OOOOOOllb
61h,al
;A hangszr bekapcsolsa
cx,Oft'tb
.l_Pelda15
in
and
out
al,61h
al,llllllOOb
61h,al
;A hangszr kikapcsolsa.
pop
ex ax
call
Drive_lnt
iret
Rutin
En dp
Init:
eli
;Kls megszaktskrsek
;engedlyezsnek tiltsa.
mov
.l_Peldal5: loop
mov
int
mov
mov
ax,3513h
;Az lntlJ rutin eimt
21 h
;ES:BX-be tlti
word ptr [Drive_lnt),bx ;s a Drive_lnt cmre rja.
word ptr [Drive_lnt+l),es
mov
mov
int
ax,2513h
dx,otfset Rutin
21 h
sti
mov
int
Peldal 5
;Megszaktst engedlyezi
dx,offset Init
27h
En ds
End Start
73
74
AAS
75
AAM
id
(rajel ciklus): 60
DAA
Mdostott flagek: sf zf af pf ef
Vgrehajtsi
DAS
id
(rajel ciklus): 4
76
DEC
INC
id
ADD
id
elshz
Mdostott flagek: of sf zf af pf ef
Vgrehajtsi
SUB
id
ADC
SBB
77
MUL
id
IDIV
id
IMUL
id
MOV
78
id
id
MOVS
MOVSB
MOVSW "Move String Byte/Word" 05:51 ltal cmzett byte-ot
illetve wordt E5:DI cmre ~a majd Diraction flag
rtktl fggen nveli (d=O) illetve cskkenti (d=1) di
s si regisztereket byte-os mveletnl eggyel
wordsnl pedig kettvel.
Mdostott flagek: nem befolysolja a flagek llst.
Vgrehajtsi id (rajel ciklus): 9+17 (25)/rep
STOS
STOS B
STOSW "Store String Byte/Word" al illetve ax tartalmt E5:DI
cmre rja, majd d flagtl fggen nveli illetve
cskkenti di rtkt
Mdostott flagek: nem befolysolja a flagek llst.
Vgrehajtsi id (rajel ciklus): 9+10 (14)/rep
LODS
LODSB
LODSW "LOaD String Byte/Word 05:51 ltal cmzett byte vagy
word tartalmt al illetve ah regiszterbe tlti s az si
rtkt a d flagtl fggen vltoztatja.
Mdostott flagek: nem befolysolja a flagek llst.
Vgrehajtsi id (rajel ciklus): 9+13 (17)/rep
LEA
79
id
LES
id
XLAT
id
XCHG
id
(rajel ciklus): 11
80
SAHF
id
(rajel ciklus): 4
CBW
id
(rajel ciklus): 4
CWD
CMP
81
id
SCAS
SCASB
SCASW "SCAn String Byte/Word" al illetve ax tartalmt sszehasonltja ES:DI ltal mutatott memriarekesz tartalmval s a jelzbiteket ennek megfelelen lltja be. Az
utasts segtsgvel knnyen megtallhat egy adat
elfordulsi helye.
Mdostott flagek: of zf ef pf sf af
Vgrehajtsi
TEST
id
"TEST" hatsa azonos az AND mvelettel, de a regiszterek rtkt nem vltoztatja meg, csak a flaget.
Mdostott flagek: of ef sf zf pf
Vgrehajtsi
CLC
id
STC
id
(rajel ciklus): 2
82
id
(rajel ciklus): 2
CLD
id
(rajel ciklus): 2
irnyjelz
Mdostott flagek: df
Vgrehajtsi
STD
id
(rajel ciklus): 2
irnyjelz
Mdostott flagek: df
Vgrehajtsi
Cll
id
(rajel ciklus): 2
STI
"SeT
lnterrupt
engedlyezse.
flag"
hardware
megszaktsok
Mdostott flagek: if
Vgrehajtsi
IN
id
(rajel ciklus): 2
OUT
id
id
OUTS
OUTSB
OUTSW "OUTput String Byte-Word to i/o port" DS:SI ltal cmzett adat kldse a kijellt porton keresztl, majd si regiszter nvelse vagy cskkentse.
Mdostott flagek: nem befolysolja a flagek llst.
Vgrehajtsi
PUSH
id
PUSHF
id
84
POPF
id
JMP
JA
eljel
nlkl nagyobb.
85
eljel
nlkl kisebb.
id
JNZ
id
egyenl.
id
eljelesen
nagyobb.
id
eljelesen
kisebb vagy
egyenl.
id
eljelesen
nagyobb
86
id
eljelesen
id
LOOPZ
id
87
CALL
id
{rajel ciklus): 2
INT
id
INTO
id
RET
RETF
id
88
id
NOT
"Not"
id
logikai
(rajel ciklus): 32
nem mvelet.
lltja.
az
operandus
bitjeit
ellenkez rtkre
id
AND
id
"AND" logikai s
eredmnyei:
00
01
1o
11
o
o
o
00
o1
1o
11
Mdostott flagek: of sf zf pf ef
Vgrehajtsi
OR
id
1
1
Mdostott flagek: of sf zf pf ef
Vgrehajtsi
id
00
o1
1o
11
o
1
1
Mdostott flagek: of sf zf pf ef
Vgrehajtsi
ROL
id
ROR
id
ellenkezje.
itt a
Mdostott flagek: ef of
Vgrehajtsi id (rajel ciklus): 2-36
RCL
RCR
SHL
SHR
90
id
mkdse
megegyezik az SHL
Mdostott flagek: ef zf of pf sf
Vgrehajtsi
SAR
id
"Shift Aritmetical Right" az adatot jobbra tolja s bal oldalra a signum bit rtke rdik.
Mdostott flagek: ef zf of pf sf
Vgrehajtsi
HLT
id
LOCK
id
(rajel ciklus): 2
W AIT
id
(rajel ciklus): 3
91
fknt
ciklusok
92
id
(rajel ciklus): 3
GRAFIKA
Az IBM PC prograrnak manapsg egyre ritkbban
hasznlnak szveges zemmdot. helyette inkbb kis grafikus
brkkal. ikonokkal segtik a program hasznlatt s teszik
eszttikusabb Ezek programozshoz ismerni kell a grafikus
kperny kezelst, s egyb grafikus eljrsokat. Ebben a
fejezetben errl lesz sz.
A PC-k grafikai kpessge alapveten hardware fgg. Ezt
grafikus
krtya
van
a
meghatrozza,
hogy milyen
szmtgpben no s persze. hogy milyen a monitor. Ezek i!
krtyk elg sok paramterben klnbznek egymstl. ezek
kzl a fontosabbak: felbonts, sznmegjelent kpessg,
memria s egyb hardware programozsi paramterek. A
legegyszerbb ami
mg hasznlatos, azaz gynevezett
HERCULES tpus, melynek felbontsa 720*348 kppont. A
manitor szne ltalban borostyn vagy zld szakott lenni.
Tulajdonsgaira kln nem trnk ki. A knyvben rszletesen
trgyalt manitor krtya tpusok a CGA. EGA, VGA, SVGA.
A CGA ZEMMD
A legelszr ismertetsre kerl krtya a CGA melynek.
grafikus felbontsa 320*200 kppont egyszerre maximum ngy
93
A kperny-memria szegmenscme OBBOOh. Az egyes lapok hossza knnyen kiszmolhat, mivel 4 fle szn kivlasztshoz legalbb 2 bit szksges, igy 1 byte-on 4 kppontot trolhatunk. Egy lapon 320*1 00 kppont van, aminek memriaignye
32000/4 Byte azaz 8000. Mivel a 16000 a szmtstechnikban
nem egy kerek szm, ezrt a 16384-hez fennmarad 384-et kt
egyenl rszre osztottk, igy a pros sorok OBBOO:OOOOh cmen,
a pratlanok pedig a OB800:2000h cmen kezddnek. Mndez
640*200-as felbontsnl annyiban vltozik, hogy egy kppontot
nem 2 hanem 1 bit hatroz meg, de mivel vzszintesen ktszerese a felbonts, ezrt semmi ms nem trtnik.
Sajnos a sznkioszts elre meghatrozott, 2 fix paletta
kzllehet vlasztani.
Az
els
paletta sznei:
A msodik kioszts:
O- Httrszn 1 -Trkiz 2- Lila 3- Fehr/Szrke
A 16 szn gy alakul ki. hogy egy gynevezett intenzits
belltsra is sor kerl ( gy lesz a barnbl srga s a
szrkbl fehr).
[Proqram 16]
C!!& l
segment
ass u me cs:cga l,ds:cga t
;Szegmensdefinici.
;A cs illetve ds regiszterek
;bellitasa.
mov
mov
u..cgal
ds,ax
mov
mov
ax,Ob800h
es,ax
mov
int
ax,4
l Oh
mov
mov
mov
int
ab,Obb
bb, l
bl,l
l Oh
;Szintn a l Ob rutin
;segitsgvel, de most annak
;a Obb funkcijval belltjuk,
;hogy az l-es palettakiosztst
;hasznlja. bb=l jelenti,
;hogy palettallts
;kvetkezik, bi-be pedig a
;paletta sorszmt kell rni
;(Ovagy 1).
mov
mov
mov
mov
mov
mov
ai,OIOIOIOib
es:)O),al
ai,IOIOIOIOb
es:)l),al
al,llllllllb
es:)l),al
xo r
int
8ll,8ll
mov
mov
mov
int
xo r
int
ah,Obh
bh, l
bi,O
l Oh
mov
mov
mov
int
;Billentyvrs
16
8ll,3ll
; A O. paletta belltsa.
16
ah,Obh
bh.O
b l, l
!Oh
95
cgal
xo r
int
ax,ax
16
;Billentyvrs.
mov
mov
mov
int
ah,Obh
bh,O
bl,l+l6
lOb
xo r
int
8li,8X
16
;Billentyvrs.
mov
int
ax,J
lOb
mov
int
8li,4C00h
21 h
en ds
end
start
;Szegmens vge.
;Program vge.
segment
assume cs:cga2,ds:cga2
;Szegmimsdefinci.
;A cs, ds regiszterek
;belltsa.
start:
mov
mov
;A ds regiszter belltsa
;a szegmens elejre.
96
&ll,cga2
ds,ax
.l_cga2:
mov
mov
ax.Ob800h
es.ax
;A videomemria kezdeimt
;az es szegmensregiszterbe
;tlti.
xo r
di,di
;lndexregisztert nullzza.
mov
int
ax,4
l Oh
;A 320*200-as grafikus
;felbonts belltsa.
mov
mov
mov
int
ah,Obh
bh,l
bl,byte ptr [PALETTAJ
lOh
mov
mov
mov
mov
mov
shl
add
int
ah,Obh
;A httr cmknl lv sznt
bh,O
;lltja be paprsznnek.
bl,byte ptr [HATTERJ
dl,byte ptr [FENYESSEGJ
cl,4
;Az intenzts a httrszn 4. btje
dl,cl
;ezrt azt 4 bittel balra
bl,dl
;kell lptetn, hogy utna
l Oh
;hozz lehessen adni a sznkdhoz.
mov
test
jz
mov
shr
mov
mul
add
bl,l
ax.SO
bl
di,ax
;belltja a
mov
mov
and
shl
shr
shr
add
;Innentl
megfelel kezdcimet
mr csak fl kppel
97
ro r
ro r
mov
al, l
al,cl
es:[di),al
xo r
int
ax,ax
l 6h
;Billentyvrs.
mov
int
ax,J
l Oh
mov
n t
ax,4c00h
21 h
;Visszatrs a DOS-hoz.
160
100
3
sorszm
KOORD_X: dw
KOORD_Y: db
SZIN:
db
PALETTA: db
HATT ER: db
FENYESSEG:db
cga2
o
o
en ds
end start
;Szegmensvg
;Programvg
Brmilyen kppel, brval is dolgozunk, az mindig klnbz szn pontokbl tevdik ssze. Ahhoz, hogy a kvnt kpet
lssuk. minden pontnak a helyn kell lennie. Egy egyedlll
pont kiraksramutat pldt a 17. program. Itt be lehet lltani a
pont koordintit s a sznt.
A kpernyn val tjkozdsnl segtsget nyjt egy
kpzeletbeli koordinta rendszer. melynek [0;0) pontja a bal fels sarok. A memriban egy sor trolsa linerisan trtnik. teht kpernyn egyms mellett lv pontok a memriban egyms utn helyezkednek el. A pros s pratlan sorokat a CGA
zemmdban kln troljk. A kperny-memria kezdeimn
helyezkedik el a O. sor O. byte-ja. A O. sor jobb szls pontja
utn a 2. sor els pontja tallhat s gy tovbb. Az 1. sor a kezdcm+2000h cmtl kezddik s a sor utols pontjt a 3. sor el-
98
99
cga3
segment
assume cs:cga3,ds:cga3
start:
mov
mov
ax,cga3
ds,ax
;A ds regiszter belltsa
;a szegmens elejre.
mov
mov
ax,Ob800h
es,ax
:A videomeria kezdeimt
:az es szegmensregiszterbe
;tlti.
xo r
di,di
:lndexregiszter trlse.
mov
int
ax,4
l Oh
;A 320*200-as grafikus
;felbonts belltsa.
mov
mov
mov
int
ah,Obh
bh, l
bl,byte ptr [PALETTA]
l Oh
mov
mov
mov
mov
mov
shl
add
int
ah,Obh
:A httr cmknl lv sznt
bh,O
:lltja be paprsznnek.
bl,byte ptr (HATTER]
dl,byte ptr (FENYESSEG]
cl,4
:Intenzits belltsa.
dl,cl
bl,dl
l Oh
mov
test
jz
mov
shr
mov
mul
add
mov
mov
and
shl
shr
b l, l
ax,80
bl
di,ax
bx,word ptr (KOORD_X]
cl, b l
cl, ll b
cl, l
bx,l
.l_cga3:
100
.2_cga3:
.3_cga3:
.4_cga3:
bit
shr
add
mov
mov
shr
shr
bx,l
d i,b x
dl,lOOOOOOOb
dh,Olllllllb
dl,cl
dh,cl
mov
si,offset [IKONJ
mov
cx,8
;Belltmaszk.
;Trlmaszk.
;A byte-on belli bitcm
;belltsa.
;Az ikon tblzatcimt si-be
;rakja.
;Az bra 8 kpsor magas.
push di dx ex
;A regiszterek elmentse a
;ksbbi felhasznls
;cljbl.
mov
ex, l 6
mov
ax,[si)
push
shl
je
and
jmp.
ex
ax,l
es:[di),dh
.s_cga3
or
es:[di),dl
.4~cga3
;trldik. Az OR mveletnl a dl
;regiszter l bitje segitsgvel
; l-be lltjuk es: [d i) cmen
; lv byte egyik bitjt
.s_cga3:
.6_cga3:
ro r
ro r
j ne
inc
dh, l
dl, l
.6_cga3
di
pop
loop
pop
ex
.3_cga3
ex dx di
101
di,2000h
.7_cga3
di,2000h
.8_cga3
.7_cga3:
sub
di,2000h-80
.B_cgaJ:
add
loop
si,2
.2_cga3
xo r
int
ax.ax
l 6h
;Billentyvras.
mov
int
a:x,J
l Oh
mov
int
ax,4c00h
21 h
:Visszatrs a DOS-hoz.
160
100
KOORD_X: dw
KOORD_Y: db
PALETTA: db
HATTER: db
FENYESSEG:db
IKON:
dw
dw
dw
dw
dw
dw
dw
dw
cg aJ
en ds
end
o
o
1010101010100000b
lOIIIIIIIOOOOOOOb
IOIIIIIOOOOOOOOOb
1011101110000000b
1010001011100000b
lOOOOOOOIOiliOOOb
OOOOOOOOOOlOIIIOb
OOOOOOOOOOOOIOOOb
start
:Szegmensvg
:Programvg
A program mkdst illeten a sznek belltsig teljesen megegyezik az elz pldval. Az eltrs ott kezddik, hogy
a koordinta szmtsnl a kapott memria cm az ikon bal fels
sarknak memriacme lesz. Innentl kvetkezik a 8*8 kppont
mret ikon kiraksa (ez lehetne ms mret is). Mivel PC-n a
memria egyes bitjeit egyenknt nem lehet lltani. ezrt erre
egy trkkt alkalmazunk, mgpedig az OR s az AND mvelet
102
OR
00100110b
00001000b
(Kperny adat)
(Segd Byte)
0010111 Ob
(Eredmny)
AND
00100110b
11111011b
(Kperny adat)
(Segd Byte)
00100010b
(Eredmny)
segment
lJSSume cs:cga4,ds:cga4
;Szegmensdefinci.
;A cs, ds regiszterek
;belltsa.
start:
mov
mov
ax,cga4
ds,ax
;A ds regiszter belltsa
;a szegmens elejre.
mov
mov
ax,Ob800h
es,ax
;A videomeria kezdcmt
;az es szegmensreg1szterbe
;tlti.
call
jnz
egerinstall
.l_cga4
mov
int
ax,l
lOb
;80*25 karakteres kp
;belltsa.
104
mov
mov
di,52
ali,7
mov
mov
cm p
jz
mov
add
jmp
si,offset HIBATEXT
al,(si)
ai,O
.2_hiba
es:(di),ax
di,2
si
. !_hiba
.2_hiba:
xo r
int
jmp
8li,8X
l 6h
kilepes
;billenty
.l_cga4:
mov
int
mov
mov
mov
int
all,4
!Oh
ah,Obh
bh,l
bl,byte ptr [PALETTA)
!Oh
;A 320*200-as grafikus
;felbonts belltsa.
;A paletta cmke alatt trolt
;szm palettt vlasztja ki.
mov
mov
mov
mov
mov
shl
add
int
ah,Obh
;A httr cmknl lv sznt
bh,O
:lltja be paprsznnek.
bl,byte ptr IHATTERI
dl,byte ptr [FENYESSEG)
cl,4
:Intenzits belltsa'
dl,cl
bl,dl
!Oh
mov
mov
mov
di,2025
ai,OIOIOIOib
cx.50
.!_hiba:
inc
.2_cga4:
push ex
mov cll,25
re p stosb
add
mov
rep
sub
pop
di,2000h-25
cx.25
stos b
di,2000h+25-80
ex
tOS
.2_cga4
;C x rtknek megfelelen
;ismtli a ciklust.
.J_cga4:
call
call
call
mentes
mask
eger
; Vezrlrutinok hivsa a
;megfelel sorrendben.
.4_cga4:
call
jnz
call
gombtest
kilepes
mozgas
jz
call
mov
int
.4_cga4
kirakas
ax,J
JJh
cm p
je
cx,624
.5_cga4
mov
mov
int
ax.4
cx,624
JJh
.s_cga4:
cm p
je
mov
mov
int
dx,l92
.6_cga4
a x,4
dx,l92
JJh
.6_cga4:
shr
mov
mov
jmp
ex, l
wo~d
.A megvaltozott rtket
:berjuk a memria vltozkba.
mov
int
ax,J
l Oh
mov
ax,4c00h
21 h
:Visszatrs a DOS-hoz.
kilepes:
int
mentes
106
proc
ptr (koord_x),cx
byt'e ptr (koord_y(,dl
.J_cga4
.l_mentes:
~l_mentes:
;Forrsindex regiszter
;nullzasa
xo r
si,si
mov
test
jz
add
mov
shr
mul
add
mov
mov
shr
shr
and
shl
xo r
add
ax,80
bl,l
bl
;Kiszmoljuk a fggleges
;memriacimet.
si,ax
mov
bl,cl
mov
mov
cx,8
di,offset kephely
push si ex
mov
dh,es:(si)
mov
mov
cl,bl
dl, l 28
;A vzszintes pozicit is
;si-hez adjuk.
;A kphely memriacimtl
;kezdden lesz letarolva
;a kp
;ex s si verembe mentse.
;Az es:(si( eimen lv byte
;tartalmt. ami a kperny
;egy rsze dh-ba teszi.
107
dh,cl
dl,cl
;A beolvasott memriatartalom
;s a segdbyte forgatsa gy,
;hogy az rtkes bitek kerlnek
;a byte szlre.
mov
ex, l 6
shl
dh, l
rel
ax,l
ro r
j ne
dl, l
.4_mentes
inc
mov
si
dh.es:(si(
loop
mov
.J_kepmentes
(di(,ax
pop
cm p
je
sub
jmp
ex si
si,2000h
.S_mentes
si,lOOOh-80
.6_mentes
.S_mentes:
add
si,2000h
.6_mentes:
add
di,2
loop
.2_mentes
.J_mentes:
.4_mentes:
rel
mentes
108
end p
;A segdbyte forgatsa. Ha
;a kifordul bit O akkor a
;kvetkez bit atrasa
;kvetkezik, ha I akkor a
;byte vgre rt az olvasas
;s egy j byte-ot kell
;beolvasni.
proc
xo r
mov
test
jz
mov
.l_kirakas: sbr
mov
mul
add
mov
mov
and
sbl
sbr
sbr
add
mov
mov
ro r
ro r
mov
si,offset kephely
mov
.2_kirakas:
di,di
bl,byte ptr [koord_y)
bl,l
.l_kirakas
di,lOOOb
bl,l
ax,80
bl
di,ax
cx,S
push di dx ex
mov
ex, l 6
mov
ax,(si)
.J_kirakas: push
shl
je
and
jmp
ex
ax,l
.4_kirakas
es:(di),dh
.5_kirakas
.4_kirakas: or
es:(di),dl
;Belltmaszk.
;Trlmaszk.
;A byte-on belli bitcm
:belltsa.
109
ror
ror
j ne
inc
.6_ki ra kas:
dh.l
dl,l
.6_ki ra.kas
di
pop
loop
pop
cmp
j ne
add
jmp
.7_kirakas: sub
ex
.3_ki ra kas
ex dx di
di,2000h
.7_kirakas
di,2000h
.S_kirakas
di,2000h-80
.S_kirakas:
si,2
.2_kiraks
add
loop
lv
ret
kirakas
endp
mask
proc
.J_mask:
110
mov
xor
mov
mov
test
jz
add
si.offset IKONMASK
di.di
bl,byte ptr (KOORD_Y]
ax,SO
bl,l
.J_mask
di.2000h
shr
mul
add
mov
mov
shr
shr
bi,J
bl
di,ax
bx.word ptr (KOORD_X(
cl,bl
bx,t
bx,l
cl ,J
cl, l
di,bx
bl,cl
cx,8
push
mov
mov
mov
ro r
mov
di ex
ax,(si(
di,Olllllllb
cl,bl
dl,cl
ex, l 6
.3_mask:
shl
je
and
ax,l
.4_mask
es:(di),dl
.4_mask:
ro r
je
inc
dl, l
.5_mask
di
.5_mask:
loop
pop
cm p
j ne
add
jmp
.3_mask
ex di
di,2000h
.6_mask
di,2000h
.7_mask
.6_mask:
sub
di,2000h-80
.7_mask:
add
loop
re t
si,2
.2_mask
mask
end p
eger
pror
.2_mask:
mov
xo r
mov
mov
test
:Trlmaszk
:Ahol az egrmaszkban
:O van. ott trli a kpet
;igy helyet csinl a nylnak.
:Ahol l. ott az eredeti
:kpernytartalmat hagyja .
si,offset IKON
di,di
bl,byte ptr (KOORD_Y(
ax,80
bl,l
lll
.l_eger
di,2000h
.l_eger:
shr
mul
add
mov
mov
shr
shr
and
shl
add
mov
mov
b l, l
bl
di,ax
bx,word ptr [KOORD_XJ
cl,bl
b x., l
b x., l
cl ,J
cl. l
di,bx
bl,cl
cx.8
.2_eger:
push
mov
mov
mov
ro r
mov
di ex
ax,(siJ
di,IOOOOOOOb
cl,bl
dl,cl
ex, l 6
.J_eger:
shl
j ne
or
ax,l
4_eger
es:JdiJ,dl
.4_eger:
ro r
jn c
inc
dl. l
.S_eger
di
.S_eger:
loop
pop
cm p
j ne
add
jmp
.J_eger
ex di
di,2000h
.6_eger
di,2000h
.7_eger
.6_eger:
sub
di,2000h-80
.7_eger:
add
loop
si,2
.2_eger
re t
112
endp
egerinstall
proc
xor
ax,ax
int
JJh
cm p
a x.O
ret
egerinstall
end p
mozgas
proc
mov
ax,J
int
33 h
shr
cm p
jnz
cmp
cx.l
ex,word ptr (KOORD_XI ;Ha eltrs van az eddigi
.l_mozgas
;koordinta s a mostani kzlt
dl,byte ptr JKOORD_YJ ;Zero flag nke O lesz.
. l_ mozgas:
re t
mozgas
endp
gombtest
proc
mov
int
test
ax,J
JJh
bl.llb
113
gombtest
endp
;Vizszintes koordinta
;Fggleges koord.
;Palettakd (0, l)
;Httrszn (0-7)
;Intenzits (0, l)
KOORD_X: dw
KOORD_Y: db
PALETTA: db
HATTER: db
FENYESSEG:db
dw
IKON:
dw
dw
dw
dw
dw
dw
dw
160
100
0
0
IKONMASK:dw
dw
dw
dw
dw
dw
dw
dw
OOOOOOOOOOOOllllb
OOOOOOOOOOllllllb
OOOOOOOOIIIIIIIIb
OOOOOOOOOOIIllllb
OOOOIIOOOOOOIIIIb
OOllllllOOOOOOIIb
llllllllllOOOOOOb
llllllllllllOOllb
KEPHELY: dw
HIBA TEXT:
0,0,0,0,0,0,0,0
db
"Az egr nem installlhat !".O
cg a4
1010101010100000b
IOIIIIIIIOOOOOOOb
IOIIIIIOOOOOOOOOb
IOIIIOIIIOOOOOOOb
1010001011100000b
IOOOOOOOIOillOOOb
OOOOOOOOOOIOiliOb
OOOOOOOOOOOOIOOOb
en ds
end start
;Szegmensvg
;Programvg
Tpus
Funkc
3d4h
Csak rhat
3d5 h
lrhato, olvashat
A kpernyvezerl adatregisztere
OOh
Ol h
02h
03 h
04h
05 h
06h
07 h
08 h
09h
Oah
Ob h
Oc h
Csak
Csak
Csak
Csak
Csak
Csak
Csak
Csak
Csak
Csak
Csak
Csak
Csak
Od h
Csak rhat
Oe h
lrhat, olvashat
Olll
i rhat, olvashat
l Oh
Csak olvashato
ll h
Csak olvashat
3d8 h
116
rhat
rhat
rhat
rhat
rhat
rhat
rhat
rhat
rhat
rhat
rhat
uhato
rhat
Csak rhat
zemmd regiszter
7-6: Nem hasznlt
5: Villogs engedlyezese
O- Az attribtum 7. bitje a
httrszn intenzitst
engedlyezt
l - Az attribtum 7. bitje a
3d 9h
Csak rhat
Sznkivlaszts regiszter
7-6: Nem hasznlt
5: Paletta sorszam
4: Sznkszlet kivlasztsa
3: Intenzits engedlyezse
2-1-0: Karakteres mdban a keret szne
320*200 mdnl a httr szne
640*200 mdnl az eltr szint
hatrozza meg (RGB)
J da h
Csak olvashat
Sttuszregiszter
7-4: Nem hasznlt
3: Fggleges visszatrs alatt l az
rtke
2: Fnyceruza kapcsolja zilrva van
l: Fnyceruza engedlyezett
O: 6845 nem hasznlja a kpernyt
(vzszintes vagy fggleges visszatrts)
3d bh
Csak rhat
3dch
Csakirhato
117
118
segment
assume cs:egal,ds:ega l
:Szegmensdefinci.
:Cs s ds belltsa.
start:
mov
mov
ax,egal
ds,ax
mov
int
ax.IOh
!Oh
:640*350/16 EGA. md
:bellitasa.
mov
ex, l 6
; 16 sznpaletta van.
.l_egal:
.:Z_egal:
.J_egal:
push ex
mov cx.8
push ex
mov ex, l 40
push ex
mov ex,word ptr [KOORD_XI :A kirakand pont X
;koordintja.
mov
mov
mov
mov
int
ah,Och
l Oh
:Pontkiraks rutin
:hvsa.
inc
pop
loop
mov
sub
inc
pop
loop
pop
loop
xo r
int
ax.ax
l 6h
inc
119
mov
ex, IS
;A 16 palettbl a O.
.a httr. ezrt azt nem
;llitjuk, csak a tbbit.
b l, l
bh,byte ptr [ELSO)
ex bx
ax,lOOOh
lOb
.s_egal:
mov
mov
push
mov
int
pop
inc
inc
loop
bx ex
bl
bh
.5_egal
xo r
int
ax,ax
16h
;billentyfigyels
cm p
jnz
ah,48h
.7_egal
mov
cm p
j ne
inc
jmp
.7_egal:.
em p
jnz
mov
cm p
jz
dec
jmp
ah,50h
.S_egal
al,byte ptr [ELSO)
al,O
.6_egal
byte ptr [ELSO)
.4_egal
.S_egal:
cm p
jnz
ah, Ich
.6_egal
mov
int
ax,J
mov
ax.4c00h
21 h
.6_egal:
int
120
kperny
lOb
:s visszatrs a DOS-hoz
KOORD_X:dw
KOORD_Y: dw
SZIN:
db
ELSO:
db
o
o
LAP:
db
egal
ends
end start
;A kirakand pont X
;illetve Y koordintja
;s a pont szne.
;Paletta-belltsnl az els
;csk szne.
;A grafikus videalap sorszma.
;A szegmens vge.
;A program vge.
Els
o
l
2
3
4
5
6
7
Fekete
Kk
Zld
Trkiz
Vrs
Lila
Narancs
Vilgos szrke
8
9
10
ll
12
13
14
15
Sttszrke
Vilgoskk
Vilgoszld
Vilgos trkiz
Piros 2
Vilgoslila
Srga
Fehr
Ellenttben a CGA mddal, itt lehetsg nylik a palettasznek megvltoztatsra egyenkint illetve az egszet egyszerre. A
belltsnl az egyes bitek jelentse a kvetkez:
7
6
5
4
3
2
l
Nem hasznlt
Nem hasznlt
Msodlagos vrs
Msodlagos zld
Msodlagos kk
Vrs
Zld
Kk
A pldaprogramban az egyenknti bellts lett alkalmazva, mgpedig gy,hogy egy ENTER lenyomsa utn grgetni lehet a szneket a fl-le nyilakkal. A paletta mdostsnl a BIOS
1Oh megszaktsnak 1O. programjnak O. funkcijt hasznljuk
(ah=10; ai=O), itt a belpsnl bl regiszterbe kell tenni a mdostand paletta sorszmt bh-ba pedig a sznkdot. Az egyszer121
1
2
3
4
5
6
7
1
2
3
5
20
7
8
9
10
11
12
13
14
15
56
57
58
59
60
61
62
63
122
[Program 21]
vga l
start:
segment
assume cs:vgal,ds:vgal
mov Bll,vgal
mov ds,ax
;Szegmensdefinci.
;Cs s ds belltsa.
;Ds regiszter belltsa
;a szegmens elejre.
mov
int
ax,12b
lOb
;640*480/16 VGA md
;belltsa.
mov
mov
out
inc
mov
out
dx,3ceb
al, l
dx,al
dx
al,O
dx,al
dec
mov
out
inc
dx
al,5
dx,al
dx
ax,ax
dx,al
;A O. rsi md kivlasztsa.
xor
out
123
.l_vgal:
.2_vgal:
.3_vgal:
124
dec
mov
out
inc
mov
out
dx
al,3
dx,al
dx
al,O
dx,al
;Fellrsi md kivlasztsa.
dec
mov
out
inc
mov
out
dx
ai,S
dll,&l
dx
al,llllllllb
dx,al
;Adatvltoztats engedlyezse
;az sszes bitre.
mov
mov
mov
8ll,0a000b
es, u
di,8031
;Videomemria kezdcme.
mov
push
mov
mov
out
inc
mov
out
mov
Cll, l 5
Cll
dll,3c4b
al ,2
dx,al
dx
al,byte ptr [SZIN]
dx,al
Cll,8
push
mov
mov
re p
sub
pop
add
loop
Cll
Cll,17
al,255
stos b
di,17
Cll
di,SO
.2_vgal
pop
inc
loop
Cll
byte ptr [SZIN]
l_vgal
mov
mov
out
inc
mov
dll,3c8h
al,O
dx,al
dll
al,byte ptr [PIROS)
;A megfelel plane-ek
;kivlasztsa.
;A szncskok kirajzolsa.
;A kvetkez palettaszn
;kivlasztsa.
;A httrszn lltsa a
;megfelel sznre.
4_vgal:
.S_vgal:
.6_vgal:
7_vgal:
.B_vgal:
out
mov
out
mov
out
lb, al
al,byte ptr (ZOLD)
lb,al
al,byte ptr [KEK)
lb,al
mr
int
u,ax
;Billentyfigyels .
16h
cmp
joz
mov
cm p
j ne
inc
jmp
al,"q"
;A q billenty figyelse.
.S_vgal
a1,63
byte ptr (PIROS),al
.4_vgal
byte ptr (PIROS)
.3_vgal
cm p
joz
mov
cm p
jz
dec
jmp
al,"a"
;Az a
.6_vgal
al,O
byte ptr (PIROS),al
.4_vgal
byte ptr (PIROS)
.3_vgal
cm p
jnz
mov
cm p
j ne
inc
jmp
al,"w"
;A w
.7_vgal
a1,63
byte ptr (ZOLD),al
.4_vgal
byte ptr (ZOLD)
.3_vgal
cm p
joz
mov
cm p
al,"s"
;A s billenty figyelse.
.S_vgal
ai,O
byte ptr (ZOLD),al
;Cskkentse ha nem O.
jz
dec
jmp
.4_vgal
byte ptr (ZOLD)
.3_vgal
cm p
joz
mov
cm p
.9_vgal
al,63
byte ptr (KEK),al
al,"e"
billenty
figyelse.
;Cskkentse ha nem O.
billenty
figyelse.
;A e billenty figyelse.
125
.4_vgal
byte ptr [KEK)
.J_vgal
cm p
joz
mov
cm p
al,"d"
;A d
.lO_vgal
al,O
byte ptr [KEK),al
;Cskkentse ha nem O.
jz
dec
jmp
.4_vgal
byte ptr [KEK)
.3_vgal
cm p
joz
mov
int
al,l3
.4_vgal
u,3
lOb
mov
int
ax,4c00h
21 h
;Visszatrs a DOS-hoz
SZIN:
PIROS:
ZOLD:
KEK:
db
db
db
db
o
o
o
vga l
en ds
end start
.9_vgal:
.lO_vgal:
billenty
figyelse.
l
;Az egyes sznsszetevk
;kiindul rtke.
;A szegmens vge.
;A program vge.
PianeJ
Plane2
Pianel
PlaneO
Eredeti adat
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
j adat
xxxxxxxx
XXXXIOII
XXXXIOII
xxxxxxxx
00001111
Adatvltoztats
engedlyezs
126
vezrl
5.
127
Set-Reset
engedlyez
Eredeti adat
Plane3
Plane2
Pianel
PlaneO
Memria
lapoz reg.
Set-Reset
adat
x
l
jadat
xxxxxxxx
XXXXIIII
xxxxoooo
XXXXIOII
00001111
Adatvltoztats
engedlyezs
128
Ekkor tulajdonkppen az trtnik, hogy ha mveletet vgznk a kperny valamely rszn, a mvelet vgrehajtdik s a
SET-RESET engedlyez regiszter ltal kijellt plane-ek kzl
azok ahol az rs engedlyezett, a SET-RES ET adatregiszterben belltott rtket veszik fel, ahogyan ez az elz brn is jl
lthat.
A kvetkez rsi mdot leginkbb kiolvasskor rdemes
hasznlni, vagy pedig ha azt szeretnnk, hogy a kperny tartalmt vletlenl se lehessen megvltoztatni. Az 1-es rsi md lnyege ugyanis az, hogy azt az adatot rja a kpernyre, ami el
zleg is ott volt, ezltal semmi vltozs nem trtnik.
Mkdse:
Eredeti adat
Plane3
Plane2
Pianel
PlaneO
jadat
ll 00 l 00 l
00011001
o l o ll o l o
10000011
11001001
00011001
01011010
10000011
A kvetkez rsi md hasonlt a O. md SET-RESET mdjhoz, de itt az adat, ami a bitskokba berdik, az a felhasznl
ltal bert adat, nem pedig egy elre belltott. Mkdse sorn
az engedlyezett plane-ek irhat bitjeit a hasznlt rtkekkel tlti
fel. Mkdse:
Mveleti kd reg.
XXXOOOOO (Fellrs)
Memria
lapoz reg.
Felhasznli adat
als 4 bitje
j adat
129
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
XXXXIIII
xxxxoooo
XXXXII ll
00001111
Adatvltoztats
engedlyezse
A VGA krtyknak van mg tovbbi egy rsi mdja, amikor az adatvltoztats engedlyezst nem csak a regiszter hatrozza meg, hanem a felhasznl ltal bert rtk s a regiszter
egyttesen hatrozza meg. A plane-ekre berd adatot pedig a
SET-RESET adat hatrozza meg a kvetkez mdon:
Mve/eti kd reg.
XXX 00 010 (Fel/rsi md 2 bitnyi forgatssalj
Set-Reset
engedlyez
Eredeti adat
Plane3
Plane2
Pianel
PlaneO
Memria
lapoz reg.
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
Set-Reset
adat
jadat
XXXIIXII
XXXIIXII
xxxooxoo
xxxxxxxx
OOO 11111
Adatvltoztats
engedlyezs
AND
o ll o lll
l
Felhasznli
adat
ll o ll o ll
A felhasznli adat
forgats utn
130
tartalom
Plane3
Plane2
Pianel
PlaneO
Kiolvassi
lapoz regiszter
XXXXXX ll
00 l o ll o l
01101010
00101010
ll o l 00 ll
A kiolvass
eredmnye
00 l
o ll o l
tartalom
Plane3
Plane2
Pianel
PlaneO
00 l o ll o l
ollllll o
00101010
ll o l o lll
Sznfigyels
maszkregiszter
Sz nfigyel
regiszter
131
A kiolvass
eredmnye
Portcm
Tipus
Funkci
JCEh
Csak rhat
JCFh
rhat. olvashat
OOh
csak rhat
Ol h
csak rhat
02h
csak rhat
Sznfigyel
7-4:
3:
2:
1:
O:
Ol h
132
csak rhat
regiszter
Nem hasmlt
A 3. plane adata
A 2. plane adata
Az l. plane adata
A O. plane adata
Mveleti kd regiszter
7-5: Nem hasznlt
4-3: rsi mvelet kivlasztsa
00: Fellrs
2-0:
04b
Csak rhat
OSb
Csak rhat
Mdregiszter
7-6: Nem hasznlt
5:
A video shiftregiszter vezrlse
O- Folytonos adattrols
l - Pros; pratlan adattrols
4:
Cmzsi md belltsa
O - Folyamatos memria cmzs
l - Pros; pratlan cmzs
3:
Kiolvassi md belltsa
O - Kzvetlen kiolvass
l - A sznfigyels eredmnye
2:
Grafikus vezrl kimeneteinek tiltsa
l - O: rsi md belltsa
00: O. rsi md
Ol: l. rsi md
l O: 2. rsi md
ll: 3. rsi md(Csak VGA krtyn)
06b
Csak rhat
Grafikus parancsregiszter
7 - 4: Nem hasznlt
3 - 2: Memriatartomny belltsa
Kezdcm
Hossz
00- OAOOO:OOOO
l28K
Ol- OAOOO:OOOO
64K
10- OBOOO:OOOO
32K
ll - OBSOO:OOOO
32K
l:
Pros; pratlan cmzs kezels
O:
Grafikus cmzsi md
07b
Csak rhat
Sznfigyels maszkregiszter
7-4: Nem hasznlt
3:
A 3. plane engedlyezse
2:
A 2. plane engedlyezse
l:
Az l. plane engedlyezse
o: A O. plane engedlyezse
133
Csak rhat
Adatvltoztats engedlyezse
Az adatvltoztats engedlyezett azon
helyeken, ahol az engedlyez regiszter
rtke l
segment
assume cs :vga2,ds :vga2
start:
mov
mov
ds,ax
mov
int
mov
int
8ll,12h
l Oh
8ll,l123h
l Oh
;640*480/16 VGA md
;belltsa.
;8*8 pontos grafikus
;karakterkszlet betltse
;a ROM-bl
&ll,dS
mov
mov
mov
mov
mov
mov
134
a:~~,vga2
es,ax
bh,O
bl,12
di,IO
dh, l O
;Szegmensdefinci.
;Cs s ds belltsa.
;Ds regiszter belltsa
;a szegmens elejre.
TEXTI:
TEXT2:
TEXTJ:
mov
mov.
mov
int
Cll,59
bp,offset TEXTI
8ll,l300h
l Oh
mov
int
8ll,ll22h
l Oh
mov
mov
mov
mov
mov
mov
mov
int
8ll,l300h
bh,O
bl,l2
dl, l O
dh, l O
Cll,60
bp,offset TEXT2
l Oh
mov
int
8ll,ll24h
l Oh
mov
mov
mov
mov
mov
mov
mov
int
8ll,l300h
bb,O
bl,l2
dl, l O
dh, lJ
cx,60
bp,offset TEXTJ
l Oh
xo r
int
mov
int
Bli,BX
l6h
all,l
l Oh
mov
int
8li,4C00h
21 h
db
db
db
db
db
db
; 14 pontos betmrettel
;piros sznnel
;a 10,10 koordinlba
;kirakjuk a TEXT2 cmke
;alatt trolt 60 bets
;szveget.
; 16 pontos betmrettel
;piros sznnel
;a 10,13 koordinlba
;kirakjuk a TEXT3 cmke
;alatt trolt 60 bets
;szveget.
;billentyvrs
;Visszatrs a DOS-hoz
135
eods
end start
;A szegmens vge.
;A program vge.
136
segment
assume cs:vgaJ,ds:vgaJ
;Szegmensdefinici.
;Cs s ds bellitsa.
start:
mov
mov
ax,vga3
ds,ax
mov
int
ax,llh
l Oh
;640*480/2 md belltsa.
mov
mov
ax,OaOOOh
es,ax
;A videomemria kezdeimt es
;szegmensregiszterbe tltjk.
mov
mov
mul
mov
mov
137
.2_vga3:
push
mov
mov
sbl
je
and
jmp
di ex
c:x,16
a:x,[si)
a:x,l
.3_vga3
es:[di),dh
.4_vga3
.3_vga3:
or
es:[di),dl
.4_vga3:
ro r
ro r
je
inc
dl, l
db, l
.5_vga3
di
.5_vga3:
loop
pop
add
add
loop
.2_vga3
ex di
si,2
di,SO
. l_vga3
mov
mov
out
inc
mov
out
mov
out
mov
out
d:x,Jc8b
al,63
d:x,al
dx
al,byte ptr [PIROS)
d:x,al
al,byte ptr [ZOLD)
d:x,al
al,byte ptr [KEK)
d:x,al
.l_vga3:
.6_vga3:
138
.8_vga3:
.9_vga3:
.lO_vgaJ:
.ll_vgaJ:
. 12_vga3:
xo r
int
ax,ax
l6h
cm p
jnz
mov
cm p
jnc
inc
jmp
al,"q"
;A q
.8_vga3
&1,63
byte ptr [PIROS),al
.7_vga3
byte ptr [PIROS)
6_vga3
cm p
jnz
mov
cm p
jz
dec
jmp
al,"a"
;Az a
.9_vga3
ai,O
byte ptr [PIROS),al
.7_vga3
byte ptr [PIROS)
.6_vga3
cmp
joz
mov
cm p
jnc
inc
jmp
al,"w"
;A w billenty figyelse.
.lO_vgaJ
al,63
byte ptr [ZOLD),al
.7_vga3
byte ptr [ZOLD)
.6_vga3
cm p
joz
mov
cm p
jz
dec
jmp
al,"s"
.ll_vgaJ
al,O
byte ptr [ZOLD),al
.7_vga3
byte ptr [ZOLDJ
.6_vga3
cm p
joz
mov
cm p
jnc
inc
jmp
al,"e"
.l2_vga3
al,63
byte ptr [KEK),al
.7_vga3
byte ptr [KEK)
.6_vga3
cm p
joz
mov
al,"d"
.lJ_vgaJ
ai,O
billenty
figyelse.
billenty
figyelse.
;Cskkentse ha nem O.
;Cskkentese ha nem O.
;A d billenty figyelse.
139
cm p al,13
jnz .7_vga3
mov ax,J
10h
int
mov ax,4c00h
21 h
int
;Visszatrs a DOS-hoz.
;Az egyes sznsszetevk
PIROS:
ZOLD:
KEK:
db
db
db
31
31
31
IKON:
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
0000011111100000b
OOOllOOOOOOllOOOb
OOlOOOOOOOOOOlOOb
0100110000110010b
Ol01011001011010b
1000110000110001b
1000000010000001b
l000000101000001b
1000000101000001b
1000001001000001b
1001000110001001b
0100110000110010b
0100011111100010b
0010001111000100b
0001100000011000b
OOOOOllllllOOOOOb
KOORD_X: dw
KOORD_Y: dw
vga3
;Cskkentse ha nem O.
312
232
en ds
end start
;kiindul rtke.
;A szegmens vge
;A program vge
140
segment
assume cs:vga4,ds:vga4
;Szegmensdefinicio.
;Cs s ds belltsa.
start:
mov
mov
ax,vga4
ds,ax
mov
mov
ax,OaOOOh
es,ax
;A videomemria kezdeimt
;es regiszterhe rjuk.
mov
int
ax,l3h
l Oh
;A 320*200/256 zemmd
;belltsa
141
.l_vga4:
mov
xo r
out
inc
out
dx,Jc8h
ax,ax
dx,al
dx
d x, al
;Fekete httrszn
;belltsa
mov
mov
mov
ex, lJ
al, l
si,offset PALETTA
;A hasznlt 13 eltrszn
;belltsa a letrolt
;rtkeknek megfelelen.
push
dec
out
inc
mov
out
mov
out
mov
out
add
pop
inc
loop
ax
dx
dx,al
dx
al,[si)
dx,al
al,l[si)
dx,al
al,2[si)
dx,al
si,J
ax
al
.l_vga4
mov
mov
mul
mov
add
mov
mov
.2_vga4:
push ex di
mov cx,8
.J_vga4:
mov
mov
inc
inc
loop
pop
add
loop
142
al,[ si)
es:[di),al
di
si
.J_vga4
di ex
di,320
.2_vga4
.4_vga4:
.S_vga4:
.6_vga4:
.7_vga4:
xo r
int
ax,ax
.16h
;billentyvrs.
xo r
mov
mov
mov
bx,bx
si,otJset PALETT A
u, l
cx,13
;A palettk grgetse.
;Si+b:x az els palettasznre
;mutat.
; 13 palettaszint kell
;lltani.
push b x
;A kezdrtket elmentjk,
;hogy tudjuk majd vlltoz;tatni az rtkt
push ax
mov
out
inc
mov
out
mov
out
mov
out
pop
inc
add
cm p
je
xo r
;A megfelel palettaszin
;vltoztatsa.
dx,3c8h
dx,al
dx
al,[si+bx)
dx,al
al,l[si+bx)
dx,al
al,l[si+bx)
dx,al
ax
ax
bx,3
bx,S4
.6_vga4
b x, b x
loop .S_vga4
pop bx
add bx,3
cm p bx,S4
je
.7_vga4
xo r
b x, b x
mov
int
jnz
mov
ax,lOOh
16h
.10_vga4
cx,02ftlh
;A kvetkez 3 sznkomponens.
;Ha a vgre rt, akkor jra
;elrl.
;A kezdrtket eggyel
;eltoljuk, ettl futnak a
;sznek. Ha elrte a vget,
;ismt elrl.
143
loop
mov
.8_vga4
ds,Jdah
.9_vga4:
in
test
jz
jmp
al,dx
al, l OOO b
.9_vga4
.4_vga4
.IO_vga4:
xo r
int
ax,ax
l 6h
;A lenyomott billenty
;kiolvassa
mov
int
as,J
l Oh
mov
int
ax,4c00h
:ZI h
;Kilps a DOS-ba
db
db
db
db
db
db
db
db
l,:Z,3,4,5,6,7,8
2,3,4,5,6,7,8,0
3,4,5,6, 7,8,0,0
4,5,6,7,8,9,0,0
5,6,7,8,9,10,11,0
6,7,8,9,10,11,ll,l3
7,8,0,0,Il,l:Z,l3,0
8,0,0,0,0,13,0,0
IKON:
PALETTA: db
db
db
KOORD_X: dw
KOORD_Y: dw
156
96
vga4
en ds
end start
;Szegmens vge
;Program vge
Ezt a sznvarilst az egrkezel rutinban nem fogjuk alkalmazni, de aki gy gondolja, beleteheti. A program a koordintaszmtsig azonos az elzveL Az egrkezelst azonban egy
kicsit msknt fogjuk megoldani mint a 19. programban, mivel itt
elg ha arra figyelnk, hogy ne rakjunk nullkat a kpernyre.
Ha egy pontot kirakunk a kpernyre, az biztos hogy olyan szn
lesz amilyet akartunk, mivel itt lehet a MOV utastst hasznlni
az bra kirakshoz mert egy kppont egy teljes byte-ot foglal
s gy nem vltoztatja a krltte lev pontokat. Term~~tesen
az alatta lev kpet itt is el kell trolnunk mert az egr mozgatsa kvetkeztben elveszne. Egy tovbbi vltoztats teszi teljesebb a rutint, mgpedig, hogy a kpernyn kinn lesz ngy msik bra is, ezek valamelyikre rkattintva lehet a programbl kilpni. Ezzel a mdszerrel akrhny helyet lehet figyelni, mivel az
ellenrizni kvnt mezk bal fels s jobb als koordinlait kell
csak megadni felsorolsszeren egy tblzatban. A programba
a vertical biank-hez idzts mr szintn be van ptve:
145
vga 5
segment
assume cs:vgaS,ds:vgaS
start:
mov
mov
ds,ax
xo r
int
8li,8X
33 h
cm p
jnz
&ll,O
.l_vgaS
mov
int
ali,J
l Oh
;80*25 karakteres kp
;belltsa.
mov
mov
a:~~,Ob800h
;A szveges kperny
es,ax
;kezdcme
mov
mov
d i,52
ah,7
mov
mov
cm p
jz
mov
add
inc
jmp
si,offset HIBATEXT
al,[si[
al,O
.2_hiba
es:[di[,ax
di,2
si
.l_hiba
xor
int
jmp
8li,8X
16h
kilepes
mov
mov
es,ax
;A videomemria kezdcimet
;es regiszterhe rjuk.
mov
int
3ll,l3h
l Oh
;A 320*200/256 zemmd
;belltsa
mov
dll,3c8h
;Fekete httrszn
.l_hiba:
.2_hiba:
.l_vgaS:
146
a:~~,vgaS
a:~~,OaOOOh
.2_vga5:
.3_vga5:
.4_vga5:
xo r
out
inc
out
u, u
lb, al
dx
lh,al
;belltsa
mov
mov
mov
cx,l4
al, l
si,oft'set PALETTA
;A hasznlt 14 eltrszn
;belltsa a letrolt
;rtkeknek megfelelen.
push
dec
out
inc
mov
out
mov
out
mov
out
add
pop
inc
u
dx
dx,al
dx
al,[ si)
dx,al
al,l[si)
d x, al
al,2[si)
dx,al
si,3
u
al
loop
.2_vga5
mov
mov
cm p
si,oft'set ITABLA
ax,[si)
ax,Offflh
jz
mov
mov
mov
push
mov
call
call
pop
add
jmp
.4_vga5
;A Offffb kd jelzi a
bx,2[si)
;koordinta felsorols vgt.
word ptr [KOORD_X),u
word ptr [KOORD_ YJ,bx
si
si,oft'set IKON2
cimki
;Az ikon memriacmnek
kirako
;kiszmtsa s kiraksa.
si
si,4
.3_vga5
mov
int
mov
mgv
all,3
;Az egr kezd koordintinak
33 h
;belltsa
word ptr [KOORD_X[,cx
word ptr [KOORD_Y[,dx
147
.6_vga5:
. 7_vga5:
.8_vga5:
.9_vga5:
kilepes:
148
call
cimki
call
elrako
call
eger
mov
int
test
jz
call
8JI,3
33 h
bx,J
.7_vga5
gombok
joe
ki lepes
call
mozgas
jz
.6_vga5
cm p
je
mov
cm p
je
mov
cx,625
.8_vga5
cx,624
dx,193
9_vga5
dx,l92
;A kpernybl val
;kicsszst is figyelni kell,
;ha nagyobb a maximumnl
;akkor a maximumrtket
;kell visszalltani .
mov
mov
mov
int
call
mov
call
jmp
si,offset HELY
kirako
.S_vgaS
mov
int
ax,J
l Oh
.2_eger:
.3_eger:
;Kilps a DOS-ba
proc
mov
mov
mov
.l_eger:
ax,4c00h
21 h
push ex
mov cx,S
;s 8 pont szles.
mov
cm p
jz
al,[si[
al,O
.3_eger
;Megvizsgljuk, hogy az
;ikon adott panijt ki kell-e
;rakni. Mert ha a pont rtke
;O, akkor azt nem szabad
;kirakni, mert az trln
;az egr krltti kpet.
mov
es:[di),al
inc
inc
loop
pop
add
too p
di
si
.2_eger
ex
di,312
.l_eger
;A kvetkez pont.
;A kvetkez sor.
ret
eger
end p
elrako
proc
mov
mov
mov
.l_elrako:
push ex
mov cx,4
.2_elrako:
mov
mov
add
add
loop
ax,es:[si)
[di[,ax
d i,2
si,2
.2_elrako
;kpernyn lv
149
CI
si,Jll
.l_elrako
ret
elrako
end p
kirakoproc
.l_kirako:
mov
mov
push
mov
rep
pop
add
loop
cx,4
movsw
CI
di,Jll
.l_kirako
ret
kirakoend p
verthi
.l_vb:
.l_vb:
proc
mov
in
test
jz
dx,Jdah
al,dx
al, l OOO b
.l_vb
in
test
joz
al,di
al,lOOOb
.l_vb
ret
vertbl
end p
mozgas
proc
mov
int
cm p
150"
ax,J
;Az egr koordintit
33 h
;sszehasonltja az elz
cx,word ptr [KO ORD_XI ;Jetrolt rtkkel, s ha
l_mozgas:
ret
mozgas
endp
cimki
proe
.l_mozgas
;eltrst tall (az egr
dx,word ptr [KOORD_Y) elmozdult) akkor z=O
;rtkkel tr vissza a hv
;programhoz.
endp
gombok
proe
mov
si,offset GTABLA
jz
.J__gombok
mov
mov
emp
je
em p
je
ax,[si)
bx,l[si)
word ptr [KOORD_X),ax
.l__gombok
word ptr [KOORD_ Y),bx
.2__gombok
151
u,4[si)
bx,6[si[
u,word ptr [KOORD_X)
.2_gombok
bx,word ptr [KOORD_Y)
.2_gombok
ret
.2_gombok: add
jmp
si,8
.1_gombok
.3_gombok: stc
ret
gombok
end p
IKON:
db
db
db
db
db
db
db
db
1,2,3,4,5,6,7,8
2,3,4,5,6,7,8,0
3,4,5,6,7,8,0,0
4,5,6,7,8,9,0,0
5,6,7,8,9,10,11,0
6,7,8,9,10,11,12,13
7,8,0,0,11,12,13,0
8,0,0,0,0,13,0,0
IKON2:
db
db
db
db
db
db
db
db
14,14,14,14,14,14,14,14
14,0,0,0,0,0,0,14
14,0,14,0,0, 14,0,14
14,0,0,14,14,0,0,14
14,0,0,14,14,0,0,14
14,0,14,0,0,14,0,14
14,0,0,0,0,0,0,14
14,14,14,14,14,14,14,14
;A kilps ikonja
HELY
db
64 dup (O)
152
40,10,10,35,15,10,30,20,10,25,25,10,20,30,10,15,35,10
10,40,10,10,35,15,10,30,20,10,25,25,10,20,30,10,15,35
10,10,40,63,63,63
IT ABLA:
dw
60,30,:Z40,50,24,170,600,140,0fft'fh
GTABLA:
dw
dw
60,30,74,37,240,50,254,57,24,170,38,177
600,140,614,147,0fft'fh
KOORD_X:dw
KOORD_Y:dw
156
96
CIM:
HIBATEXT:
vga5
dw
db
en ds
end start
153
Segment
assume cs:Vga6,ds:Vga6
; Szegmensdefinci
;Cs, ds hozzrendelse
:a szegmensregiszterekhez.
Start:
mov
mov
ax,Vga6
ds,ax
mov
mov
ax,OaOOOh
es,ax
mov
int
ax,llh
l Oh
;320*200/256 felbonts
;belltsa.
call
Line
xo r
int
ax,ax
l 6h
:Billentyvrs.
155
Line
.l_Line:
.l_Line:
mov
int
ax,J
l Oh
mov
int
ax,4c00h
l lh
;Vissza a DOS-hoz.
mov
mov
;A vonal kezdpontjnak s
;vgnek x koordintjt
;berja ax,bx regiszterekbe.
mov
dx,l
;A vzszintes lpskz.
sub
ax,bx
j ne
.I_Line
n eg
ax
mov
dx,65535
mov
mov
mov
mov
mov
mov
sub
j ne
n eg
mov
bx,word ptr [Y a)
ax,word ptr [Yb)
dx,l
a x, b x
.l_Line
ax
dx,65535
RIOV
mov
mov
cm p
156
Proc
.l_Vizsz
mov
shr
dx,ax
dx,l
;Egybknt az algoritmus
;nvekmnyt szmll
;regiszterbe behja a vonal
;vzszintes hossznak a felt.
mov
inc
cx,ax
ex
;A ciklusszmllba pedig a
;hossznl eggyel tbbet.
;Fuggoleges
.l_Fuggo:
.2_Fuggo:
push dx
;Szmll elmentse.
call
Pont
pop
mov
add
add
cm p
je
dx
ax,word ptr (SGN_Y]
;Az algoritmus szerinti
word ptr [PONT_Y],ax ;kvetkez pont koordintainak
dx,word ptr [DELTA_X] ;kiszmtsa.
dx,word ptr [DELTA_Y]
.2_Fuggo
sub
mov
add
loop
re t
; Vzszintes
.l_Vizsz:
mov
mov
inc
shr
.2_Vizsz:
push
call
pop
mov
add
add
cm p
dx
;koordintkkal.
Pont
dx
ax,word ptr (SGN_X]
word ptr [PONT_X],ax
dx,word ptr [DELTA_Y]
dx,word ptr [DELTA_X]
.3_Vizsz
je
157
.3_Vizsz:
sub
mov
add
loop
re t
Line
En dp
Pont
Proc
mov
mov
mov
mul
add
mov
mov
ret
:A pont koordintibl ki
:kell szmolni annak eimt
:a kpernyn, amit a szekott
:mdon egy szorzssal s egy
:sszeadssal tesznk.
;Majd a megadott sznnel
;kirakjuk a pontot a megfelel
;helyre.
Pont
End p
PONT_X:
PONT_Y:
dw
dw
?
?
;A ki rakand pont xy
;koordintja.
Xa:
Ya:
dw
dw
50
50
;A vonal kezdpontjnak
;koordintai.
Xb:
Yb:
dw
dw
200
100
;A vonal vgpontjnak
;koordintai.
DELTA_X: d w
DELTA_Y: d w
?
?
SGN_X:
dw
;A vzszintes lpskz s
;irnya.
SGN_Y:
dw
;A fggleges lpskz s
;irnya.
COLOR:
db
;A vonal szne.
Vga6
En ds
End Start
158
;A szegmens vge.
;A program vge.
159
Segment
assume cs:Vga7,ds:Vga7
;Szegmensdefinci
;Cs.ds hozzrendelse
Start:
mov
mov
ax,Vga7
ds,ax
mov
int
ax,l3h
l Oh
;320*200/256 zemmd
;bekapcsolsa
mov
mov
ax,OaOOOh
es,ax
;A kperny-memria kezdeimt
;es regiszterbe tlti
xo r
ax,ax
;A szmek kezdrtke.
mov
ex, l 6
;Fggleges
mov
di,92*320+144
sorok szma/2
161
.2_ Vga7:
pqsh ex
mov
Cll, l 6
mov
mov
mov
mov
es:[di),ax
es:J20[di),all
es:2[di),all
es:J22[di),all
;A sznel< kiraksa.
inc
inc
al
ah
;Kvetkez
szn
add
loop
add
pop
loop
di,4
.2_Vga7
di,576
;Kvetkez
kppont.
mo
.J_Vga7:
Korbe_Bal
ex
.t_Vga7
Cll,l28
pqsh ex
call Korbe_Fel
call Korbe_Bal
Szunet
;A mozgatsok szma.
;A sebessg cskkentse.
call
pop
ex
loop
.J_Vga7
xo r
int
all,ax
16h
;Billentyvrs.
mov
int
all,l
l Oh
;80*25 karakteres md
;belltsa.
mov
int
all,4c00h
21 h
;Visszatrs az opercis
;rendszerhez.
Proc
call
162
Vert_Dl
;Idzts
hvsa.
.l_KB:
.2_KB:
mov
di,92"320+144
mov
cx.32
;A sorok szma.
push ex
mov ex,63
;A vzszintes mret-1
mov ax,es:[di)
xe hg al, ah
mov es:[di),ax
inc
loop
di
.2_KB
;Kvetkez
pop
add
loop
ex
di,257
.l_KB
kppont.
ret
;Visszatrs a hv programhoz
Korbe_Bal
End p
Korbe_Fel
Proc
call
Vert_BI
mov
mov
di,92"320+144
cx,JI
.I_KF:
push ex
mov cx,32
.2_KF:
mov
mov
mov
mov
ax,es:[di)
!Jx,es:320[di)
es:[di),bx
es:320[di),ax
add
loop
di,2
.2_KF
pop
add
loop
ex
d,256
.l_KF
ret
163
Endp
Mozgat_Bal Proc
.l_MB:
.l_MB:
call
Vert_81
;Idzts.
mov
di,9l*3l0+144
mov
n,3l
;A sorok szma
push ex
mov n,63
;A vzszntes kppontok-l
mov
mov
al,es:l(di)
es:(di),al
inc
loop
di
.l_MB
;Kvetkez
xo r
mov
al,al
es:(di),al
pop
add
loop
ex
kppont.
di,l57
.l_MB
ret
;Vissza a hv programhoz.
Mozgat_Bal Endp
Mozgat_Fel Proc
call
Vert_BI
mov
mov
di,9l*3l0+144
cx,64
.l_MF:
push ex
mov cx,31
.2_MF:
mov
mov
ax,es:3lO(di)
es:(di),ax
add
di,3l0
164
.2_MF
xo r
mov
ax,ax
es:[diJ,ax
pop
sub
loop
di,31 *320-2
.l_MF
Cl<
ret
Mozgat_Fel End p
Fodor_Bal
Proc
call
Vert_BI
;Idzts
mov
di,92*320+144
mov cx,32
push Cl<
;A sorok szma.
.l_FB:
mov cx,S
pusb Cll
.2_FB:
mov
cx,7
mov
mov
inc
loop
xo r
mov
al,es:l(diJ
es:(di),al
di
.3_FB
al,al
es:(di),al
inc
pop
loop
di
Cl<
.3_FB:
pop
add
loop
;trldik.
.2_FB
Cl<
di,2S6
.l_FB
ret
Fodor_Bal
End p
165
Proc
call
mov
mov
Vert_Dl
di,92*320+144
cx,64
.l~ FF:
push ex
mov cx,4
.l_FF:
push ex
mov ex, 7
.3_FF:
""v
mov
add
loop
ax,es:320[dil
es:(di),ax
di,320
.3_FF
xo r
mov
add
pop
loop
ax,ax
es:(di),ax
di,320
ex
.l_FF
pop
sub
loop
ex
di,32*320-2
.l_FF
ret
Fodor_Fel
Endp
Sznet
Proc
.l_Szunet:
push
mov
loop
pop
ret
Szunet
Endp
Vert_Dl
Proc
166
ex
cx,lftlb
.l_Szunet
ex
.2_VB:
in
test
jnz
in
test
jz
dx,3dah
al,dx
al,8
.l_VB
al,dx
al,8
.2_VB
re t
Vert_BI
End p
Vga 7
En ds
End Start
;A szegmens vge
;A program vge.
A prograrnek mkdse knnyedn megrthet, ha elemeire bontva vizsgljuk. A program elejn smmi j dolog nincs, belltja a szekott dolgokat. Ezutn csinl egy 16*16-os ciklust, ami
segtsgvel kirakunk egy sznpalettt ami ksbb az brt fogja
helyettesteni. Ha ezzel megvagyunk, jhet a mozgats. Az
egyes rutinok gy lettek megrva, hogy egy hvsra egy pontnyit
mozgatnak, ezrt ha ennl tbbet kvnunk mozgatni, akkor egy
ciklusba kell szervezni azt. Vgyzni kell azonban arra, hogy a
prograrnek hasznljk a ex regisztert, gyhogy a call utasts
eltt el kell menteni a verembe az rtkt A minta alapbelltsa ktfle krbeforgatst vgez, ezltal a szveg- balrafel mozog. De ezt termszetesen meg lehet vltoztatni, hogy a
tbbi rutint is ki tudjuk prblni. Az eljrsok hvsa utni call
sor egy vrakozst iktat be, mgpedig egy 1fffh hossz holtciklus segitsgvel. Az ismttsi ciklus leteltvel egy billenty
vrs s egy kperny visszallts kvetkezik majd visszatrs
az opercis rendszerhez. Nos akkor nzzk az egyes rutinok
mkdst:
Minden forgats eltt egy Vertical Blank idzts lett beiktatva. Ezutn kvetkezik a mozgatand ablak bal fels sarknak meghatrozsa. Ezek az sszes rutinban megtallhatk.
Ahhoz, hogy egy 64*32 kppont mret alakzatot mozgatni
tudjunk, egy fggleges s egy ebbe gyazott vzszintes ciklusra van szksgnk (vagy fordtva, de akkor megvltozik a
167
Az egyes rutinoknl ms s ms bellts lenne szksges, gyhogy clszer egy j eljrs eltt a vrakozsi idt s
az ismtlsek szmt belltani mivel pldul egy Fodor rutin lefutshoz 8 lps szksges mindssze s viszonylag nagyobb
vrakozsi id, hogy ltni is lehessen valamit.
A kvetkez elg gyakran elfordul grafikai feladat a kr
rajzolsa. Itt hasonl nehzsgek lpnek fel, mint az egyenes
hzsnL A feladatot megoldhatnnk a kregyenlettel, vagy
abbl kiindulva, hogy a szinusz s a koszinusz fggvnyek a
krbl lettek alkotva. gy a kr pontjait gy is megkaphatjuk.
hogy egy 0-360-ig tart ciklus (x) segtsgvel a krhz tartoz
pontok egyik koordintja r*sin(x) a msik pedig r*cos(x) lesz.
Az eddig emltett megoldsok htrnya, hogy alapveten nem
rtana hozzjuk egy lebegpontos aritmetika amivel a trt szmokat is tudjuk kezelni, valamint az, hogy egy 10 pont sugar
krt _is 360 pontbl s egy 100 sugar krt is 360 pontbl pt
fel. Igy addhat olyan eset, amikor a kr fala 1-2 pont vastag
illetve olyan is, amikor a pontok kztt rs van. A megolds
169
Dx s Dy
Delta X illetve a Delta Y a kzpponttl val
tvolsg, amit a program szmol ki.
Dx=r
Dy=O
Szmt:
Klnben: Dx=Dx-1
r=2*Dx+1
Pontkirak:
Pont
Pont
Pont
Pont
Pont
Pont
Pont
Pont
Cx+Dx,Cy+Dy
Cx-Dx,Cy+Dy
Cx+Dx,Cy-Dy
Cx-Dx,Cy-Dy
Cx+Dy,Cy+Dx
Cx-Dy,Cy+Dx
Cx+Dy,Cy-Dx
Cx-Dy,Cy-Dx
Dy=Dy+1
Ha Dy<Dx akkor vissza a szmtshoz.
Klnben vge.
Aki jratos a magasabb szint nyelvekben, az knnyedn
megrti az elbb emltetteket Ami taln a leginkbb feltn, az
a nyolc pontkiraks. Ez vgzi a tkrzst. hogy egy teljes krt
170
Segment
assume cs:Vga8,ds:Vga8
;Szegmensdefinci
;Cs, ds hozzrendelse
;a szepnensregiszterekhez.
Start:
mov
mov
ax,Vga8
ds,ax
mov
mov
ax,OaOOOh
es,ax
mov
int
mov
xo r
ax,l3h
l Oh
dx,word ptr (SUGAR)
cx,cx
;320*200/256 felbonts
;belllfSa.
;Belltjuk a szksges kezd
;rtkeket (Dx=r. Dy=O).
mov
mov
push
mul
pop
ax,cx
bx,cx
dx
bx
dx
cm p
;s ezt sszehasonltjuk a
;sugar rtkveL
ja
.2_Vga8
dec
mov
shl
inc
add
dx
bx,dx
b x, l
bx
word ptr [SUGARJ,bx
mov
add
mov
.1_Vga8:
.2_Vga8:
;A Dx=Dx-1 s az r=r+2"Dx+I
vgrehajtsa.
;mveletek
171
172
mov
add
mov
call
mov
sub
mov
mov
add
mov
call
mov
add
mov
mov
sub
mov
call
mov
sub
mov
mov
sub
mov
call
mov
add
mov
mov
add
mov
call
mov
sub
mov
mov
add
mov
call
.3_Vga8:
Pont
mov
sub
mov
mov
sub
mov
call
inc
cm p
j ne
jmp
ex
cx,dx
.3_Vga8
.l_Vga8
xo r
int
ax,ax
16h
;Billentyvrs .
mov
int
ax,3
l Oh
;Szveges kperny.
mov
int
ax,4c00h
21 h
:Visszatrs az opercis
:rendszerhez.
a:~,ex
;A Dy=Dy-1 vgrehajtsa.
;Ha Dx<Dy akkor vge.
;Klnben jabb pont.
Proc
push
mov
mov
mov
mul
add
mov
mov
bx ax dx
di,word ptr [PONT_X)
ax,word ptr [PONT_Y[
bx,320
bx
di,ax
al,byte ptr [COLOR]
es:[di],al
pop
ret
dx ax bx
:A pont koordintibl ki
;kell szmolni annak cmt
:a kpernyn. amit a szakott
:mdon egy szorzssal s egy
:sszeadssal tesznk.
;Majd a megadott szinnel
;kirakjuk a pontot a megfelel
:helyre.
173
Endp
PONT_X: d w
PONT_Y: d w
COLOR:
db
dw
SUGAR:
KOORD_X:dw
KOORD_Y: dw
Vga8
?
?
7
50
160
100
En ds
End Start
;A kirakand pont xy
;koordintja.
;A vonal szne.
;A kor sugara,
;X koordintja.
;Y koordintja.
;A szegmens vge.
;A program vge.
17-t
175
Hossz
4
4
Tartalom/Jelents
FORM formtum cmke.
A file hossza ezt kveten.
A formtum neve.
oc
10
14
16
20
22
24
2
2
2
4
28
2C
30
?
DPPS+4
?
CRNG+4
?
?
4
4
4
4
TINY+4
BODY+4
Segment
assume cs:Vga9,ds:Vga9
;Szegmensdefinci.
;Cs,ds belltsa.
177
Tovabb:
mov
mov
ax,Vga9
ds,ax
mov
mov
int
ax,4a00h
bx,l024
21 h
;A program ltallefoglalt
;memriaterletet 16K
;mretre vltoztatjuk.
mov
mov
int
mov
ax,4800h
;Krnk a DOS-tl egy
bx,4096
;64K mret memrialapot.
2lh
word ptr [MEMOCIM[,ax;Ennek szegmenseimt a
;memriavltozba tesszle
mov
mov
int
mov
ax,3d00h
;A FILENEV alatt trolt nev
dx,offset FILENEV
;file megnyitsa olvassra.
2lh
word ptr [FILESZAM),ax;A visszakapott file azonost
;informcit a memriba
;mentjk.
jnc
jmp
Tovabb
Hiba
pusb
mov
mov
mov
mov
xor
mov
int
ds
;A ds regiszter rtkt
bx,ax
;elmentjk, mivel mi nem
ax,word ptr [MEMOCIM);a ds ltal mutatott
ds,ax
;szegmensre kvnunk betlteni
ax,3f00h
;hanem az ltalunk lefoglaltdx,dx
;ra. A DOS htrnya viszont,
cx,Otmb
;hogy a betltend file
2lh
;helyt a ds:dx regiszterben
;kell megadni a rutinnak.
pop
ds
mov
mov
int
ax,3e00b
;A file lezrsa.
bx,word ptr [FILESZAM)
2lb
mov
int
ax,lJb
l Oh
mov
(lx,3c8h
cx,2S6
ax,ax
;A sznpaletta kinullzsa
IllO V
xo r
178
;A ds visszalltsa.
.t_Vga9:
out
dll,al
inc
ds
push n
sor
8li,8I
;~-G-B
out
out
out
dll,al
dll,al
dll,al
nullzsa.
pop
dec
inc
loop
ds
al
.t_Torles
mov
mov
mov
mov
schg
8I
repnz scasb
jnz
Hiba
mov
push
dec
mov
re p z
pop
jaz
si,offset CIMKE
din
di
Cll,4
cm ps b
Cll di
.l_Vga9
mov d,.,es:(di+5(
schg dl,dh
;A tmrtett kp hosszat
;a ds regiszterbe teszi
add
di,7
push ds
mov
mov
mov
es,a:x
IDOV
Si,di
;szegmenscimt tlti.
;Si-be a tmrtett kp
tesZI.
;kezdcimt
179
.2_ Vga9:
xo r
xo r
di,di
ch,ch
;Regiszterek nullzsa.
and
jz
dx,dx
Szin
mov
inc
dec
cl,[si)
si
dx
test
jz
cl,128
Norma l
;Tomoritett
n eg
inc
cl
cl
mov
al,[ si)
inc
si
;A kvetkez byte.
dec
re p
jmp
dx
stos b
2_Vga9
;A szmll cskkentse.
;CI darab al kiraksa a kpre,
;majd vissza.
Norm al:
inc
sub
re p
jmp
cl
dx,cx
movsb
.2_Vga9
Szin:
mov
si,30h
mov
cx,256
mov
ai,O
mov
out
inc
push
inc
dx,3c8h
dx,al
al
;A sznpaletta mdostsa
;a memriban trolt adatoknak
.l Szin:
-
180
as
dx
;megfelelen.
Hiba:
mov
shr
shr
out
al, l sil
al, l
al, l
dx,al
mov
shr
shr
out
al,lsi+ll
al, l
al, l
dx, al
mov
shr
shr
out
al,[si+21
al, l
al, l
dx, al
;A kk sszetev belltsa.
add si,3
pop ax
loop .l_Szin
;A kvetkez szn.
xo r
int
;Billentyvrs.
mov ax,3
int
l Oh
;Karakteres md belltsa.
mov ax,4c00h
int
21 h
;Visszatrs az opercis
;rendszerhez.
CIMKE:
db
FILESZAM:dw
MEMOCIM:dw
FILENEV: db
Vga9
ax,ax
16h
"BODY"
?
?
"demokep.lbm",O
En ds
End Start
;A szegmens vge.
;A program vge.
182
Felbonts:
Sznek szma:
59h
58 h
SCh
SD h
SEh
5Fh
800*600
800*600
800*600
1024""768
640*400
640*480
2
16
256
16
256
256
183
Felbonts:
Sznek szma:
60 h
61 h
62h
63 h
6 Ah
71 h
74h
640*400
640*480
800 *600
1024*768
800*600
800*600
1024*768
256
256
256
256
16
16
16
zemmd:
Felbonts:
Sznek szma:
54h
61 h
62 h
63 h
64h
65 h
800*600
640*400
640*480
800*600
1024*768
1024*768
16
256
256
256
256
16
zemmd:
Felbonts:
Sznek szma:
?Oh
72 h
78 h
79h
?Bh
800*600
1024*768
640*400
640*480
800*600
16
16
256
256
256
ATI
CHIPS& TECH
EV EREX
!! ax=Ox70h bi=zemmd !!
zemmd:
Felbonts:
184
Sznek szma:
16
16
4
4
256
256
256
16
256
256
256
zemmd:
Felbonts:
Sznek szma:
59h
58 h
5Ch
5 Dh
SEhvagySCh
5Fh
6Ah vagy 79h
7Ch
7 Dh
7 Eh
7 Fh
720*512
640"350
640*480
720*512
800*600
1024*768
800*600
512*512
512*512
640*400
1024*768
16
256
256
256
256
16
16
16
256
256
4
zemmd:
Felbonts:
Sznek szma:
58h
59h
5Ah
5Ch
5 Dh
5Eh
5Fh
800*600
800*600
1024*768
800*600
1024*768
640*400
640*480
16
2
2
256
16
256
256
01h
02 h
11h
12h
13h
14h
15h
20h
30h
31 h
32h
GENOAGVGA
NCR
185
Felbonts:
Sznek szma:
52h
53h
54h
56h
58h
59h
800"600
640*480
800"600
1024"768
1280*1024
1024"768
16
256
256
16
16
256
zemmd:
Felbonts:
Sznek szma:
58h
59h
SCh
50h
SEh
5 Fh
800"600
800"600
800"600
1024"768
640*400
640*480
16
2
256
16
256
256
zemmd:
Felbonts:
Sznek szma:
5Bh
SCh
SOh
SEh
5Fh
60h
61 h
62h
6 Ch
74h
75h
76h
77h
800"600
640*400
640*480
800"600
1024"768
1024"768
768*1024
1024"768
640*480
640*480
640*480
800"600
800"600
16
256
256
256
16
4
16
256
16M
32K
64K
32K
64K
PARADISE
TRICENT 8900CL
186
Felbonts:
Sznek szma:
29h
20 h
2 Eh
2 Fh
30h
37h
800"600
640"350
640*480
720*512
800"600
1024*768
16
256
256
256
256
16
zemmd:
Felbonts:
Sznek szma:
29h
20 h
2 Eh
2 Fh
30h
37h
38h
800"600
640"350
640*480
640*400
800"600
1024*768
1024*768
16
256
256
256
256
16
256
TSENG4000
VIDE07
!! ax=6F05h bi=zemmd !!
zemmd:
Felbonts:
Sznek szma:
60h
61 h
62h
63h
64h
65h
66h
67h
68h
69h
6Ah
752*410
720*540
800"600
1024*768
1024*768
1024*768
640*400
640*480
720*540
800"600
1024*768
16
16
16
2
4
16
256
256
256
256
256
187
Segment
;Szegmensdefinci.
assume cs:Svgal,ds:Svgal ;Cs,ds hozzrendelse.
Szeleseg
equ
Start:
mov u,Svgal
mov ds,u
mov u,OaOOOh
mov es,u
;A videomemria kezdc:mt
;es regiszteibe teszi.
call
188
1024
Trident_lni
Ahead_Ini
mov a,l0l4
push CI
;A vonal hossza.
mov
mov
mul
mov
add
adc:
c:all
Trident_Lapoz
mov
mov
pop
inc:
loop
mr
int
u,u
16h
;Billentyvrs.
mov
int
mov
int
u,3
lOb
u,4c00b
l lb
;A szveges md belltsa.
CI
;Visszatrs az openicicis
;ren~rhez.
Proc
mov
int
u,63h
lOb
ret
Ahead_lni
Eadp
189
Proc
mov u,S9b
int
ret
Oak_Ini
1011
Eadp
Trideot_Ini Proc
mov u,6lb
int
ret
lOb
Trideot_Ini Eodp
Tseog__Ini
Proc
mov u,38b
int
ret
Tseag__Ini
lOb
Eodp
Abd_Lapoz Proc
mov ab.dl
mov &:1,4
sbl
dl,cl
or
ab.dl
mov ai.Odb
mov tb,3eeb
out
ret
tb,u
Abd_Lapoz Eodp
Oak_Lapoz Proc
mov db,cU
mov e1,4
sbl
190
db.el
--- ......
or
IIHIV
dl,dll
ab,dl
...1111
tb,3dell
ds,al
iac
ill
ds
l,ds
out
ds,al
ret
Ollk_L8par& Elldp
--_,
Trid_L8par& Proc
IIHIV
inc
iD
ad
mr
or
...,dl
lb,3c411
I,Oell
U,. l
ds
l,dx
u,OIIOII
b,l
_, ......
ds,al
ret
Trid_L8poz EDdp
TSLLpoz Proc
mov l,dl
mov
mov cl,3
......
sbl
or
or
out
81,cl
.J,40b
......
lb,3cdb
U,.l
ret
T~&....L8poz
EDd p
191
dw
dw
db
O
384
15
Svgal
En ds
End Start
;A szegmens vge.
;A program vge.
[Program 31]
Svgal
Segment
;Szegmensdefinci.
assume cs:Svgal,ds:Svglll ;Cs,ds hOZ2rendelse.
Stan:
mov
mov
u.Svglll
ds,u
mov
mov
u,OaOOOh
es,ax
;A videomemria kezdcimt
;es regiszterile teszi.
call
Trident_Ini
.l_Svgal:
mov cs,10:Z4
push ex
;A vonal hossza.
mov
mov
mov
xo r
mov
int
pop
inc
loop
ex
word ptr (Koord_X)
.l_Svgal
xor
int
u, u
16h
;Billentyvrs.
mov
int
u,3
lOb
;A szveges md belltsa.
mov as,4c00h
int
l lh
192
;Visszatrs az opercis
;rendszerhez.
Proc
mov
int
ret
Ahead_lni
Endp
Oak_Ini
Proc
mov
int
ret
Oak_Ini
u,6lb
!Oh
u,59b
lOh
Endp
Trident_Ini Proc
mov
int
ret
ax,62h
l Oh
Trident_Ini End p
Tseng_Ini
Proc
mov
int
ret
ax,38h
l Oh
Tseng_Ini
End p
Koord_X:
Koord_Y:
Szin:
dw
dw
db
Svgal
En ds
End Start
o
384
15
;A szegmens vge.
;A program vge.
193
194
Tartalom:
0-1
2-3
Fenntartott.
5-9
OAh-OB
OCh-ODh
OEh-OFh
10h-11h
12h-13h
hibakezel
rutin offsetcme.
14h-15h
hibakezel
rutin szegmenscme.
16h-2B
2Ch-2Dh
A programkrnyezet szegmenscme
2Eh-4Fh
50h-52h
53h-5Bh
call
195
6Ch-7Fh
80h-FFh
Mkdse:
ah=O
ah=1
ah=2
ah=3
A kurzor pozcijnak lekrdezse. A bh regiszterben kell megadni a lap sorszmt, ahol kvncsiak vagyunk a kurzor helyzetre s az elbb
emltett regiszterekben kapjuk meg a szksges
informcikat Grafikus zemmdban a lap sorszma ltalban O.
ah=4
196
ah=&
ah=7
ah=S
A bh regiszter ltal mutatott lapon a kurzor pozcijban lv karakter ascii kdjnak s sznnek lekrdezse. A kdot ah, a sznt al regiszterekben kapjuk meg.
ah=9
ah=OAh
ah=OBh
197
ah=ODh
Pont kiraksa a dx ltal megadott sorban, ex ltal megadott oszlopban al sznnel, bh ltal mutatott lapra. 256 szn grafikus mdban al csak a
sznt hatrozza meg, klnben ha a 7. bitje 1 rtk, akkor az aktulis helyen lv sznnel xor
kapcsolatba hozza az ltalunk megadottat, s az
eredmnyt fogjuk ltni a kpernyn.
Egy pont visszaolvassa. Az eredmnyt az
emltett regiszterekben kapjuk.
elbb
ah=OEh
ah=OFh
ah=10h
198
ai=O
al=1
al=2
A paletta regiszterek s a keret lltsa es:dx ltal mutatott adatterlet rtkei alapjn. Az els
16 byte a palettasznt, a 17. byte a keret sznt
hatrozza meg.
al=3
A szn byte 3. bitjnek rtelmezse. Ha bi=O akkor az intenzits, bl=1 eseln pedig villogs vezrlse.
ai=S
ah=9
al=1 Oh
al=12h
Az MCGA s a VGA krtyk sznpalettinak belltsa az es:dx ltal mutatott tblzat adatai
alapjn. Cx mutatja a belltand sznregiszterek
szmt. A szneket RGB sorrendben kell trolni
a memriban.
al=13h
al=15h
al=17h
199
Az MCGA s a CGA krtyk digitl-analg talaktja maszkregiszternek belltsa bl regiszterben megadott rtkre.
al=19h
ai=1Ah
al=1 Bh
ah=11 h
200
ai=O
al=1
al=3
al=4
al=21 h
al=22h
al=23h
al=24h
al=30h
ah=12h
bl=1 Oh
bh=O
bh=1
bh= 2
bh=3
bh=4
bh=S
bh=&
bh=7
bl=20h
202
: 64Kbyte,
: 128 Kbyte,
: 196 Kbyte,
: 256 Kbyte vagy tbb.
kperny
bl=32h
bl=33h
bl=34h
bl=36h
A betlts engedlyezve,
al=1
A betlts letiltva.
Az elrs megengedett,
al=1
Az elrs tiltott.
ellltsnak
ai=O
A konverzi megengedett,
al=1
A konverzi tiltott.
enge-
Az emulci megengedett,
al=1
Az emulci tiltott.
A kimenetek engedlyezettek,
al=1
A kimenetek tiltottak.
203
ai=O
al=1
al=2
al=3
ah=1Ah
ai=O
megjelent
Megjelent
O
1
2
3
Nincs beptve
MDA fekete-fehr
CGAsznes
Fenntartva
EGAsznes
EGA fekete-fehr
PGA
VGA analg fekete-fehr
VGA analg sznes
Fenntartva
MCGA digitlis sznes
MCGA analg fekete-fehr
4
5
6
7
8
9
OAh
OBh
204
adatainak lekrdezse.
al=1
ah=1Bh
Hossz
Funkci
OBh
16
Az egyes lapokon
lv
kurzorok cmei.
1Bh
1Ch
A kurzor
1Dh
1Eh
kezdsornak
szma.
20 h
21 h
205
22h
23 h
25h
26 h
27h
kdja.
29h
2Ah
megjelent
o- 200
1-350
2-400
3-480
4 - fenntartva 5 - 600
6-768
2 Bh
2 Ch
2 Dh
7-6
5
4
3
2
1
O
2 Eh
206
Fenntartva.
A villogs engedlyezett.
Kurzor emulci engedett.
Az alap palettartkek betltse
engedlyezett.
Fekete-fehr monitor hasznlata.
A szrke rnyalatok ellltsa
engedlyezett.
Minden md bellthat.
Fenntartva.
31 h
O -64K
2 -196K
32h
7-{)
5
4
3
2
1
O
33 h
1- 128K
3 - 256K vagy tbb.
13
Fenntartva.
Kiegszt tblzat hasznlata.
A paletta regiszterek fellrhatk.
A grafikus karakterek fellrhatk.
A norml karakterek fellrhatk.
Dinamikus jellemzk tblzata
aktv.
Kt karakterkszlet hasznlata
VGA krtynl.
Fenntartva
Hossz
Funkci
Fenntartva.
Fenntartva.
400 sor.
350 sor.
200 sor.
kszletek szma.
9
betlthet
kszletek szma.
207
9
8
7-4
3
2
1
OC h
OEh
Fenntartva.
Mentsi paramterek:
7-6
5
4
3
2
1
o
OFh
ah=1Ch
ai=O
208
Fenntartva.
Kiegszt tblzat hasznlhat.
Paletta regiszterek menthetk.
Grafikus kszlet menthet.
Norml karakterek menthetk.
Dinamikus jellemzk tblzata
menthet.
Tbb karakterkszlet engedett.
Fenntartva.
A VGA krtya llapotnak mentse, visszatltse.
A mentshez szksges memriaterlet mretnek lekrdezse. A ex regiszter bigeivel vlaszthat ki a menteni kvnt tulajdonsgok csoportja
s bx regiszterben kapjuk a szksges memria
terlet mrett 64Byte-os egysgben.
Paramtercsoport
2
1
O
Sznkdok adatai
BIOS adatmez
Hardware paramterek.
al=1
al=2
209
Trgymutat
Trgymutat
A
AAA,74
AAD,75
AAM,75
AAS, 74
Adatbusz, 7
ADC, 76
ADD, 76
ALU, 6
AND, 25; 88; 101
Asciikd,l7
Assembly, 8
B
BCD, 41
Bels regiszter, 114
Bettpus, 135
Binris, 36
BIT, 7; 25; 93; 130
Bitsk, 122
Bittrkp, 136; 174
Brusb, 182
Byte, 7; 16; 20
c
CALL, 32; 87
Carry, 102
CBW,80
CGA, 92
Ciklusok, 9; 32
Cm, 7
Cmbusz, 7
Cmke, 20; 23
CLC,81
CLD, 61; 82
CLl, 82
CMC,82
CMP,80
210
CMPS,80
CMPSB, 57; 81
CMPSW, 57; 81
CPU, 6
<...'WD, 80
D
DAA,75
DAS, 75
DEC, 76
Decimlis, 38
DIV, 40; 77
DMA, 67
DTA,66
Dword, 7; 16; 20
E
EGA, 116
Egrkurzor, 98
Eljrsok, 9
EQU, 69
F
FAR, 23
Felbonts, 92; 116; 140
Felttelek, l O
File, 52
Flag, 12; 24; 70
G
Gpkd, 8
H
Handle, 53
Httr, 121
Hercules, 92
Hexadecimlis, 36
HLT, 90
Holtciklus, 70
Trgymutat
I
110,68
IDIV, 77
Ikon, 92; 98; 143
IMUL, 77
IN, 69; 82
INC, 76
lndexregiszter, 12
INS,83
INSB,83
INSW,83
INT, 17; 87
Int, 70
Intenzits, 93
INT0,87
IRET, 70; 87
LAHF,80
LDS, 79
LEA, 78
JA, 84
JC,85
JG,85
JGE,85
JMP, 23; 84
JNA,84
JNC,84
JNG,85
JNGE,86
JNZ,85
JZ,85
K
Lebegpontos,
153
LES, 79
WCK,90
LODS,78
LODSB,78
LODSW,78
LOOP,32; 86
LOOPNZ,86
WOPZ,86
M
Megszakts, 67
Memria, 51
Memriavltoz, 20
Men,44
Monitor, 92
MOV, 15;77
MOVS,78
MOVSB,78
MOVSW,78
MUL, 77
N
NEG, 25; 88
NOP,90
NOT, 25; 88
o
Offset, 10; 17
OR, 26; 88; 101
Org, 14
OUT, 69; 83; 92
OUTS,83
OUTSB,83
OUTSW,83
211
Trgymutat
p
RAM, 6
RCL, 28; 89
RCR, 27; 89
Real-Time, 41
Regiszter, 10
REP, 57; 86
REPNZ,86
REPZ, 86
RET,32; 87
RETF,87
Rezidens, 70
ROL, 27; 89
ROM BIOS,14; 17; 33; 92;
117
ROR, 27; 89
s
SAHF,80
SAL, 29; 89
SAR, 28; 90
SBB, 76
Scan kd, 51
SCAS,81
SCASB, 57; 81
SCASW, 57; 81
ScroU,159
Sequencer, 126
212
SET-RESET,122
SHL, 28; 89
SHR,28;89
Stack, 38
Standard, 183
STC,81
STD,82
STI, 82
STOS, 78
STOSB, 78
STOSW, 78
SUB, 76
SVGA,183
Szegmens, 10; 14; 23; 55
Szegmenscm, 93
Szegmensregiszter, 12
Sznbyte, 17
Sznkioszts, 93
T
TEST, 81
Tmrts, 174
zemmd, 92
v
Vltozk, 9
Verem, 38
Vertical Blank, 114
VGA, 116
Video lap, 117
Videomemria, 117
w
WAIT,90
Word, 7; 16; 20
x
XCHG,79
XLAT,36; 79
XOR,26;88
792,-
II
* kszletezs
* bizomnyi beszerzs
* export - import
* nagykeresketJelem
l
l
* katalgustr
* alkalmazstechnikai tancsads.
* alapanyagok
* alkatrszek
* szerelsi anyagok* rszegysgek
*~;,pek
* muszerek
* komplett technolgik
/l
beszerzst vllaljuk
elssorban
Raktrbzisunk szoii:ltatsai
* brraktrozs.