0. Wymień 5 instrukcji koprocesora arytmetycznego
FABS
FADD/FADDP
FSUB/FSUBP
FMUL/FMULP
FDIV/FDIVP
FIDIV/FIMUL
1. Wymień operacje arytmetyczne z przykładowymi użyciami:
ADC ax, 5
ADD ax, bx
SUB ax,bx
SBB ax,bx
MUL ax, 2
DIV ax
IDIV ax
2. Wymień operacje logiczne z przykładowymi użyciami:
NOT al
OR ax, bx
XOR ax, bx
AND ax, bx
TEST
3. Wymień operacje bitowe z przykładowymi użyciami:
SHR al,1
SHL al, 1
SAR al, 1
SAL al, 1
ROR al, 1
ROL al, 1
4. Wymień instrukcje asemblerowe, które zmieniają wskaźnik stosu (w sposób jawny i
niejawny) co najmniej 7(bez push pop):
call odkłada na stosie adres powrotu i zmienia wskaźnik stosu (niejawnie)
ret pobiera ze stosu adres powrotu i zmienia wskaźnik stosu (niejawnie)
mov (1 mov sp, 1023) pozwala dowolnie zmieniać wskaźnik stosu (jawnie)
inc (inc sp) zwiększa o jeden wskaźnik stosu (jawnie)
dec (dec sp) zmniejsz o jeden wskaźnik stosu (jawnie)
add sp, 8 zmniejsza stos o 8 bajtów (do “czyszczenia” stosu po wywołaniu funkcji z
wieloma argumentami) (jawnie)
iret to samo co ret tylko jeszcze wykonuje popf (niejawnie)
PUSH src; kładzie na stosie słowo (2B) z src (np. ax, si)
PUSHA ; odkłada na stos rejestry w kolejności ax, cx, dx, bx, sp, bp, si, di
PUSHF ; kładzie flagi na stosie (rejestr (E)Flags)
POP desc ; ściąga słowo (2B) ze stosu i przepisuje wartość do desc (np. cx)
POPA ; ściąga ze stosu rejestry ogólnego przeznaczenia: di, si, bp, sp, bx, dx, cx, ax
POPF ; zdejmuje ze stosu słowo (2B) i kopiuje do dolnych (16b) rejestru (E)Flags (przywraca flagi)
5. Wymień zadania wykonywane przez moduł Start Up:
Kod ten przygotowuje środowisko pracy, inicjalizuje stos potrzebnymi zmiennymi i ustawia wskaźnik stosu w taki sposób, żeby nie zniszczyć ważnych informacji które są na nim zapisane podczas wykonywania programu.
Ustawia obsługę dzielenia przez zero
Ustala rozmiar zmiennych środowiskowych
Zeruje niezainicjowane dane
Przygotowuje argumenty dla funkcji main
Wywołuje funkcję main przekazując jej oczekiwane parametry
6. Wymień zadania wykonywane przez moduł Exit:
- Przywrócenie oryginalnej funkcji obsługi przerwania dzielenia przez zero
- Zwrócenie wartości main do systemu
- Zamknięcie plików
Inne źródło:
- Generuje kod kończący program w MS-DOS.
- Pozwala na przekazanie kodu powrotu.
- Kod powrotu jest przekazywany przez AL.
7. Wymień funkcje jakie pełni stos:
- zabezpieczanie wartości rejestru(ów) przed zniszczeniem
- przechowywanie adresu powrotu
- przekazywanie argumentów do funkcji
- przechowywanie zmiennych lokalnych
- wymiana wartości między rejestrami (bez użycia trzeciego rejestru)
8. Dlaczego na końcu programu, gdy używa się własnych funkcji obsługi przerwań,
stosuje się funkcję setvect(); Co jest jej argumentem?
Gdy się ustawiło własne funkcje obsługi przerwań, to trzeba je pod koniec programu usunąć. setvect() podaje się wtedy adresy oryginalnych funkcji obsługi przerwań wcześniej zapamiętany.
setvect(numer_przerwania, oryginalna_funkcja_obsługu_przerwania);
9. Po co są przerwania programowe?
- Realizują funkcje BIOS'u/firmware'u
- Realizują funkcje systemu
- Są wywoływane z kodu programu w celu wywołania jakiejś pożądanej przez programistę instrukcji przerwania.
10. Co to są dyrektywy asemblera? Wymień 5 z opisem.
Są informacją dla assemblera (programu generującego kod wykonywalny) w jaki sposób program ma być tłumaczony.
.MODEL - powoduje wybranie standardowego modelu pamięci używanego przez program.
ASSUME - przypisuje etykietę do wskazanego rejestru segmentowego
SEGMENT,ENDS - służą do deklaracji segmentów
GROUP- grupuje kilka segmentów
LABEL - tworzy etykiety przyporządkowując im aktualną wartość adresu
11. Jakie są zasadnicze różnice w treści asemblerowej funkcji obsługi przerwań
sprzętowych od zwykłej funkcji?
Funkcje obsługi przerwań sprzętowych wykonują się gdy nadejdzie przerwanie sprzętowe
często przerywając działanie programu użytkownika. (To nie są przerwania BIOSu/DOSu!!)
- Nie przyjmują argumentów
- Nie zwracają argumentów
- Kończą się instrukcją IRET
- Przed rozpoczęciem pracy powinny zachować stan rejestrów na stosie, a po jej
wykonaniu, zachowany stan przywrócić
12. W jakim celu programista używa następujących instrukcji:
- or ax, ax ustawia flagi, Z jeżeli w AX jest 0, S w zależności czy liczba jest dodatnia/ujemna
- xor ax, ax zeruje zmienną ax
- xchng ax,ax odpowiednik funkcji NOP(pustej); zamienia zawartość ax z ax
- cbw - konwertuje bajt z rejestru al na słowo w rejestrze ax
- call wykonuje wywołanie funkcji
- wait oczekiwanie, aż FPU skończy pracę
- enter rezerwuje pamięć na stosie
- leave Zwalnia pamięć zarezerwowaną na stosie dla zmiennych lokalnych utworzoną przez ostatnią instrukcję ENTER
13. W jaki sposób (gdzie) funkcje języka C zwracają wartości typu:
char do al bo 1bajt
int do ax bo 2bajty
long do eax bo 4bajty
char* (w modelu small) ax(2bajty) a dla large eax(4bajty)
14. Co musi zrobić programista asemblera by wywołać przerwanie programowe.
- Trzeba uzupełnić argumenty przerwania w odpowiednich rejestrach
- INT <numer przerwania>, gdzie numer przerwania to liczba 0255
np. INT 10h
15. Cechy programu z rozszerzeniem .COM?
- składa się tylko z 1 segmentu
- rozmiar max. 64kb (kod+dane)
- Wykonywany od instrukcji 100H
- cały kod bezpośrednio ładowany do pamięci operacyjnej
Makro to stała symboliczna przydzielana pewnemu ciągowi instrukcji. Po zdefiniowaniu makro może być użyte dowolną liczbę razy, a jedno wywołanie powoduje wstawienie do kodu programu instrukcji zawartych w makrze.
+ 2 stosy