Kurs programowania w asemblerze


Szkielet programu

W asemblerze programy pisze się zazwyczaj według jednego, stałego szablonu, deklaruje się segmenty kodu, stosu i danych. Do deklaracji tych elementów używa się specjalnych dyrektyw:

  • ASSUME rejestr segmentowy: nazwa segmentu [...] - informuje kompilator, z którego rejestru segmentowego ma korzystać przy odwoÅ‚aniach do etykiety podanego segmentu, np:

    ASSUME cs: CODE
    ASSUME cs:NOTHING


    Linijka pierwsza informuje kompilator, że CS zawiera numer segmentu kodu. Teraz jeśli będziemy odwoływać się do etykiety, będziemy odwoływać się do rejestru kodu CS.
    W drugiej linijce anulujemy powiÄ…zanie z pierwszej linijki.
  • SEGMENT, ENDS - dyrektyw tych używa siÄ™ do deklaracji segmentów. Sposób użycia:
nazwa_segmentu SEGMENT [typ_segmentu] [połączenie] ['klasa']

gdzie:

  • nazwa_segmentu - jest to dowolna nazwa przyjmowana przez kompilator. Może być później w programie wykorzystywana jako identyfikator segmentu.
  • typ_segmentu - okreÅ›la sposób przydzielania pamiÄ™ci:
    • Byte - adres dowolny - segment Å‚adowany jest w dowolnym miejscu
    • Word - adres parzysty - segment Å‚adowany jest na granicy peÅ‚nego sÅ‚owa
    • para - adres podzielny przez 16 - segment Å‚adowany jest na granicy peÅ‚nego paragrafu
    • Page - adres podzielny przez 256 - segment Å‚adowany jest na granicy strony (1 strona=1024 bajty)
  • połączenie - okreÅ›la jak kompilator ma łączyć segmenty o tej samej nazwie
    • Public - segmenty o tej samej nazwie łączone sÄ… w jeden ciÄ…gÅ‚y segment. Wszystkie adresy w segmencie sÄ… łączone wzglÄ™dem jego poczÄ…tku, np.:
      DANE1 SEGMENT PUBLIC
      ZMIENNA1 DB 0
      ZMIENNA2 DB 0
      DANE1 ENDS
      
      DANE1 SEGMENT PUBLIC
      ZMIENNA3 DB 0
      ZMIENNA4 DB 0
      DANE1 ENDS ;zadeklarowanie tych dwóch segmentów jest równoważne
      
      DANE1 SEGMENT PUBLIC
      ZMIENNA1 DB 0
      ZMIENNA2 DB 0
      ZMIENNA3 DB 0
      ZMIENNA4 DB 0
      DANE1 ENDS
    • stock - wszystkie segmenty o tej samej nazwie łączone sÄ… w jeden ciÄ…gÅ‚y segment, który przy Å‚adowaniu programu do pamiÄ™ci inicjowany jest jako stos (SP pokazuje na ostatni bajt segmentu). JeÅ›li chce siÄ™ definiować w programie segment stosu, trzeba zadeklarować dla niego parametr 'połączenie' - STACK. JeÅ›li zdefiniuje siÄ™ stos bez parametru STACK, trzeba bÄ™dzie samemu inicjować rejestry stosu.
    • common - nakÅ‚ada wszystkie segmenty o tej samej nazwie, umieszczajÄ…c poczÄ…tek każdego w tym samym miejscu. Powstaje w efekcie obszar o wielkoÅ›ci najwiÄ™kszego z segmentów.
    • memory - umieszcza wszystkie segmenty o tej samej nazwie w najwyższym fizycznym segmencie pamiÄ™ci. JeÅ›li jest wiÄ™cej niż jeden segment MEMORY nakÅ‚adane sÄ… one jak w przypadku COMMON.
    • AT adres - adresy wszystkich zmiennych i etykiet w segmencie sÄ… obliczane wzglÄ™dem wartoÅ›ci segmentu podanej przy AT
  • klasa - okreÅ›la kolejność segmentów

Przykładowy szablon programu w Asemblerze:

DSTACK
 SEGMENT STACK 'STACK'   ; deklaracjÄ… segmentu stosu
    DB 64 DUP ('STACK')  ; wypeÅ‚nienie stosu
 DSTACK ENDS             ; koniec segmentu

 ASSUME CS:CODE, SS:DSTACK 
     ; przypisanie rejestrów do segmentów
 CODE SEGMENT
 Start:
   <program>
 CODE ENDS
 DATA SEGMENT
   <dane programu>
 DATA ENDS
END Start
  • ORG - dyrektywa nadaje licznikowi adresów wartość wyrażenia. Wszystkie nastÄ™pujÄ…ce po ORG adresy zaczynajÄ… siÄ™ od zadeklarowanej wartoÅ›ci. Dyrektywa ta jest zazwyczaj używana do nadawania danym lub instrukcjom okreÅ›lonego przesuniÄ™cia w segmencie. JeÅ›li nasz program ma być zapisany w pliku COM, to musimy napisać: ORG 100H, co spowoduje przesuniÄ™cie poczÄ…tku o 100H bajtów. JeÅ›li nie wiesz czemu, zajrzyj do budowy plików COM.

  • Autor: Karol WierzchoÅ‚owski, opracowano: 12.01.2002 r. Wszelkie prawa zastrzeżone.
    Kontakt

    Jeśli chcesz się z nami skontaktować napisz na adres: info(at)binboy.org lub odwiedź nasz profil na Facebooku!

    O Nas

    Serwis binboy.org to kopalnia wiedzy dla wszystkich z branży IT, w szczególności dla programistów i webmasterów. To duży zbiór kursów programowania, tutoriali, darmowych ebooków, setki kodów źródłowych itp.

    Bądź w kontakcie

    Panel użytkownika

    Zaloguj się do panelu użytkownika.
    Nie masz konta? Zarejestruj siÄ™!
    Zapomniałeś hasła?