logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zliczanie i wyświetlanie histogramu pliku (tryb 13h)

seraphis 07 Mar 2006 23:45 1222 6
  • #1 2388187
    seraphis
    Poziom 11  
    Posty: 11
    Witam... mam problem, jaki przedstawiłem w tytule tematu. Muszę napisać program w asemblerze, jednak nie mam zielonego pojęcia za co się chwycić... Proszę o jakies rady. Z góry dziękuję.

    Pozdrawiam.
  • #2 2388969
    Caladan
    Poziom 19  
    Posty: 242
    Pomógł: 33
    Ocena: 3
    A jakeis informacje na temat maszyny na ktora bedziesz to pisal, zrodla danych... Czestotliwosci probkowania? Przydadza sie do rozwiazania problemu...
  • #3 2389093
    seraphis
    Poziom 11  
    Posty: 11
    Eee... :)
    Chyba chodzi o to, że program ma pobierać plik tekstowy, zliczać te wszystkie znaki w nim występujące i wyświetlać to w trybie 13h.... Chyba. To zadanie na procesor 8086.
  • Pomocny post
    #4 2389753
    radziow
    Poziom 16  
    Posty: 132
    Pomógł: 22
    Ocena: 9
    nie zabardzo pamiętam assemblera ale zrobiłbym to tak:

    1.deklaracja tablicy od 0 do 255 elementów wyzerowanej

    2.otwarcie pliku
    a)czytanie znaku
    b)ustawienie indexu tablicy na odczytany znak,
    c)odczyt z tablic wartosci,
    d)incrementacja,
    e)zapis do pamiecie,
    f) jezeli nie ma konca pliku goto a)
    3. obliczenie maxymalnej wartosci wystapienia ktoregos znaku
    4.Wlaczenie trybu graficznego
    5.
    a)i teraz mozesz rysowac czesc wykresu na całym ekranie i czekac na klawisz
    b) mozesz podzielic ekran na kilka czesci i rysowac mniejsze wykresy

    pamietaj ze maximum było liczone po to by zachować jakieś proporce podczas podglądu:
    wysokosc_slupka = max/wartosc_z_tablicy * ile_na_ekranie_jet_100_procent
  • #5 2389777
    seraphis
    Poziom 11  
    Posty: 11
    Tryb 13h pracuje w 320x200x256 kolorów. Właśnie najbardziej zastanawia mnie stworzenie tych słupków...
  • Pomocny post
    #6 2390761
    krzkomar
    Poziom 25  
    Posty: 877
    Pomógł: 71
    Ocena: 25
    Co do rysowania słupka:
    Przepraszam jeśli sa jakieś błędy (dawno nie programowałem w asm x86), ale to może wyglądać mniej więcej tak:
    
    mov ax, 0A000h
    push ax
    pop es
    ; obliczenie poczatkowej pozycji
    mov ax, 320
    mov si, pozycja_pocz_x
    mov cx, pozycja_pocz_y
    ; ax = ax*cx
    imul
    add si,ax 
    mov cx, wysokosc_slupka
    bar_loop:
    push cx
    push si
    mov  al, kolor_slupka
    mov  cx, szerokosc slupka
    rep movsb
    pop si
    pop  cx
    add  si,320
    loop bar_loop
    


    Odpowiada to mniej więcej takiemu programowi:
    
    si = poz_x;
    cx = poz_y;
    ax = 320;
    ax = ax * cx
    si += ax   ;// si = 320*poz_y + poz_x
    for(j = wysokosc_slupka; j > 0; j--){
        tmp = si; // zachowaj poczatek kreslenia linii
        // namaluj linię
        for(i = szerokosc_slupka; i > 0; i--) mem[0xA000:si++] = kolor;
        si = tmp;
        si += 320;//  nastepna linia 
    }
    
    
  • #7 2391481
    seraphis
    Poziom 11  
    Posty: 11
    Eee... Dzięki ^_^"
    Mam nadzieje, że jak zrozumiem tego Asemblera, to dotrze do mnie to, co jest napisane powyżej :P

    Dziękuję bardzo za omoc.

    Pozdrawiam.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemu napisania programu w asemblerze dla procesora 8086, który zlicza znaki z pliku tekstowego i wyświetla histogram w trybie graficznym 13h (320x200, 256 kolorów). Proponowane rozwiązanie obejmuje utworzenie tablicy 256 elementów do zliczania wystąpień znaków, otwarcie i odczyt pliku znak po znaku, inkrementację odpowiednich pozycji w tablicy oraz wyznaczenie maksymalnej wartości wystąpień w celu skalowania słupków histogramu. Następnie program przełącza tryb graficzny 13h i rysuje słupki histogramu na ekranie, zachowując proporcje wysokości względem maksymalnej wartości. Przykładowy kod asemblera pokazuje sposób obliczania pozycji w pamięci wideo (segment 0xA000) oraz rysowania pionowych słupków o określonej szerokości i wysokości, wykorzystując rejestry i instrukcje takie jak imul, rep movsb i pętle. Autor wyraża nadzieję na zrozumienie przedstawionych wskazówek po dalszej nauce asemblera.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA