Trochę teorii

Transkrypt

Trochę teorii
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