Assembler. Видеопамять.
Добавлено: 20 май 2008, 17:23
На экране движеться объект (точка и т.п.), при движении меняеться фон. Управление клавишами курсора "Верх"," Вниз". Выход из программы при нажатии сочитания клавиш CTRL+X 
Пока программа умеет двигать точку при нажатии клавиши мышки, 1 раз менять фон, и выходить при нажатии любой клавиши клавиатуры

Пока программа умеет двигать точку при нажатии клавиши мышки, 1 раз менять фон, и выходить при нажатии любой клавиши клавиатуры

Код: Выделить всё
.model tiny
.code
org 100h ; COM-д*©«
.186 ; ¤«п Є®¬**¤л shr cx,3
start:
mov [tx],64h
mov [ty],64h
mov ax,0013h
int 10h ; ўЁ¤Ґ®аҐ¦Ё¬ 640x480
xor si,si
mov bl,00h ; ¬*ЄбЁ¬*«м*л© *®¬Ґа п祩ЄЁ
mov cx,319 ; ¬*ЄбЁ¬*«м*л© *®¬Ґа бв®«Ўж*
mov dx,199 ; ¬*ЄбЁ¬*«м*л© *®¬Ґа бва®ЄЁ
zdisplay:
mov al,bl; 梥в в®зЄЁ (00 - зҐа*л©, 01 - бЁ*Ё©)
mov ah,0Ch ; *®¬Ґа ўЁ¤Ґ®дг*ЄжЁЁ ў AH
int 10h ; ўлўҐбвЁ в®зЄг ** нЄа**
dec si ; б«Ґ¤гой*п п祩Є*
dec cx ; б«Ґ¤гойЁ© *®¬Ґа бв®«Ўж*
jns zdisplay ; Ґб«Ё бв®«Ўжл *Ґ §*Є®*зЁ«Ёбм - Їа®¤®«¦Ёвм
mov cx,319 ; Ё**зҐ: б*®ў* ¬*ЄбЁ¬*«м*л© *®¬Ґа бв®«Ўж* ў CX
dec dx ; Ё б«Ґ¤гойЁ© *®¬Ґа бва®ЄЁ ў DX
jns zdisplay ; Ґб«Ё Ё бва®ЄЁ §*Є®*зЁ«Ёбм - ўл室 Ё§ жЁЄ«*
mov cx,[tx]
mov dx,[ty]
mov al,12h; 梥в в®зЄЁ (00 - зҐа*л©, 01 - бЁ*Ё©)
mov ah,0Ch ; *®¬Ґа ўЁ¤Ґ®дг*ЄжЁЁ ў AH
int 10h
mov ax,0 ; Ё*ЁжЁ*«Ё§Ёа®ў*вм ¬лим
int 33h
;mov ax,1 ; Ї®Є*§*вм Єгаб®а ¬лиЁ
;int 33h
mov ax,000Ch ; гбв**®ўЁвм ®Ўа*Ў®взЁЄ б®ЎлвЁ© ¬лиЁ
mov cx,0002h ; б®ЎлвЁҐ - **¦*вЁҐ «Ґў®© Є*®ЇЄЁ
mov dx,offset handler ; ES :D X - *¤аҐб ®Ўа*Ў®взЁЄ*
int 33h
mov ah,0 ; ®¦Ё¤**ЁҐ **¦*вЁп «оЎ®© Є«*ўЁиЁ
int 16h
mov ax,000Ch
mov cx,0000h ; г¤*«Ёвм ®Ўа*Ў®взЁЄ б®ЎлвЁ© ¬лиЁ
int 33h
mov ax,3 ; ⥪бв®ўл© аҐ¦Ё¬
int 10h
ret ; Є®*Ґж Їа®Ја*¬¬л
; ЋЎа*Ў®взЁЄ б®ЎлвЁ© ¬лиЁ: ЇаЁ ЇҐаў®¬ **¦*вЁЁ ўлў®¤Ёв в®зЄг ** нЄа**,
; ЇаЁ Є*¦¤®¬ ¤*«м*Ґ©иҐ¬ ўл§®ўҐ Їа®ў®¤Ёв Їап¬го «Ё*Ёо ®в ЇаҐ¤л¤г饩 в®зЄЁ Є
; ⥪г饩
handler:
push 0A000h
pop es ; ES - **з*«® ўЁ¤Ґ®Ї*¬пвЁ
push cs
pop ds ; DS - ᥣ¬Ґ*в Є®¤* Ё ¤***ле нв®© Їа®Ја*¬¬л
push cx ; CX (X-Є®®а¤Ё**в*) Ё
push dx ; DX (Y-Є®®а¤Ё**в*) Ї®вॡговбп ў Є®*жҐ
;mov ax,2 ; бЇапв*вм Єгаб®а ¬лиЁ ЇҐаҐ¤ ўлў®¤®¬ ** нЄа**
;int 33h
call putpixel1b
pop dx ; ў®ббв**®ўЁвм CX Ё DX
pop cx
;mov ax,1 ; Ї®Є*§*вм Єгаб®а ¬лиЁ
;int 33h
retf ; ўл室 Ё§ ®Ўа*Ў®взЁЄ* - Є®¬**¤* RETF
; Џа®жҐ¤га* аЁб®ў**Ёп Їаאַ© «Ё*ЁЁ б ЁбЇ®«м§®ў**ЁҐ¬ *«Ј®аЁв¬* ЃаҐ§Ґ*е*¬*
; ‚ў®¤: CX,DX - X, Y Є®*Ґз*®© в®зЄЁ
; previous_X,previous_Y - X, Y **з*«м*®© в®зЄЁ
putpixel1b:
pusha
add bl,1h
mov cx,319 ; ¬*ЄбЁ¬*«м*л© *®¬Ґа бв®«Ўж*
mov dx,199 ; ¬*ЄбЁ¬*«м*л© *®¬Ґа бва®ЄЁ
zdisplay2:
mov al,bl; 梥в в®зЄЁ (00 - зҐа*л©, 01 - бЁ*Ё©)
mov ah,0Ch ; *®¬Ґа ўЁ¤Ґ®дг*ЄжЁЁ ў AH
int 10h ; ўлўҐбвЁ в®зЄг ** нЄа**
dec si ; б«Ґ¤гой*п п祩Є*
dec cx ; б«Ґ¤гойЁ© *®¬Ґа бв®«Ўж*
jns zdisplay2 ; Ґб«Ё бв®«Ўжл *Ґ §*Є®*зЁ«Ёбм - Їа®¤®«¦Ёвм
mov cx,319 ; Ё**зҐ: б*®ў* ¬*ЄбЁ¬*«м*л© *®¬Ґа бв®«Ўж* ў CX
dec dx ; Ё б«Ґ¤гойЁ© *®¬Ґа бва®ЄЁ ў DX
jns zdisplay2 ; Ґб«Ё
mov cx,[tx]
inc cx
mov [tx],cx
mov dx,[ty]
mov al,12h; 梥в в®зЄЁ (00 - зҐа*л©, 01 - бЁ*Ё©)
mov ah,0Ch ; *®¬Ґа ўЁ¤Ґ®дг*ЄжЁЁ ў AH
int 10h
popa ; ў®ббв**®ўЁ¬ ॣЁбвал
ret ; Є®*Ґж
; ᥣ¬Ґ*в*-Ёбв®з*ЁЄ* ¤«п lods б DS ** ES
vid db 320*200+1 dup(?)
tx dw 1 dup(?)
ty dw 1 dup(?)
some_label:
end start