Èñïîëüçîâàíèå àññåìáëåðà - ÷àñòü 2
; ïî âûçîâó äëÿ ÿçûêà Ñè è ÿâëÿåòñÿ
; äàëüíåé
.386 ; èñïîëüçîâàòü èíñòðóêöèè ïðîöåññîðà 80386
push di ; ñîõðàíÿåì ðåãèñòð DI
cld ; ñáðàñûâàåì ôëàã íàïðàâëåíèÿ
les di, double_buffer ; çàãðóæàåì â ES:DI àäðåñ áóôåðà
õîr åàõ,åàõ ; îáíóëÿåì ðåãèñòð ÅÀÕ
mov ñõ,320*76/4 ; çàïîëíÿåì 76 ñòðîê
rep stosd ; äåëàåì ýòî
mov åàõ,01Å1Å1Å1Åh ; çàãðóæàåì â ÅÀÕ êîä ñåðîãî öâåòà
mov ñõ,320*76/4 ; íàì íàäî çàïîëíèòü 76 ñòðîê
rep stosd ; äåëàåì ýòî
pop di ; âîññòàíàâëèâàåì DI
ret ; êîíåö
Draw_Ground_32 ENDP END
Ëèñòèíã 19.5. ôóíêöèÿ âèçóàëèçàöèè íåáà è çåìëè (RENDERB.ASM).
; Ýòà ôóíêöèÿ ðèñóåò çåìëþ è íåáî. Â íåé èñïîëüçóþòñÿ
; 32-áèòîâûå ðåãèñòðû è èíñòðóêöèè.
;//////////////////////////////////
.MODEL MEDIUM,Ñ ; èñïîëüçîâàòü medium ìîäåëü è ñîãëàøåíèå Ñè
.CODE ; íà÷àëî êîäîâîãî ñåãìåíòà
EXTRN double_buffer:DWORD ; àäðåñ äóáëèðóþùåãî áóôåðà
EXTRN video_buffer:DWORD ; àäðåñ âèäåîáóôåðà
PUBLIC Render_Buffer_32 ; äåëàåì ôóíêöèþ îáùåäîñòóïíîé
Render_Buffer_32 PROC FAR Ñ ; ôóíêöèÿ ïîääåðæèâàåò ñîãëàøåíèÿ
; Ñè è ÿâëÿåòñÿ äàëüíåé
.386 ; èñïîëüçîâàòü èíñòðóêöèè 80386 ïðîöåññîðà
push ds ; ñîõðàíèòü ðåãèñòð ñåãìåíòà äàííûõ
cld ; ñáðàñûâàåì ôëàã íàïðàâëåíèÿ
lds si, double_buffer ; â ðåãèñòðû èñòî÷íèêà (DS:SI)
; çàãðóæàåì àäðåñ áóôåðà
les di, video_buffer ; â ðåãèñòðû ïðèåìíèêà (ES:DI)
;çàãðóæàåì àäðåñ âèäåîïàìÿòè
mov ñõ,320*152/4 ; îïðåäåëÿåì êîëè÷åñòâî äâîéíûõ ñëîâ
rep movsd ; êîïèðóåì
pop ds ; âîññòàíîâèòü ðåãèñòð ñåãìåíòà äàííûõ
ret ; ñäåëàíî!
Render_Buffer_32 ENDP
END