Instrukcji koprocesora arytmetycznego: FABS, FADD/FADDP, FSUB/FSUBP, FMUL/FMULP, FDIV/FDIVP, FIDIV/FIMUL
Operacje arytmetyczne: ADC ax, 5; ADD ax, bx; SUB ax,bx; SBB ax,bx; MUL ax, 2; DIV ax; IDIV ax
Operacje logiczne: NOT al; OR ax, bx; XOR ax, bx; AND ax, bx; TEST edx,ebx
Operacje bitowe: SHR al,1; SHL al, 1; SAR al, 1; SAL al, 1; ROR al, 1; ROL al, 1
Instrukcje asemblerowe, które zmieniają wskaźnik stosu: -CALL odkłada na stosie adres powrotu i zmienia wskaźnik stosu;
-RET pobiera ze stosu adres powrotu i zmienia wskaźnik stosu;
-MOV (1 mov sp, 1023) pozwala dowolnie zmieniać wskaźnik stosu;
-INC (inc sp) zwiększa o jeden wskaźnik stosu;
-DEC (dec sp) zmniejsz o jeden wskaźnik stosu;
-ADD sp, 8 zmniejsza stos o 8 bajtów
-IRET to samo co ret tylko jeszcze wykonuje popf
-PUSH src; kładzie na stosie słowo 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
-POP desc ściąga słowo 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 i kopiuje do dolnych rejestru
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. 1) Ustawia obsługę dzielenia przez zero; 2) Ustala rozmiar zmiennych środowiskowych; 3) Zeruje niezainicjowane dane; 4) Przygotowuje argumenty dla funkcji main 5) Wywołuje funkcję main przekazując jej oczekiwane parametry
Zadania wykonywane przez moduł Exit:
- Generuje kod kończący program w MS-DOS.; - Pozwala na przekazanie kodu powrotu.; - Kod powrotu jest przekazywany przez AL.; - Przywrócenie oryginalnej funkcji obsługi przerwania dzielenia przez zero; - Zwrócenie wartości main do systemu; - Zamknięcie plików;
Funkcje stosu: - zabezpieczanie wartości rejestru(ów) przed zniszczeniem; -przechowywanie adresu powrotu; - przekazywanie argumentów do funkcji;
-przechowywanie zmiennych lokalnych;
- wymiana wartości między rejestrami;
Setvect(); i jej argumenty: Gdy się ustawiło własne funkcje obsługi przerwań, to trzeba je pod koniec programu usunąć- przywrócić standardowe. setvect() podaje się wtedy adresy oryginalnych funkcji obsługi przerwań wcześniej zapamiętany. setvect(numer_przerwania, oryginalna_funkcja_obsługu_przerwania);
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.
Dyrektywy asemblera: 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
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. - 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ć.
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;
W jaki sposób funkcje języka C zwracają wartości typu: char do al. (1B); int do ax (2B); long do eax (4B); char* dla small ax (2B) a dla large eax (4B)
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
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.
Instrukcji koprocesora arytmetycznego: FABS, FADD/FADDP, FSUB/FSUBP, FMUL/FMULP, FDIV/FDIVP, FIDIV/FIMUL
Operacje arytmetyczne: ADC ax, 5; ADD ax, bx; SUB ax,bx; SBB ax,bx; MUL ax, 2; DIV ax; IDIV ax
Operacje logiczne: NOT al; OR ax, bx; XOR ax, bx; AND ax, bx; TEST edx,ebx
Operacje bitowe: SHR al,1; SHL al, 1; SAR al, 1; SAL al, 1; ROR al, 1; ROL al, 1
Instrukcje asemblerowe, które zmieniają wskaźnik stosu: -CALL odkłada na stosie adres powrotu i zmienia wskaźnik stosu;
-RET pobiera ze stosu adres powrotu i zmienia wskaźnik stosu;
-MOV (1 mov sp, 1023) pozwala dowolnie zmieniać wskaźnik stosu;
-INC (inc sp) zwiększa o jeden wskaźnik stosu;
-DEC (dec sp) zmniejsz o jeden wskaźnik stosu;
-ADD sp, 8 zmniejsza stos o 8 bajtów
-IRET to samo co ret tylko jeszcze wykonuje popf
-PUSH src; kładzie na stosie słowo 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
-POP desc ściąga słowo 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 i kopiuje do dolnych rejestru
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. 1) Ustawia obsługę dzielenia przez zero; 2) Ustala rozmiar zmiennych środowiskowych; 3) Zeruje niezainicjowane dane; 4) Przygotowuje argumenty dla funkcji main 5) Wywołuje funkcję main przekazując jej oczekiwane parametry
Zadania wykonywane przez moduł Exit:
- Generuje kod kończący program w MS-DOS.; - Pozwala na przekazanie kodu powrotu.; - Kod powrotu jest przekazywany przez AL.; - Przywrócenie oryginalnej funkcji obsługi przerwania dzielenia przez zero; - Zwrócenie wartości main do systemu; - Zamknięcie plików;
Funkcje stosu: - zabezpieczanie wartości rejestru(ów) przed zniszczeniem; -przechowywanie adresu powrotu; - przekazywanie argumentów do funkcji;
-przechowywanie zmiennych lokalnych;
- wymiana wartości między rejestrami;
Setvect(); i jej argumenty: Gdy się ustawiło własne funkcje obsługi przerwań, to trzeba je pod koniec programu usunąć- przywrócić standardowe. setvect() podaje się wtedy adresy oryginalnych funkcji obsługi przerwań wcześniej zapamiętany. setvect(numer_przerwania, oryginalna_funkcja_obsługu_przerwania);
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.
Dyrektywy asemblera: 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
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. - 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ć.
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;
W jaki sposób funkcje języka C zwracają wartości typu: char do al. (1B); int do ax (2B); long do eax (4B); char* dla small ax (2B) a dla large eax (4B)
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
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.
Instrukcji koprocesora arytmetycznego: FABS, FADD/FADDP, FSUB/FSUBP, FMUL/FMULP, FDIV/FDIVP, FIDIV/FIMUL
Operacje arytmetyczne: ADC ax, 5; ADD ax, bx; SUB ax,bx; SBB ax,bx; MUL ax, 2; DIV ax; IDIV ax
Operacje logiczne: NOT al; OR ax, bx; XOR ax, bx; AND ax, bx; TEST edx,ebx
Operacje bitowe: SHR al,1; SHL al, 1; SAR al, 1; SAL al, 1; ROR al, 1; ROL al, 1
Instrukcje asemblerowe, które zmieniają wskaźnik stosu: -CALL odkłada na stosie adres powrotu i zmienia wskaźnik stosu;
-RET pobiera ze stosu adres powrotu i zmienia wskaźnik stosu;
-MOV (1 mov sp, 1023) pozwala dowolnie zmieniać wskaźnik stosu;
-INC (inc sp) zwiększa o jeden wskaźnik stosu;
-DEC (dec sp) zmniejsz o jeden wskaźnik stosu;
-ADD sp, 8 zmniejsza stos o 8 bajtów
-IRET to samo co ret tylko jeszcze wykonuje popf
-PUSH src; kładzie na stosie słowo 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
-POP desc ściąga słowo 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 i kopiuje do dolnych rejestru
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. 1) Ustawia obsługę dzielenia przez zero; 2) Ustala rozmiar zmiennych środowiskowych; 3) Zeruje niezainicjowane dane; 4) Przygotowuje argumenty dla funkcji main 5) Wywołuje funkcję main przekazując jej oczekiwane parametry
Zadania wykonywane przez moduł Exit:
- Generuje kod kończący program w MS-DOS.; - Pozwala na przekazanie kodu powrotu.; - Kod powrotu jest przekazywany przez AL.; - Przywrócenie oryginalnej funkcji obsługi przerwania dzielenia przez zero; - Zwrócenie wartości main do systemu; - Zamknięcie plików;
Funkcje stosu: - zabezpieczanie wartości rejestru(ów) przed zniszczeniem; -przechowywanie adresu powrotu; - przekazywanie argumentów do funkcji;
-przechowywanie zmiennych lokalnych;
- wymiana wartości między rejestrami;
Setvect(); i jej argumenty: Gdy się ustawiło własne funkcje obsługi przerwań, to trzeba je pod koniec programu usunąć- przywrócić standardowe. setvect() podaje się wtedy adresy oryginalnych funkcji obsługi przerwań wcześniej zapamiętany. setvect(numer_przerwania, oryginalna_funkcja_obsługu_przerwania);
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.
Dyrektywy asemblera: 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
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. - 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ć.
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;
W jaki sposób funkcje języka C zwracają wartości typu: char do al. (1B); int do ax (2B); long do eax (4B); char* dla small ax (2B) a dla large eax (4B)
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
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.