Hallo,
angesichts dessen, dass bei neueren Betriebesystemen als Windows XP nichteinmal mehr der 320x200 8 bit Grafikmodus geht, hab ich jetzt mit Autoit einen Vollbild-Original-Ausflösung 32 bit Grafikmodus für Assembelr erstellt. Mein Skript erzeugt eine Hintergrund-GUI und das Assembler-Programm malt drauf, wenn das Fenster im Vordergrund ist. Trotz Sleep(50) in der Schleife des Assemblerprogramms, verbraucht es ziemlich viel Prozessorleistung (bei mir ca. 5%).
Wenn ihr selber Assembler könnt werdet ihr sehen, die letzten 3 Zeilen des vorgegebenen Assemblerprogramms (im Edit) auch durch rep stosd ersetzbar sind, aber man kann es so direkt abändern.
Wenn ihr ein '#' vor eine Zeile macht, wird diese vor die Endlosschleife gesetzt. Alle Register außer eax bleiben in der Schleife unberührt. Das im Edit eingegebene "Programm" ist die "innerloop" der Endlosschleifen und sollte deswegen auch keine Endlosschleife selber sein!
Der fertige Assembkercode ist während und nach dem Ausführen (F5) in der .asm-Datei sichtbar. Der Assemblercode wurde mit FASM assembliert.
Das vorgegebene Beispiel zeigt ein Blau, welches langsam zu einer Grün(-ähnlichen) Farbe wird.
An alle die sich freuen endlich mit Assembler auf den Vollbirdschirm direkt im Arbeitesspeicher zugreifen zu können: Viel Spaß! (und den anderen natürlich auch viel Spaß!)
Ich hoffe es gefällt euch. Ich bitte auch um Rückmeldungen, danke!
EDIT:
Mein alt bekanntes Muster
Spoiler anzeigen
#finit
jmp www
bildwert dd 0.01
ftemp dd 0.0
r db 0
g db 0
b db 0
c dd 0
www:
fld [bildwert]
xor edx,edx
for_y:
xor ecx,ecx
for_x:
mov [ftemp],edx
fild [ftemp]
fmul st0,st1
fptan
fstp st0
mov [ftemp],ecx
fild [ftemp]
fmulp
fistp dword[r]
mov [ftemp],edx
fild [ftemp]
fmul st0,st1
fcos
mov [ftemp],ecx
fild [ftemp]
fmulp
fistp dword[g]
mov [ftemp],edx
fild [ftemp]
fmul st0,st1
fsin
mov [ftemp],ecx
fild [ftemp]
fmulp
fistp dword[b]
mov byte[code=c],0xFF
mov eax,dword[r]
stosd
inc ecx
cmp ecx,500
jne for_x
mov ecx,w
sub ecx,500
xor eax,eax
rep stosd
inc edx
cmp edx,500
jne for_y
fstp st0
Alles anzeigen
und hier noch das gleiche, mit dem Ändern des Floats, also dieses "rauszoomende Bild". ist wegen dem Sleep(50) in der Endlosschleife sehr langsam aktualisiert, aber das könnt ihr ja ändern (in $second ist ein "invoke Sleep,50").
Spoiler anzeigen
#finit
jmp www
bildwert dd 0.001
fbwadd dd 0.001
ftemp dd 0.0
r db 0
g db 0
b db 0
c dd 0
www:
fld [bildwert]
fld [fbwadd]
faddp
xor edx,edx
for_y:
xor ecx,ecx
for_x:
mov [ftemp],edx
fild [ftemp]
fmul st0,st1
fptan
fstp st0
mov [ftemp],ecx
fild [ftemp]
fmulp
fistp dword[r]
mov [ftemp],edx
fild [ftemp]
fmul st0,st1
fcos
mov [ftemp],ecx
fild [ftemp]
fmulp
fistp dword[g]
mov [ftemp],edx
fild [ftemp]
fmul st0,st1
fsin
mov [ftemp],ecx
fild [ftemp]
fmulp
fistp dword[b]
mov byte[code=c],0xFF
mov eax,dword[r]
stosd
inc ecx
cmp ecx,500
jne for_x
mov ecx,w
sub ecx,500
xor eax,eax
rep stosd
inc edx
cmp edx,500
jne for_y
fstp [bildwert]
Alles anzeigen