2016-05-15 8 views
1

Ich versuche, ein Dreieck in Assembly mit Hilfe von Fasm zu zeichnen, aber ich kann es einfach nicht schaffen. Ich habe den folgenden Code, um ein Rechteck zu zeichnen, und ich dachte, dass ich nur den [comp] Wert innerhalb des Zyklus "ciclopinta" verringern sollte, aber das funktioniert einfach nicht (oder mache ich es falsch).Zeichnen Sie ein Dreieck in Assembly mit fasm

org 100h 
mov ah,4fh 
mov al,02h 
mov bx,13h 
int 10h 
mov [alt],50 
mov [comp], 100 
mov dx, 100 
mov cx,100 
ciclopinta: 
ciclo1: 
mov ah,0ch 
mov al,23h 
mov bh, 0 
int 10h 
dec cx 
dec byte[comp] 
jnz ciclo1 
mov cx, 100 
mov [comp],100 
dec dx 
dec byte [alt] 
jnz ciclopinta 

mov ah, 07h 
int 21h 
mov ah,4ch 
int 21h 

comp rb 1 
alt rb 1 

Antwort

3
mov ah,4fh 
mov al,02h 
mov bx,13h 
int 10h 

Warum sind Sie eine VESA-Funktion mit einem Legacy-Video-Modus einzustellen? Normalerweise sollte das nicht funktionieren. Besser verwenden Sie die folgende:

mov ax, 0013h ;320x200 256-colors 
int 10h 

Nahe dem Ende des Programms Sie die BIOS-Funktion 07h bis ScrollWindowUp verwenden, aber Sie tun nicht Setup alle Parameter für sie zu arbeiten. Beste entfernen Sie diese Zeilen mov ah, 07hint 21h


Ihre Idee der comp Variable ist gut zu verringern. Ich schlage vor, Sie schreiben:

dec dx 
mov [comp], dl ;It's a byte-sized variable