Hey,
ich würde gerne eine Linie zeichen(8086). Ich habe zwei Koordinatenpunkte und würde gerne eine Linie zwischen diesen beiden Punkten zeichen. Danke
Gruß kon
Hey,
ich würde gerne eine Linie zeichen(8086). Ich habe zwei Koordinatenpunkte und würde gerne eine Linie zwischen diesen beiden Punkten zeichen. Danke
Gruß kon
Auch Hey,
ich würde gerne eine Linie zeichen(8086). Ich habe zwei
Koordinatenpunkte und würde gerne eine Linie zwischen diesen
beiden Punkten zeichen. Danke
Siehe (google): bresenham algorithm assembly
z.B. Quelltext hier:
http://www.programmersheaven.com/zone10/cat458/15221…
Soll das reiner Assembler werden
oder ist das in eine Sprache
eingebettet.
Grüße
CMБ
Mahlzeit,
ich würde gerne eine Linie zeichen(8086).
Dann mach mal - wer hindert dich?
Ich habe zwei
Koordinatenpunkte und würde gerne eine Linie zwischen diesen
beiden Punkten zeichen.
Zunächst: deine Angaben reichen nicht aus. Der 8086 allein kann nicht zeichnen. Du mußt schon sagen, welche sonstigen Hard- und Softwarebedingungen herrschen. Wenn du z.B. von einem handelsüblichen PC ausgehst, dann gibt es im BIOS implementierte Routinen für die Grafikausgabe, die per Interruptaufruf bedienbar sind.
Ansonsten würde ich dir raten, dir den Bresenham-Algorithmus anzuschauen. Er kommt mit Integerarithmetik aus und ist deswegen sehr schnell. Auf die Schnelle hab ich im Netz eine ganz brauchbare Beschreibung gefunden: http://home.in.tum.de/~gagern/html-data/tgi/advpss00… (Suche in der PDF-Datei nach Bresenham, die erste Fundstelle erklärt den Algorithmus, die zweite hat schon Teile davon in 8086-Assembler implementiert).
Gruß
Sancho
Es ist ein reines Assemblerprogramm. Ich habe eine analoge Uhr, die auch schon fast funktioniert. Die Uhr läuft, es fehlen nur die Linien zwischen Mittelpunkt und dem Uhrzeitpunkt. Ich habe mir den Algorithmus angesehen, aber ich glaube, der bringt mich nicht weiter …
Hallo
Es ist ein reines Assemblerprogramm. Ich habe eine analoge
Uhr, die auch schon fast funktioniert. Die Uhr läuft, es
fehlen nur die Linien zwischen Mittelpunkt und dem
Uhrzeitpunkt. Ich habe mir den Algorithmus angesehen, aber ich
glaube, der bringt mich nicht weiter …
Folgender code zeichnet eine Linie
von x1=65,y1=20 zu x2=50,y2=200
über Bios int10h:
(Quelle: http://groups.google.de/group/comp.lang.asm.x86/brow…)
ist z.B. hier nochmal erklärt:
http://freespace.virgin.net/hugo.elias/graphics/x_li…
segment stack stack
resb 100
stacktop:
segment data
dex dw 0
dy dw 0
x\_add dw 0
y\_add dw 0
maxd dw 0
act\_dx dw 0
act\_dy dw 0
c dw 0
x1 dw 0
y1 dw 0
x2 dw 0
y2 dw 0
segment code
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,stacktop
mov bp,stacktop
;init finished
mov ah,0h
mov al,13h
int 10h
;screen set
mov ax,word 200
push ax ;y2
mov ax,word 50
push ax ;x2
mov ax,word 20
push ax ;y1
mov ax,word 65
push ax ;x1
call line
;line(x1,y1,x2,y2)
xor ax,ax
int 16h
;wait key
mov ah,0
mov al,3
int 10h
;go back to text mode
mov ah,4ch
int 21h
;end
line:
push bp
mov bp,sp
mov ax,[bp+4] ;x2)
mov ax,[y1]
cmp ax,[y2]
jl min2
mov [y\_add],word -1
jmp end2
min2: mov [y\_add],word 1
end2:
;if (y1\>y2)
mov ax,[dy]
cmp ax,[dex]
jl min3
mov ax,[dy]
mov [maxd],ax
jmp end3
min3: mov ax,[dex]
mov [maxd],ax
end3:
mov cx,[maxd]
here: mov ax,[dy]
add [act\_dy],ax
mov ax,[act\_dy]
cmp ax,[maxd]
jl next
mov ax,[maxd]
sub [act\_dy],ax
mov ax,[y\_add]
add [y1],ax
next: mov ax,[dex]
add [act\_dx],ax
mov ax,[act\_dx]
cmp ax,[maxd]
jl next2
mov ax,[maxd]
sub [act\_dx],ax
mov ax,[x\_add]
add [x1],ax
next2: call plot
loop here
mov sp,bp
pop bp
ret 8
plot:
push ax
push bx
push cx
push dx
mov ah,0ch
mov dx,[y1]
mov cx,[x1]
mov al,0d0h ;change this to change the point-color
mov bh,0h
int 10h
pop dx
pop cx
pop bx
pop ax
ret
Grüße
CMБ