Автор: xen. Дата публикации: 10.08.2004
Пишем напрямую в видеопамять
; полностью завершенная COM-программа
codeseg segment
assume cs:codeseg, ds:codeseg, es:codeseg
org 100h
Code: jmp Start
x dw 50 ;координата x выводимого текста
y dw 20 ;координата y выводимого текста
Text db 'string to be printed',0 ;не забываем 0
Start:
mov AX,80 ;вычисляем адрес
mul y
add AX,x
shl AX,1 ;адрес в AX=160*y+2*x
mov DI,AX
mov SI,offset Text
push ES ;сохраняем ES
mov AX,0B800h ;сегмент экранной памяти в текстовом режиме
mov ES,AX
Print:
lodsb ;загружаем AL из DS:[SI]
or AL,AL ;конец строки?
jz Ready ;да, AL=0
mov ES:[DI],AL ;символ для отображения
add DI,2 ;пропускаем байт атрибутов
jmp Print
Ready: pop ES ;восстанавливаем ES
;---------------------------------------
int 20H
codeseg ends
end Code
Комментарии |
Добавил: GPcH Дата: 12.10.2004 Вот тут один мой знакомый нашел баг в статье. И написал приме, лишенный недостатков, который к тому же рисует на экране фигуры Лиссажу uses crt; const pi:real=3.1415926536; var t:real; x,y,x1,UmX,UmY,Faza:integer; procedure PutPixel (x,y:integer;Color:byte); var i:integer; DecI,Temp:real; Bit:byte; begin if y mod 2 = 1 then begin inc(y); DecI:=(80*(y/2)+(x/4))+8112; Temp:=frac(DecI)*8; Bit:=6-trunc(Temp); i:=trunc(DecI); dec(y); end; if y mod 2 = 0 then begin inc(y); DecI:=80*((y/2)-0.5)+(x/4); Temp:=frac(DecI)*8; Bit:=6-trunc(Temp); i:=trunc(DecI); dec(y); end; asm mov ax, 0b800h mov es, ax mov di, i mov al, byte ptr(es:di) mov cl, Bit ror al, cl mov ah, Color and al, 11111100b add al, ah rol al, cl mov byte ptr(es:di), al end; end; begin UmX:=80; UmY:=80; asm mov ax,4 int 10h end; repeat repeat {delay(5);} y:=trunc(UmY*sin((2*pi*1500*t)*pi/180))+100; x:=trunc(UmX*sin((2*pi*1000*t+Faza)*pi/180))+160; x1:=trunc(UmX*sin((2*pi*1000*t+(Faza-1))*pi/180))+160; PutPixel (x1,y,0); PutPixel (x,y,1); t:=t+0.0008; until(t](145*0.0008)); t:=0; inc(Faza); if Faza=360 then Faza:=0; until(keypressed); end. |
Добавил: GPcH Дата: 12.10.2004 Вышенаписанный пример на паскале и мной не проверялся... если у кого не будет работать - пишите тут |
Добавление комментария |