Programowanie niskopoziomowe ASSEMBLER Teodora Dimitrova-Grekow http://aragorn.pb.bialystok.pl/~teodora/

Program ogólny Rok akademicki 2011/12  Systemy liczbowe, budowa komputera, procesory X86, organizacja pamięci, pierwszy program  Adresacja: rodzaje i zastosowanie  Lista rozkazów  Stos i procedury  Skoki. Instrukcje łańcuchowe  PSP, praca z plikami  Asembler i inne języki  System przerwań  Programy rezydentne

Literatura          

Vlad Pirogow, Asembler. Podręcznik programisty, Helion, 2005 Eugeniusz Wróbel, Praktyczny kurs asemblera. Helion, 2004. Kip R. Irvine , "Asembler dla procesorów Intel. Vademecum profesjonalisty" , Helion, 2003. Eugeniusz Wróbel, Asembler. Ćwiczenia praktyczne. Helion, 2002. Michałek Grzegorz, Asembler nie tylko dla orłów, Warszawa : "Intersoftland", 1999. Michałek Grzegorz, Co i jak w assemblerze, Warszawa, Intersoftland, 1995. Duntemann Jeff, Zrozumieć Asembler, Warszawa : Translator, 1995. Syck Gary, Turbo Assembler : biblia użytkownika, Warszawa : Oficyna Wydawnicza LT a. P, 1994.(MatFizIn130548) Kruk Stanisław, Asembler : podręcznik użytkownika, Warszawa : "Mikom" 1999. Kruk Stanisław,Turbo Asembler : idee, polecenia, rozkazy procesora Pentium, Warszawa : "Mikom", 2000.

Bit, Bajt, Słowo Numeracja bitów:

Słowo: Podwójne słowo:

Podstawowe zasady architektury von Neumanna 1. Wspólna pamięć programu i danych 2. Liniowa struktura adresowania pamięci 3. Sposób przechowywania danych i instrukcji jest identyczny 4. Sekwencyjne wykonanie rozkazów 5. Zmiana zawartości pamięci przez wykonywany program Jedna magistrala transmisyjna pomiędzy procesorem a pamięcią

Organizacja mikroprocesora

Rejestry procesora

Rejestry ogólnego przeznaczenia

Rejestry wskaźnikowe i indeksowe Rejestr

ang. znaczenie

SI

Source Index

DI

Destination Index

Rejestr

ang.znaczenie

SP

Stack Pointer

BP

Base Pointer

IP (32b) Instruction Pointer

Rejestry segmentowe Rejestr CS SS DS ES,FS,GS

ang.znaczenie

Znaczenie

Code Segment register Stack Segment register Data Segment register

Rejestr segmentu kodu Rejestr segmentu stosu Rejestr segmentu danych Rejestry dodatkowych segmentów danych

Extension Data Segment register

Rejestr znacznikowy

Rejestr znaczników

SF (sign flag) - znacznik znaku - równy najbardziej znaczącemu bitowi wyniku 0 - wynik operacji dodatni 1 - wynik operacji ujemny ZF (zero flag) - znacznik zera 0 - wynik operacji różny od zera 1 - wynik operacji równy zeru PF (parity flag) - znacznik parzystości - ustawiany w zależności od liczby jedynek w najniższych 8 bitach wyniku 0 liczba jedynek w wyniku operacji nieparzysta 1 liczba jedynek w wyniku operacji parzysta AF (auxiliary carry flag) - znacznik przeniesienia połówkowego (pomocniczego) 0 - brak przeniesienia pomiędzy trzecim i czwartym bitem bajtu (BCD) 1 - występuje przeniesienie CF (carry flag) - znacznik przeniesienia 0 - wynik operacji arytmetycznej nie powoduje powstania przeniesienia z najbardziej znaczącego bitu 1 - wynik takie przeniesienie powoduje OF (overflow flag) - znacznik nadmiaru 0 - suma modulo 2 przeniesień z najbardziej znaczącej pozycji i pozycji przedostatniej jest równa 0 1 - suma modulo 2 przeniesień z najbardziej znaczącej pozycji i pozycji przedostatniej jest równa 1 (przekroczenie zakresu w kodzie U2) IF (interrupt flag) - znacznik przerwań 0 - brak zezwolenia na przyjmowanie przerwań z wejścia INT 1 - zezwolenie na przyjmowanie przerwań DF (direction flag) - znacznik kierunku, wskazuje, czy zawartości rejestrów SI i DI mają być zwiększane lub zmniejszane o jeden w czasie wykonywania operacji na ciągach 0 - rejestry są zwiększane 1 - rejestry są zmniejszane TF (trap flag) - znacznik pułapki umożliwiającej pracę krokową. Znacznik ten może być ustawiony za pomocą jedynki na odpowiedniej pozycji słowa stanu programu PSW (program status word) 0 - praca krokowa wyłączona 1 - praca krokowa włączona

Organizacja pamięci komputera

Adresacja pamięci  20b → 1MB (2b → 22= 4B, 3b → 23=8B,…. 220 → 1MB) 

16b – rejestry



Baza (Segment ) i Przesunięcie (Offset)

1

Adres fizyczny (AF)

2

Adres logiczny (AL)

3

Zapis:

4

Adres efektywny (AF)

20b

Baza: Przesunięcie

(16b:16b )

Przykład 1: Segment = 0111 1010 1101 1001 Offset = 1011 0010 1000 1011 AF = 16* Segment + Offset => Segment -> 4b w lewo: 0111 1010 1101 1001 0000 + 1011 0010 1000 1011 1000 0110 0000 0001 1011

Przykład 2 Segment = 0D94Ah Offset = 0A527h AF = ?

Pisanie programów w asemblerze

(kompilacja, konsolidacja, uruchomienie i testowanie )

Pierwszy program w Asemblerze .model small .data napis db 'pierwszy program w Asemblerze $' .code start: mov ax,seg napis ; = mov ax, @data mov ds,ax mov dx,offset napis mov ah,9 int 21h mov ah,4ch int 21h end start