codice:
;COLCHAR.ASM
;
;Stampa un carattere a colori
;
EXTRN L_CLS:NEAR ; Pulisce lo schermo
EXTRN L_KWAIT:NEAR ; Attende la pressione di un tasto
EXTRN L_WCHR:NEAR ; Visualizza il carattere in AL col colore di BL
_prg SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:_prg,DS:_prg
ORG 0100h
JMP START
START: MOV BH,00h ; Pagina video 0
CALL L_CLS ; Reimposta a 80x25 e pulisci lo schermo
MOV CX,0Fh ; Visualizza in 15 colori diversi
MOV DX,0Fh
VIS: MOV AL,'*' ; Imposta il carattere da stampare
MOV BL,DL ; Imposta il colore corrente
MOV DX,01 ; Numero di caratteri da visualizzare
CALL L_WCHR ; Visualizza il carattere corrente
CALL L_KWAIT ; Attendi la pressione di un tasto
LOOP VIS ; Ripeti finchè CX <> 0
CALL L_CLS ; Reimposta a 80x25 e pulisci lo schermo
MOV AH, 4Ch ;
INT 21H ; ^ Esci al DOS
_prg ENDS
END START
E così non sarebbe meglio visto che non chiami in causa lo stack e quindi il programma sarà più veloce? (di qualche miliardesimo di secondo
).
Poi puoi fare quello che vuoi ma ad esempio in un linguaggio ad alto livello, dentro a un ciclo non modifichi mai il contatore di ciclo tranne esigenze particolari...