home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Interdit
/
pc-interdit.iso
/
graph
/
segment.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-10-04
|
2KB
|
69 lines
program segment;
Uses Crt;
Var x:Word;
Procedure PutPixel(x,y,col:word);assembler;
{dessine le point (x,y) en couleur col (Mode 13h)}
asm
mov ax,0a000h {Charge le segment}
mov es,ax
mov ax,320 {Offset = Y*320 + X}
mul y
add ax,x
mov di,ax {Charge l'offset}
mov al,byte ptr col {... et la couleur}
mov es:[di],al {puis dessine le point}
End;
Procedure Line(x1,y1,x2,y2,col:Word);assembler;
asm
{registres exploités :
bx/cx: parties entière/décimale de l'ordonnée y
si : partie décimale de la pente}
mov si,x1 {initialise x }
mov x,si
sub si,x2 {et mémorise en si la différence
des abscisses}
mov ax,y1 {initialise y (en bx) }
mov bx,ax
sub ax,y2 {et mémorise en ax la différence
des ordonnées}
mov cx,100 {étend la différence des ordonnées
pour une meilleure précision}
imul cx
idiv si { divise par la différence des abscisses (pente)}
mov si,ax {mémorise la pente en si }
xor cx,cx {met à zéro la partie décimale des ordonnées}
@lp:
push x { transmet x et la partie entière }
push bx { de y à PutPixel }
push col
call PutPixel
add cx,si {augmente la partie décimale de y }
cmp cx,100 {débordement de la partie décimale ?}
jb @no_debordmt {non, on continue }
sub cx,100 {sinon diminue la partie décimale }
inc bx {et augmente la partie entière}
@no_debordmt:
inc x {incrémente x }
mov ax,x
cmp ax,x2 {déjà terminé ?}
jb @lp {non, on recommence }
end;
Begin
asm mov ax,0013h; int 10h end;{branche le mode 13h }
Line(10,10,100,50,1); {trace un segment }
ReadLn;
Textmode(3);
End.