Asembler, kolory

0

Zapodziałem gdzies procedure do tworzenia kolorowych tekstow (16), czy ktos mogłby podac adres gdzie moge to znaleŹĆ albo wypisac mi podobna procedure?

Pozdrawiam

0

Napisałeś tak enigmatycznie, że ledwo Cię zrozumiałem. Pewnie chodzi Ci o to:
http://www.ctyme.com/intr/rb-0099.htm

Jak nie, to opisz problem dokładniej.

[<font color="blue">dopisane</span>]
Mój błąd - wcześniej był link do "rb-0098.htm".

0

Tak o to, ale mam problem z inicjacja tego.
Aby wypisac tekst potrzebuje zainicjowac przerwanie 09h, tak wiec robie:
[code]
mov AH,09h
mov DX,offset(tekst)[/code]
ale aby tekst ten byl np niebieski doczytalem sie z tej strony, ze potrzebuje przerwania 08h. Moze to ze stresu ale u mnie wyglada to tak :
[code]
mov AH,08h
mov AL,001b ; kolor blue
[/code]

Wiem ze cos namieszałem i kazdy kto to czyta smieje sie w matryce ale pomozcie.

0

Nikt się nie śmieje. Każdy z nas kiedyś zaczynał, więc spoko.
Po przeczytaniu tego drugiego postu od razu mogę stwierdzić, że z Assemblera masz ogromne braki z podstaw. Wyjaśnię Ci, gdzie źle rozumujesz:

potrzebuje zainicjować przerwanie 09h (...)
mov AH,09h

A więc: przerwanie - mówiąc najprościej jak się da - jest jakby zbiorem różnych funkcji (to nie jest tak do końca, ale w tym poście omówię tylko to i w taki sposób, co jest Ci potrzebne do kolorowania tekstu).
Aby wywołać np. przerwanie 10h używamy instrukcji int 10h.
To o czym piszesz (mov ah,9   mov dx,offset tekst) to funkcja dziewiąta przerwania 21h.
Czyli aby wyświetlić tekst musisz wykonać instrukcje:
[code]mov ah,9
mov dx,offset tekst
int 21h[/code]

Ale wracając do kolorowego tekstu. Na stronie, którą Ci uprzednio podałem mamy taką informację:

Int 10/AH=09h

Oznacza to funkcję numer 9 przerwania 10h. Czyli aby wypisać na niebiesko znak 'A' należy wykonać instrukcje (aby kod był czytelny nie stosuję żadnych uproszczeń):
[code]mov ah,9   ;nr funkcji przerwania 10h
mov al,'A'   ;kod ASCII danego znaku
mov bh,0   ;strona video (zazwyczaj 0)
mov bl,1   ;nr koloru
mov cx,1   ;ile razy wypisać dany znak
int 10h   ;wywołanie przerwania nr 10h[/code]

Ale do wypisania nie znaku, a łańcucha polecam inną funkcję - również przerwania nr 10h (tak na marginesie jest przerwanie Video). A mianowicie funkcję nr 13h [http://www.ctyme.com/intr/rb-0210.htm].
Przykład:
[code]mov ah,13h   ;nr funkcji
mov al,1   ;opcje - więcej na podanej stronie
mov bh,0   ;strona video
mov bl,1   ;jeśli bit nr 1 w AL=1 to BL zawiera kolor
mov cx,<font color="darkblue">tu należy podać liczbę znaków w wyświetlanym tekście</span>
mov dh,0   ;współrzędna Y
mov dl,0   ;współrzędna X
mov bp,offset tekst   ;zakładam, że tekst znajduje się w segmencie ES,
                     ;do BP ląduje przesunięcie tekstu w pamięci
int 10h[/code]

To tyle - uff. Mam nadzieję, że zachęcę Cię do nauki Assemblera.
Pozdrawiam

0

Bardzo bardzo!
Obiecuje ze bede pilnym uczniem za ten czas, w ktorym pisales te posty!! @~~ @~~ @~~ @~~

To nie takie trudne w sumie!
Dzieki! Kto pyta nie bładzi, kto odpowiada nie pyta :P

Jestem wdzieczny bardzo!! @~~

//ok, ok - tylko wyluzuj z tymi emotami - Marooned

1 użytkowników online, w tym zalogowanych: 0, gości: 1