Opracowanie przykładowych pytań z „Organizacji Komputerów”
Odpowiedzi na wszystkie pytania są ze skryptu. Samą teorią ciężko jest zaliczyć (trzeba mieć max plus przynajmniej częściowo rozwiązane jedno z zadań). Właściwie wszystkie z tych pytań pojawiły na egzaminach w zeszłym roku (2002).
Tekst pisany w taki sposób => oznacza info dodatkowe nie znajdujące się w skrypcie
A na niebiesko komentarze
A. Podstawowe zasady działania komputera
1. Omówić podstawowe zasady wykonywania programu przez procesor.
[rysunek mile widziany przez AJ]
A - pobranie rozkazu
B - dekodowanie rozkazu
C - obliczanie adresu F - wyznaczenie położenia
efektywnego kolejnej instrukcji
do wykonania
D - obliczanie adresu
fizycznego
E - wykonanie rozkazu
A - rozkaz jest pobierany z pamięci podręcznej lub jeśli się tam nie znajduje to jest pobierany z pamięci
operacyjnej
B - rozkaz dekodowany jest na język zrozumiały dla procesora
C - obliczana jest odległość od adresu bazowego czyli offset (przesunięcie) który w tym przypadku jest
równy (E)IP
D - obliczany jest adres fizyczny = zawartość rejestru segmentowego CS * 16 + (E)IP
E - wykonanie rozkazu
F - wyznaczane jest położenie kolejnej instrukcji do wykonania
Jeżeli wykonana instrukcja była nie sterująca ( nie zmieniła kolejności wykonywania
Rozkazów) to:
(E)IP = (E)IP + <liczba bajtów aktualnie wykonywanej instrukcji>
Jeżeli wykonana instrukcja była warunkowa to (E)IP zmienia się w zależności od testowanego
warunku:
Gdy spełniony to:
(E)IP = (E)IP + <liczba bajtów aktualnie wykonywanej instrukcji> + <zawartość pola
adresowego instrukcji>
Gdy nie spełniony to:
(E)IP = (E)IP + <liczba bajtów aktualnie wykonywanej instrukcji>
Jeżeli wykonywana instrukcja jest sterującą bezwarunkową to:
(E)IP = (E)IP + <liczba bajtów aktualnie wykonywanej instrukcji> + <zawartość pola
adresowego instrukcji>
2. Porównaj własności różnych rodzajów pamięci stosowanych w komputerach
(nie wiem czy chodzi o taki podział pamięci można też podzielić pamięć w taki sposób: operacyjna, podręczna, masowa, stała)
A. pamięć RAM
Po wyłączeniu zasilania informacje są tracone
Wyróżniamy dwa typy pamięci RAM:
Dynamiczne (DRAM)
Podstawowa komórka pamięci zawiera tranzystor i kondensator
Niska cena, niski pobór mocy, duży stopień scalenia
Stosowana jako pamięć operacyjna (główna) w komputerze
Statyczne (SRAM)
Podstawowa komórka pamięci zawiera przerzutnik
Drogie, duży pobór mocy, mniejszy stopień scalenia niż DRAM
Stosowana jako pamięć podręczna cache w komputerze
B. pamięci stałe ROM
Po wyłączeniu napięcia informacje nie są tracone
Typy pamięci ROM:
ROM - zawartość pamięci u ustalana podczas produkcji nie można jej zmienić
PROM - jednokrotnie programowalna przez użytkownika poprzez przepalanie ścieżek
wewnątrz matrycy
EPROM - pamięć wielokrotnie programowalna, kasowanie przez naświetlanie
ultrafioletem
EEPROM - pamięć programowalna i kasowana na drodze elektrycznej pozwala to na
Np. wprowadzenie nowej wersji BIOS
FLASH - odmiana EEPROM. Pamięć błyskowa. Może zastępować pamięć masową
w komputerach przenośnych, aparatach cyfrowych, telefonach komórkowych.
NVRAM - połączenie SRAM z EEPROM
3. Omówić podstawowe tryby pracy procesora Pentium
A. tryb rzeczywisty
Podstawowy tryb każdego komputera. (naśladuje i w pewnym stopniu rozszerza funkcje procesora 8086/88)
Tryb 8 lub 16 - bitowy, adresy są 20 - bitowe
Współpracuje z pamięcią operacyjną zawierającą 220 bajtów (pozwala na adresowanie obszaru 1 MB )
Adres fizyczny obliczany według wzoru :
adres fizyczny = zawartość rejestru segmentowego * 16 + offset
Może wykonywać operacje 32 - bitowe
Nie występują mechanizmy ochrony
Wykonywany program ma dostęp do wszystkich instrukcji procesora
Charakterystyczny dla środowiska DOS
B. tryb chroniony (tryb wirtualny)
Tryb 32 - bitowy wprowadzony w procesorze 286, a w postaci rozwiniętej w 386. dalsze rozszerzenia wprowadzono w 486 i Pentium.
Rozmiar fizycznej przestrzeni adresowej wynosi 4 GB (w nowszych typach procesorów Pentium (Pro i następne) liczba linii adresowych zwiększona do 36 co oznacza, że rozmiar fizycznej przestrzeni adresowej wynosi 64 GB)
Bardziej skomplikowana metoda wyznaczania adresu fizycznego (obejmuje mechanizm stronicowania i segmentacji. Adres zostaje przekształcony przez specjalne tablice segmentów (GDT) na adres liniowy a ten z kolei przez mechanizm stronicowania na adres fizyczny)
Ma podtryb udający tryb rzeczywisty (V86)
Dostępne mechanizmy wielozadaniowości, stosowane są mechanizmy ochrony i odmienne sposoby adresowania niż w rzeczywistym.
Programy mają różne poziomy uprzywilejowania i w zależności od tego parametru mają dostęp do większej lub mniejszej ilości rozkazów procesora (system operacyjny jest najbardziej uprzywilejowany)
Charakterystyczny dla systemu Windows
C. tryb wirtualny V86
Specjalny rodzaj trybu chronionego wprowadzony w 386 i rozwinięty w Pentium
Powstał by uniknąć kłopotliwego przełączania trybów, które mogło stworzyć zagrożenie dla spójności systemu (opartego na trybie chronionym). [ btw trzeba by było za każdym razem przeprogramować sterownik przerwań ]
W trybie V86 procesor zachowuje się, z punktu wykonywanego programu, prawie dokładnie tak samo jak w trybie rzeczywistym
może wykonywać operacje 32-bitowe
kilka programów wywoływanych w trybie V86 ma tą samą przestrzeń adresową [ mechanizm stronicowania odwzorowuje ją w różne obszary pamięci fizycznej ]
służy do uruchamiania programów dosowych w środowisku Windows
[ istnieje też rozszerzony tryb wirtualny EV86 jest właściwie ulepszonym trybem V86]
4. W jaki sposób zmienia się zawartość wskaźnika instrukcji (E)IP procesora Pentium w trakcie wykonywania różnych typów rozkazów?
rozkazy nie sterujące - nie naruszają kolejności wykonywanych rozkazów. Po wykonaniu takiego rozkazu następnym wykonywanym będzie rozkaz bezpośrednio przylegający do niego w pamięci
(E)IP jest wyznaczane na podstawie wzoru:
(E)IP = (E)IP + <liczba bajtów aktualnie wykonywanej instrukcji>
rozkazy sterujące warunkowe - sprawdzają czy wynik ma oczekiwane własności (czy spełnia zadany warunek) w zależności od tego wyznaczana jest wartość (E)IP:
1. Gdy spełniony to:
(E)IP = (E)IP + <liczba bajtów aktualnie wykonywanej instrukcji> + <zawartość pola
adresowego instrukcji>
2. Gdy nie spełniony to:
(E)IP = (E)IP + <liczba bajtów aktualnie wykonywanej instrukcji>
rozkazy sterujące bezwarunkowe - naruszają kolejność wykonywania rozkazów. Przekazują sterowanie w inne miejsce programu. (E)IP wynosi wtedy:
(E)IP = (E)IP + <liczba bajtów aktualnie wykonywanej instrukcji> + <zawartość pola
adresowego instrukcji>
5. Scharakteryzować grupę instrukcji procesora określanych jako operacje bitowe.
[nie jestem pewna czy trzeba opisywać wszystkie instrukcje ]
Rozkazy operacji bitowych można podzielić na następujące grupy:
operacje boolowskie
testowanie i modyfikacja bitów
przeszukiwania bitów
rotacji i przesunięć
warunkowego zapisu jedynki do bajtu
AND - za pomocą tej instrukcji i odpowiedniej „maski” można wyodrębniać poszczególne bity
TEST - właściwie jest odmianą AND z tą różnicą że nigdzie nie zapisuje wyniku operacji and
tylko ustawia znaczniki w zależności od otrzymanego wyniku
XOR - przydatna gdy chcemy zanegować w liczbie binarnej tylko określone bity
OR - do ustawiania określonych bitów
NOT - zamienia wszystkie bity w liczbie na przeciwne
Te instrukcje ustawiają znaczniki ZF, SF, PF (CF i OF są zerowane)
BT, BTS, BTR, BTC - są operacjami na pojedynczych bitach
SHR (dla l. Ze znakiem SAR) - przesuwa bity w prawo. Najstarszy bit ustawiany na 0. za jej pomocą możemy realizować dzielenie przez wielokrotność 2
SHL (dla l. Ze znakiem SAL) - przesuwa bity w lewo. Najmłodszy bit ustawiany na 0. za jej pomocą możemy realizować mnożenie przez wielokrotność 2.
ROR - przesuwa wszystkie bity w prawo o określoną liczbę pozycji. Najmłodszy bit kopiowany do CF
ROL - przesuwa wszystkie bity w lewo o określoną liczbę pozycji. Najstarszy bit kopiowany do CF
RCL, RCR, SHRD, SHLD
B. Kodowanie danych i instrukcji
1. Omówić rożne rodzaje kodowania liczb binarnych w komputerze.
Kodowanie liczb całkowitych bez znaku :
- zwyczajny system binarny
Kodowanie liczb całkowitych ze znakiem :
system znak-moduł
system U2
Kodowanie w systemie BCD:
upakowany każdy bajt zawiera dwie cyfry dziesiętne (4 starsze cyfra dziesiętna 4 młodsze cyfra dziesiętna)
- nieupakowany jeden bajt zawiera cyfrę dziesiętną (4 starsze są wyzerowane)
Te same rozkazy co do bin ale trzeba wynik korygować
kodowanie liczb zmiennoprzecinkowych:
postać mantysa wykładnik
[komp koduje w normalnym kodzie binarnym, ujemne są w U2 a zmiennoprzecinkowe w postaci mantysa - wykładnik . Chyba wypadałoby krótko opisać poszczególne rodzaje]
2. w jaki sposób w procesorze Pentium sygnalizowane jest wystąpienie nadmiaru w operacjach dodawania, odejmowania, mnożenia i dzielenia na liczbach stałoprzecinkowych?
Dodawanie - ustawiane są znaczniki OF (liczby ze znakiem) lub CF (liczby bez znaku)
Odejmowanie - ustawiane są znaczniki OF (liczby ze znakiem) lub CF (liczby bez znaku)
Mnożenie - wynik mnożenia jest zawsze podwójnej długości więc rozkazy mnożenia nie powodują nadmiaru.
Dzielenie - nadmiar przy dzieleniu generuje wyjątek procesora zwany nadmiarem co zazwyczaj powoduje natychmiastowe zakończenie działania programu
3. Na czym polegają róznice w sposobie przechowywania liczb w pamięci znane jako mniejsze niżej i mniejsze wyżej?
Mniejsze niżej - młodsza część liczby zapisywana jest pod niższym adresem niż starsza
Mniejsze wyżej - młodsza część liczby zapisywana jest pod wyższym adresem niż starsza
[ w tym miejscu warto walnąć ten rysuneczek ze skryptu bo A.J. bardzo je lubi ]
4.Omówić technikę porównywania liczb stałoprzecinkowych stosowaną w procesorach Pentium.
CMP - instrukcja porównująca ustawia znaczniki ZF i CF ale nigdzie nie zapisuje wyniku operacji (odejmowanie)
Za pomocą instrukcji odejmowania ustawia znaczniki ZF i CF i zapisuje wynik operacji.
Jeżeli ZF=1 i CF=0 to są np. bx=cx
Jeżeli ZF=0 i CF=0 to są bx>cx
Jeżeli ZF=0 i CF=1 to są bx<cx
Dla liczb ze znakiem sprawdza się zawartość znaczników ZF, OF, SF
Dla liczb bez znaku ZF, CF
Za pomocą instrukcji bitowych. Te instrukcje ustawiają znaczniki ZF, SF, PF (CF i OF są zerowane).
5.Wyznaczyć wartość dziesiętną 32-bitowej liczby zmiennoprzecinkowej:
0100 0000 1111 1000 0000 0000 0000 0000
0 | 100 0000 1 | 111 1000 0000 0000 0000 0000
bit znaku => 0 (nr 31) - więc liczba jest dodatnia
8-bitowy wykładnik => 1000 0001 => 129 ->
23-bitowa mantysa => 1111 0000 0000 0000 0000 000 => część ułamkowa liczby =>15/16
z warunku normalizacji wynika że 1≤ liczba*2 -k < 2
1.9375*2 129-127 = 1.9375*22 = 1.9375*4 = 7,75
( poprawione thx to Szwarek )
6. Co oznacza termin wartości specjalne w kontekście koprocesora arytmetycznego
Są to liczby generowane w wyniku błędu.
Są to liczby, które nie mogą być przedstawione w zwykły sposób.
W koprocesorze matematycznym przyjęto że wszystkie liczby , których pole wykładnika zawiera same zera lub same jedynki traktowane są jako wartości specjalne.
Wartości specjalne mogą być argumentami obliczeń jak zwykłe liczby.
7. Jakie rodzaje zaokrąglenia stosuje się w koprocesorze arytmetycznym?
RC - rodzaj zaokrąglenia
W kierunku liczby najbliższej (RC = 00) - jako zaokrąglenie przyjmowana jest wartość najbliższa nieskończenie dokładnemu wynikowi
W kierunku zera (RC = 11) - polega na obcięciu (zignorowaniu) dodatkowych bitów
W górę (RC = 10) i w dół (RC = 01) - używane w metodzie obliczeń jako arytmetyk przedziałów. Metoda ta polega na dwukrotnym wykonywaniu każdego obliczenia. Za jednym razem z zaokrągleniem w górę a za drugim w dół. W rezultacie otrzymujemy górną i dolną granicę odpowiedzi.
[ tu koniecznie muszą być rysunki i krótka charakterystyka zaokrągleń za wymienienie samych rodzajów dostaniecie max 3.pkt, bez rysunków kumpel dostał 6.pkt ]
8. Wyjaśnić na czym polega technika niedomiaru stopniowanego, stosowana w koprocesorze arytmetycznym.
Technika polega na tym, że liczby zbyt małe, by przedstawić je w odpowiednim formacie są traktowane jako wartości specjalne. Wartości te są kodowane poprzez liczby, których pole wykładnika zawiera same zera. W odniesieniu do takich liczb przyjęto następujące założenia:
wykładnik zawierający same zera traktowany jest wtedy jakby zawierał liczbę 000...001
w rozpatrywanym przypadku najbardziej znaczący (niejawny) bit mantysy zawiera 0
Poprzez zmniejszenie dokładności mantysy można rozszerzyć wykładnik w kierunku bardziej ujemnych wartości.
Liczby zmiennoprzecinkowe z wykładnikiem zawierającym same 0 i mantysą różną od zera nazywane są liczbami zdenormalizowanymi.
9. Omówić zasady wykonywania operacji na liczbach wielokrotnej długości.
Dodawanie - realizowane przy użyciu instrukcji ADD lub ADC. ADD dodaje do siebie dwa argumenty, a wynik umieszcza w pierwszym z nich. Jeżeli wynik operacji nie mieści się w argumencie docelowym
ustawiony zostaje znacznik przeniesienia CF. ADC służy do dodawania liczb wielobajtowych. Pozwala w trakcie dodawania uwzględnić przeniesienie powstałe w przypadku dodawania młodszych bajtów.
Instrukcji ADD i ADC ustawiają znaczniki:
nadmiaru OF (nadmiar przy dodawaniu)
znaku SF - zgodnie ze znakiem wyniku
zera ZF jeżeli wynik operacji = 0
parzystości PF gdy w wyniku jest parzysta liczba jedynek
przeniesienia CF gdy ustawiany był najmłodszy bit argumentu
przeniesienia pomocniczego AF (gdy przeniesienie z pozycji 3 (dla 8-bit.) lub 7 (dla 16-bit.)
Odejmowanie - polega na dodaniu do pierwszego argumentu drugiego w postaci U2. SBB to odejmowanie dwóch liczb z pożyczką (odejmowanie bardziej znaczących słów liczby wielobajtowej). Ustawiane są te same znaczniki co w przypadku dodawania.
Mnożenie - przy korzystaniu z instrukcji mnożenia MUL (liczby bez z znaku) i IMUL (liczby ze znakiem) należy pamiętać, że wynik umieszczany jest w dwóch rejestrach. (algorytm mnożenia ze szkoły podstawowej tzw. „słupki” ;-P)
Dzielenie - instrukcje DIV i IDV należy pamiętać, że rozmiar dzielnej powinien być 2 razy większy niż dzielnik (32-bit. dzielimy przez 16-bit.)
10. Omówić podstawowe zasady kodowania instrukcji procesora.
[nie bardzo wiem co pisać ale chyba o to chodzi]
Pierwszy bajt:
pole kodu operacji - 6 bitów określa czynności wykonywane przez rozkaz
bit D - określa standardowy rozmiar operandów i instrukcji zawartych w segmencie (0 adresy 16 operandy 8 lub 16 (również przesłanie wyniku do obiektu wskazanego przez pole reg), 1 adresy 32 operandy 8 lub 32(przesłanie wyniku do obiektu wskazanego przez r/m))
bit W - określa rozmiar operandów (0 operacja 8-bit. 1 operacja 16 lub 32)
Drugi bajt:
Pole mod - 2 bity określa liczbę bajtów pola przesunięcie (00 nie występuje) jeżeli mod = 01(1 bajt), 10(2 lub 4 bajty) (to znaczy że drugi operand znajduje się w lokacji pamięci) to pole r/m określa sposób obliczania adresu efektywnego
Pole reg - 3 bity identyfikuje rejestr procesora
Pole r/m - 3 bitowe może zawierać kod drugiego rejestru (gdy mod = 11)
[Trzeci bajt - występuje tylko w trybie 32 bitowym (bajt SIB)]
pole przesunięcia - zawiera adres lokacji przesunięcia
Instrukcje niesterujące - 3 lub 4 bajty (3(część młodsza)i 4(część starsza) to pola przesunięcia)
Instrukcje sterujące - pierwszy bajt zawiera kod operacji i bity W i D, pozostałe to pola przesunięcia (dokąd ma skoczyć). Zazwyczaj są 2 - 3 dla skoków krótkich jeżeli jednak zasięg jest większy mogą być 4 - 6 bajtowe
11. W jakim celu kod instrukcji poprzedza się przedrostkiem chwilowej zmiany segmentu?
Procesory wykonują operacje adresowania pamięci korzystając z domyślnych rejestrów segmentowych (CS - wskazuje początek segmentu kodu zawierającego instrukcje , DS - dane, SS - stos), ale niekiedy dane umieszczone są w segmencie , którego początek wskazuje rejestr inny niż domyślny np. ES. W takim przypadku konieczne jest poinformowanie procesora, by adres fizyczny był dalej obliczany z użyciem innego rejestru segmentowego. W tym celu instrukcje poprzedza się dodatkowym bajtem, nazywanym przedrostkiem chwilowej zmiany segmentu. Np. mov bh, es:cos[di]
C. Mechanizmy adresowania
1. W jaki sposób procesory Pentium obliczają adres efektywny i fizyczny instrukcji (w trybie rzeczywistym)?
Adres efektywny - (adres wirtualny) wskazuje położenie lokacji pamięci względem początku segmentu (tzw. Offset) na jego podstawie obliczany jest adres fizyczny.
adres fizyczny = zawartość rejestru segmentowego (np. DS.) * 16 + offset (adres efektywny)
2. Jakie zalety ma architektura segmentowa procesora?
Wskazanie położenia danej lub rozkazu w pamięci wymaga niewielkiej liczby bitów
Programy są krótsze i zajmują mniej miejsca w pamięci, wykonują się szybciej
stałe części adresów przechowywane w rejestrach segmentowych
procesor generuje adresy, które mają skłonność do skupiania się (zasada lokalności)
3. Omówić podstawowe koncepcje modyfikacji adresowych.
[ a to kolejne paskudne pytanie na które nie bardzo wiadomo co pisać]
W programach asemblerowych modyfikację adresową deklaruje się poprzez podanie w polu adresowym rozkazu nazwy rejestru w nawiasie kwadratowym np. mov ax, [si] ( adres lokacji pamięci na której wykonywane jest działanie określony jest nie tylko poprzez pole adresowe instrukcji, ale zależy również od zawartości jednego lub kilku wskazanych rejestrów)
Wprowadzenie modyfikacji adresowych powoduje, że adres efektywny obliczany jest jako suma zawartości pola adresowego instrukcji i zawartości wskazanych rejestrów modyfikacji.
Spośród rejestrów rolę modyfikatorów w trybie 16 - bit. mogą pełnić bx, di, si, bp(do odczytu parametrów znajdujących się na stosie) [adres efektywny => suma modulo 2 16 pod uwagę 16 najmłodszych bitów sumy]. Można stosować modyfikacje adresową za pomocą jednego lub dwóch rejestrów. W przypadku dwóch możliwe są tylko takie kombinacje: [bx][si], [bx][di], [bp][si], [bp][di]
W trybie 32 bitowym dostępne są bardziej rozbudowane rejestry modyfikacji :
Modyfikatorami mogą być rejestry EAX, EBX, ECX, EDX, ESI, EDI EBP, ESP (jako pierwszy rejestr modyfikacji tzw. Adres bazowy)(właściwie wszystkie )
Może wystąpić też drugi rejestr modyfikacji (jako adres indeksowy) wszystkie oprócz ESP. Oraz może być on skojarzony z tzw. Współczynnikiem skali w postaci *1, *2, *4, *8 (podana liczba wskazuje przez ile zostanie pomnożona zawartość drugiego rejestru modyfikacji). [adres efektywny w trybie 32 - bitowym obliczany jest modulo 2 32 pod uwagę bierze się 32 bity uzyskanej sumy]
Czasami wartość adresu określana jest wyłącznie na podstawie rejestrów modyfikacji (pole adresowe jest pomijane) takie rozwiązanie jest niezbędne gdy adres lokacji pamięci zostaje obliczony dopiero w trakcie wykonywania programu lub szczególnie korzystne w przypadku wielokrotnego odwoływania się do tej samej lokacji pamięci (instrukcja zapisana na mniejszej liczbie bajtów)
4. porównać wyznaczanie adresu efektywnego za pomocą instrukcji LEA i operatora OFFSET.
Operator OFFSET wyznacza dla podanej zmiennej lub etykiety jej położenie liczone w bajtach względem początku segmentu w którym została zdefiniowana. Operand zawierający operator OFFSET jest traktowany jako liczba znana już w trakcie kompilacji.
Instrukcja LEA wyznacza adres efektywny czyli położenie lokacji pamięci względem początku segmentu na której zostanie wykonana operacja.
Instrukcja LEA wyznacza adres efektywny w trakcie wykonywania programu podczas gdy wartość operatora OFFSET znana jest w trakcie translacji programu.
5. W jakim celu stosowany jest współczynnik skali w modyfikacjach adresowych?
Stosowany jest gdy chcemy odwołać się do konkretnej wartości w tablicy znając indeks tej wartości w tablicy oraz rozmiar w bajtach tej wartości. Mnożymy wtedy zawartość drugiego rejestru modyfikacji adresowych w zależności od rozmiaru pojedynczej danej w tablicy. (słowo - x2, podwójne słowo - x4, poczwórne słowo - x8)
6. Jaka wartość zostanie wprowadzona do rejestru DX po wykonaniu podanego niżej fragmentu programu?
d2 SEGMENT
linie dw 421, 422, 443, 442, 444, 427, 432
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
polacz SEGMENT
ASSUME cs: polacz, ds:d2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mov si, OFFSET linie + 2
mov bx, 4
mov dx, [bx] [si]
ODP: 442
D. Programowanie w asemblerze
1. Omówić trzy podstawowe formaty wierszy źródłowych.
[ nie wiem czy na pewno o to chodziło, przykłady mile widziane]
A - etykieta | rozkaz do wykonania | operandy | komentarz
B - nazwa zmiennej | dyrektywa | operand | komentarz
C - nazwa stałej | dyrektywa | operand | komentarz
2.Jaką rolę pełnią dyrektywy w programie asemblerowym?
Dyrektywa nie jest instrukcją procesora, lecz poleceniem dla asemblera nakazującym mu określone działanie lub sposób interpretacji określonych instrukcji.
Służą do deklarowania danych statycznych i dynamicznych w programie (DB, DW, DD, DF, DQ, DT)
Do wyodrębnienia segmentów w programie (SEGMENT i ENDS wskazują początek i koniec segmentu programu)
Do powiązania ze sobą segmentów i rejestrów segmentowych (ASSUME)
Do wskazania końca programu (END) wszystkie wiersze znajdujące się za tą dyrektywą są ignorowane.
Do wyodrębnienia procedury w programie (PROC i ENDP wskazują odpowiednio koniec i początek procedury)
Dyrektywa INCLUDE wskazuje plik, którego treść powinna zostać poddana translacji, tak jak gdyby była umieszczona w pliku źródłowym.
Dyrektywy powtarzania (REPT, IRP, IRPC)
3. Jak należy rozumieć termin licznik lokacji w kontekście programu asemblerowego?
Jest to rejestr programowy definiowany przez asembler. Określa lokację w pamięci operacyjnej, do której zostanie przesłany aktualnie tłumaczony rozkaz lub dana. Po załadowaniu rozkazu lub danej licznik lokacji zostaje zwiększony o liczbę bajtów zajmowanych przez ten rozkaz lub daną. Licznik nie wskazuje adresu fizycznego ładowanej lokacji lecz jedynie jej położenie względem segmentu. W trakcie tłumaczenia pierwszego wiersza licznik lokacji = 0.
4. Wyjaśnić znaczenie terminów makrowołanie i makrodefinicja.
Makrowołanie to wywołanie makrodefinicji. Wykonuje się je poprzez napisanie nazwy makrodefinicji i ewentualnych parametrów.
Makrodefinicja to reguły według których przekształcany jest tekst wejściowy.
5. Jakie zastosowanie w programowaniu w asemblerze mają dyrektywy REPT, IRP, IRC.
Wszystkie te dyrektywy pozwalają na wielokrotne skopiowanie do programu zaznaczonego tekstu.
REPT - wszystkie kopie są identyczne (wykonuje x kopii np. jednego znaku)
IRP - tworzy kopie parametryzowane (n kopii x znaków)
IRPC - tworzy kopie w których pole parametru wypełniane jest kolejnymi znakami łańcucha
E. Operacje stosu i podprogramy
1. Jaką rolę w operacjach wykonywanych na stosie pełnią rejestry SS i (E)SP?
SS - rejestr segmentowy wskazujący początek obszaru pamięci zajmowanego przez stos.
(E)SP - wskaźnik stosu określający położenie wierzchołka stosu (ostatnio zapisanej danej)
2. W jaki sposób instrukcje PUSH i POP wpływają na stan wskaźnika stosu (E)SP?
Instrukcja PUSH powoduje zmniejszenie wartości (E)SP ( o 4 dla 32-bit. danych o 2 gdy dane są 16-bit.)
Instrukcja POP zwiększa wartość (E)SP ( o 4 dla 32-bit. danych o 2 gdy dane są 16-bit.)
3. Jakie konwencje przekazywania parametrów stosują podprogramy systemowe BIOSu i DOSu?
Przekazują parametry głównie przez rejestry.
[jakoś mało jak na odpowiedź na pyt. AJ, nic innego na ten temat nie znalazłam ]
4. Omówić zasady działania instrukcji CALL , INT, i (I)RET.
CALL - wywołuje procedurę i zostawia na stosie odpowiedni ślad, aby umożliwić powrót (przekazanie sterowania w odpowiednie miejsce) z tej procedury do programu głównego.
INT - wywołuje podprogram systemowy za pomocą tablicy przerwań, na stosie zostawia ślad
RET - zdejmuje z wierzchołka stosu ślad zostawiony przez CALL
IRET- zdejmuje z wierzchołka stosu ślad zostawiony przez INT
5. Porównać typowe techniki przekazywania parametrów do podprogramu stosowane w procesorach RISC i CISC.
W procesorach CISC parametry wywołań przekazywane są przez stos, co wymaga wielu odwołań do pamięci. Z kolei w procesorach RISC duża liczba rejestrów ogólnego przeznaczenia umożliwia przekazywanie parametrów przez rejestry, co znacznie zmniejsza liczbę odwołań do pamięci.
W przypadku procesora RISC w programach o małym stopniu zagnieżdżenia procedur, rejestry pozostają częściowo niewykorzystane. A przy dużym zagnieżdżeniu może ich zabraknąć (dane wtedy wylądują w pamięci)
Pamięć podręczna CISC może dynamicznie reagować, ale bloki wczytane do pamięci nie są w całości wykorzystane.
Adresowanie rejestrów jest prostsze niż pamięci. Stosowanie dużej liczby rejestrów jest bardziej efektywne.
6. Dlaczego wiele programów generowanych przez kompilatory języków wysokiego poziomu używa stosu do przechowywania wartości zmiennych?
Działania wykonywane są często na zmiennych lokalnych, które są potrzebne tylko w trakcie wykonywania funkcji. Zmienne lokalne powinny więc zajmować obszar pamięci przydzielany tylko na czas wykonywania podprogramu, dlatego wygodnie jest umieszczać takie zmienne na stosie.
F. Lista instrukcji procesora
1. Omówić bitowe operacje logiczne wykonywane przez instrukcje procesora.
AND (bitowy iloczyn logiczny), OR ( bitowa suma logiczna ), XOR(bitowa suma modulo 2), TEST (bitowy iloczyn logiczny) wykonują operacje na odpowiadających sobie bitach obu operandów. Wynik wpisywany jest do operandu docelowego i ustawiane są odpowiednie znaczniki. TEST ustawia znaczniki ale nie zapisuje wyniku
NOT - jednoargumentowa instrukcja negująca wszystkie bity
SHR - przesunięcie logiczne w prawo o liczbę bitów podaną bezpośrednio jako argument lub przez rejestr CL (dzielenie przez wielokrotność 2). Najstarszy bit zerowany a najmłodszy przeniesiony do CF.
SHL - przesunięcie logiczne w lewo o liczbę bitów podaną bezpośrednio jako argument lub przez rejestr CL (mnożenie przez wielokrotność 2). Najmłodszy bit zerowany a najstarszy przeniesiony do CF.
ROL - przesunięcie cykliczne w lewo o określoną liczbę pozycji. Najstarszy bit kopiowany do CF i w miejsce najmłodszego bitu.
ROR - przesunięcie cykliczne w prawo o określoną liczbę pozycji. Najmłodszy bit kopiowany do CF i w miejsce najstarszego bitu.
RCL - przesunięcie cykliczne w lewo przez CF
RCR - przesunięcie cykliczne w prawo przez CF
BT, BTS(wpisanie 1), BTR(wpisanie 0), BTC(neg. bitu) - operacje na pojedynczych bitach
2. Omówić zasady działania instrukcji wykonujących działania na blokach danych.
MOVSB, MOVSW, MOVSD - do kopiowania łańcuchów pomiędzy dwoma miejscami w pamięci (pierwsza przesyła bajt po bajcie, druga - słowo po słowie, trzecia - podwójne słowa) przed kopiowaniem podajemy adres z którego kopiujemy (DS:SI) i do którego będziemy kopiować (ES:DI)
SI i DI zwiększane są gdy znacznik DF=0 a zmniejszane gdy DF=1.
LODSB, LODSW, LODSD - ładują rejestry odpowiednio AL(bajtem), AX(słowem) lub EAX(dword) danymi znajdującymi się w pamięci pod adresem wskazanym przez DS:(E)SI
STOSB, STOSW, STOSD - wysyłają wartość z akumulatora w odpowiednie miejsce w pamięci wskazane przez ES:(E)DI
3. Czym różnią się instrukcje koprocesora arytmetycznego FLD, FST?
FLD - ładowanie na wierzchołek stosu koprocesora liczby zmiennoprzecinkowej pobranej z lokacji pamięci lub ze stosu koprocesora.
FST - przesyłanie zawartości wierzchołka stosu do lokacji pamięci lub do innego rejestru stosu koprocesora.
4. Omówić specyfikę i zastosowanie instrukcji grup MMX i SSE.
MMX - grup instrukcji przeznaczona do wykonywania i operacji na dźwiękach i obrazach ( wielokrotnie powtarzające się działania arytmetyczne na liczbach całkowitych 8- i 16 - bit.)
wykonują one operacje na kilku danych równolegle.
Dla operacji MMX wprowadzono osiem 64 - bit. rejestrów.
Używane są 4 typy danych (nie ma jednak możliwości indywidualnego dostępu do poszczególnych składowych). Dane przechowywane są wg konwencji mniejsze niżej.
Instrukcje nie zmieniają rejestru znaczników, wykonywane są w konwencjonalny sposób, są dwu bajtowe, mogą powodować wyjątki
Obok zwykłej arytmetyki przewinięcia stosowana jest także arytmetyka nasycenia (przy przetwarzaniu obrazów)
SIMD
SSE - zestaw instrukcji wykonujących działania na liczbach zmiennoprzecinkowych.
Równoległe operacje na czterech 32 - bitowych liczbach zmiennoprzecinkowych
Przeznaczone głównie do zastosowań grafiki komputerowej
Realizują koncepcję SIMD
Dla SSE zdefiniowano 8 rejestrów 128 - bitowych i zawierających 4 liczby zmiennoprzecinkowe
Instrukcje mogą wykonywać działania na danych upakowanych (4 liczby) lub skalarnych (zestaw danych zawiera jedną liczbę na najmniej znaczących bitach)
5. W jaki sposób instrukcja IRET wpływa na zawartość rejestru znaczników F?
Instrukcja IRET zdejmuje ze stosu ślad zostawiony przez instrukcję INT. Ponieważ w tym śladzie zapisany był rejestr znaczników F, instrukcja IRET ustawia rejestr znaczników F zgodnie z zapisanym śladem.
G. Sterowanie pracą urządzeń zewnętrznych
1. Omówić podstawowe koncepcje komunikacji komputera z urządzeniami zewnętrznymi.
Komunikacją komputera z urządzeniami zewnętrznymi zajmują się specjalne układy pośredniczące, które dopasowują standardy sygnałowe procesora i płyty głównej do specyficznych wymagań poszczególnych urządzeń.
Od strony procesora komunikacja odbywa się poprzez zapis/odczyt rejestrów zainstalowanych na układach we/wy.
Stosowane są dwie metody dostępu do tych rejestrów:
współadresowalne układy we/wy - rejestry udostępniane są jako zwykłe komórki pamięci w przestrzeni adresowej pamięci
izolowane we/wy - rejestry urządzenia dostępne są w odrębnej przestrzeni adresowej zwanej przestrzenią adresową we/wy lub przestrzenią portów.
2. Omówić podstawowe elementy systemu przerwań stosowanego w komputerach PC.
W procesorach Pentium po wystąpieniu przerwania sprzętowego, bezpośrednio przed uruchomieniem programu obsługi przerwania na stosie zapisywany jest ślad, który umożliwia powrót do przerwanego programu.
Program obsługi przerwania kończy instrukcja IRET, która powoduje wznowienie wykonywania przerwanego programu poprzez odtworzenie rejestrów (E)IP, CS, i (E)FLAGS, na podstawie śladu zapamiętanego na stosie.
3. Wyjaśnić co oznacza termin „przestrzeń adresowa portów”.
Odrębna przestrzeń adresowa w której dostępne są rejestry urządzenia (układów we/wy)
Do zapisu i odczytu danych w przestrzeni adresowej portów stosuje się instrukcje IN i OUT oraz ich rozszerzenia.
4. W jaki sposób organizowana jest obsługa wyjątków procesora?
W trakcie wykonywania programu przez procesor występują sytuacje uniemożliwiające dalsze wykonywanie programu. Wystąpienie takich sytuacji powoduje wygenerowanie wyjątku przez procesor. Wyjątki związane są z wykonywaniem instrukcji przez procesor.
Wyjątek powoduje zapamiętanie śladu na stosie, wyzerowanie znacznika IF i rozpoczęcie wykonywania podprogramu właściwego dla określonego wyjątku. Większość wyjątków zdefiniowana jest dla trybu chronionego.
Wyróżnia się trzy typy wyjątków w zależności od sposobu powrotu z obsługi:
niepowodzenia - zapamiętane wartości CS i (E)IP wskazują na instrukcję, która spowodowała wyjątek. W tym przypadku nie przewiduje się możliwości kontynuowania wykonywania programu.
potrzask - zapamiętane wartości CS i (E)IP wskazują na instrukcję, która ma być wykonana po zakończeniu instrukcji powodującej wyjątek. W tym przypadku kontynuowanie wykonywania programu jest możliwe, ale wymaga pewnych działań systemu operacyjnego.
Załamanie - wyjątek powodowany wskutek poważnego błędu w pracy systemu. Nie jest możliwa lokalizacji błędnej instrukcji ani kontynuacja programu.
5. Wyjaśnić co oznacza termin „priorytet przerywania”.
Priorytet przerwania jest miarą „ważności” przerwania w sensie kolejności wykonywania. Mniejsza liczba oznacza wyższy priorytet.
6. W jaki sposób funkcjonuje bufor okrężny?
Bufor klawiatury w systemie BIOS ma organizację FIFO i jest zorganizowany jako bufor okrężny. Zajmuje 32 bajty i jest przeznaczony do przechowywania maksymalnie 15 elementów (dwubajtowych) dwa bajty pozostają niewykorzystane ale są niezbędne do poprawnej pracy procesora.
Procedura obsługi przerwania sprzętowego z klawiatury rejestruje w buforze kody naciśniętych klawiszy, natomiast procedura usługowa wywoływana przez program użytkownika pobiera znaki z bufora i przekazuje je do programu.
Program obsługi korzysta z dwóch wskaźników 16 - bitowych umieszczonych w obszarze zmiennych BIOSU.
7. Jaką rolę w komunikacji z urządzeniami zewnętrznymi pełni obszar współadresowalny pamięci?
Jest to jedna z metod dostępu do zawartości rejestrów układów wejścia i wyjścia. Rejestry urządzenia są udostępniane jako zwykłe komórki pamięci w przestrzeni adresowej pamięci.
(stosując tą metodę można odczytywać i zapisywać rejestry urządzenia tak samo jak zwykłe komórki pamięci np. za pomocą mov [tak jest z zapisywaniem do pamięci ekranu])
8. W jakich okolicznościach używa się przerwań niemaskowalnych?
Przerwania niemaskowalne nie mogą być blokowane.
Stosowane do sygnalizacji zdarzeń wymagających natychmiastowej obsługi niezależnie od stanu systemu.
9. Podać podstawowe zasady tworzenia procedur obsługi przerwań sprzętowych.
zapamiętanie starego wektora przerwań
zablokowanie przerwań (cli)
instalacja nowej procedury obsługi
odblokowanie przerwań (sti)
...(jakieś instrukcje wykorzystujące nowo zainstalowaną procedurę obsługi)...
zablokowanie przerwań
deinstalacja nowej procedury obsługi przerwania
odblokowanie przerwań
[w procedurze trzeba odblokować przerwania - sti ]
10. Podać zasady wyświetlania znaków w trybie tekstowym poprzez bezpośredni zapis do pamięci.
Znaki wyświetlane na ekranie są odwzorowaniem obszaru pamięci od adresu fizycznego B800h (trzeba przekazać go do rejestru segmentowego es przez rejestr ax)
Każdy znak wyświetlany na ekranie opisany jest przez 2 bajty parzyste zawierają kod ASCII znaku a nieparzyste atrybut np. kolor(Kod znaku przekazywany jest przez rejestr al do komórki pamięci o adresie es:[bx] bx - przesunięcie względem początku rejestru segmentowego es)
Kolejne bajty pamięci począwszy od adresu B800h (co drugi) są odwzorowywane w znaki na ekranie począwszy od lewego górnego rogu (kolejne pozycje na ekranie są przekazywane przez rejestr bx)
H. Programy usługowe DOSu i BIOSu
1. Jaką rolę w komputerach PC pełni system BIOS?
Jest mini systemem operacyjnym obsługi urządzeń wejścia/wyjścia. Znajduje się w pamięci ROM, jest uruchamiany bezpośrednio po uruchomieniu komputera. Zawiera programy inicjalizujące, testujące i konfigurujące zainstalowane urządzenia (zestaw testujący POST). Funkcje udostępniane przez BIOS dla innych programów tworzą BIOS API(elementarny zestaw operacji nie zależny od konstrukcji komputera.). BIOS posiada też mechanizmy pozwalające na dynamiczną konfigurację systemu, w zależności od wyposażenia komputera.
2. W jaki sposób wywołuje się programy usługowe DOSu i BIOSu?
(Poprzez wpisanie do rejestru AX (AH) odpowiedniego numeru (identyfikatora programu usługowego) oraz instrukcję INT wywołuje podprogram systemowy za pomocą tablicy przerwań, na stosie zostawia ślad)
przykłady:
INT 21h - pakiet podprogramów systemu DOS
INT 16h - obsługa klawiatury BIOS
INT 14h - obsługa łącza szeregowego BIOS
INT 10h - obsługa operacji ekranowych BIOS
3. Dlaczego podprogramy systemowe wywoływane są zwykle w sposób pośredni?
Ponieważ wywoływanie podprogramów systemowych wymaga znajomości adresów poszczególnych podprogramów, a te mogą się zmieniać w kolejnych wersjach systemów lub mogą zależeć od konfiguracji sprzętu.
Dlatego zastosowano w wielu systemach zastosowano pośrednie wywoływanie za pośrednictwem tablicy adresowej, zawierającej adres podprogramu systemowego(nie trzeba znać adresu tylko indeks w tablicy).
I. Architektury RISC i CISC
1. Porównać charakterystyczne elementy architektury RISC i CISC.
CISC
lista rozkazów zawiera 100 - 250 pozycji, wśród których są rozkazy realizujące złożone funkcje
dostępna jest duża liczba trybów adresowania
czas wykonania rozkazów zmienia się w dość dużych granicach (w zależności od skomplikowania)
realizacja rozkazów oparta jest na technice mikroprogramowania
RISC
niewiele trybów adresowania
formaty rozkazów są stałej długości (łatwe do zdekodowania)
dostęp do pamięci tylko przy użyciu rozkazów load i store
duży zbiór rejestrów ogólnego przeznaczenia
rozkazy wykonują operacje na argumentach zapisanych w rejestrach
sterowanie wykonywaniem rozkazów realizowane jest układowo
intensywne wykorzystanie przetwarzania potokowego
2. Podać charakterystykę ogólną procesorów klasy P6.
Wykonywanie instrukcji jest rozdzielone na 12 faz
Instrukcje mogą być wykonywane nie po kolei
Odwzorowywanie rejestrów stałych na tymczasowe
Superskalarność
Zachowanie sekwencyjnego przepływu instrukcji
3. Omówić algorytmy dostępu i aktualizacji zawartości pamięci podręcznej.
Pamięć podręczna pełni rolę bufora między procesorem a pamięcią główną i jest od niej znacznie mniejsza. Jej funkcjonowanie opiera się na zasadzie lokalności (tendencja do skupiania się rozkazów). Przechowuje bloki z pamięci głównej (4 - 16 bajtów).
W trakcie wykonywania instrukcji procesor szuka najpierw rozkazów i danych w pamięci podręcznej:
Jeśli znajdzie potrzebną informację to jest ona przesyłana do procesora tzw. Trafienie (cache hit)
Jeśli nie znajdzie w pamięci podręcznej to jest ona pobierana z pamięci głównej i jest kopiowana w postaci całego bloku do pamięci podręcznej (zgodnie z zasadą lokalności).
Organizacja oparta na adresowaniu asocjacyjnym
Każdy blok (4 - 16 bajtów) pamięci podręcznej zawiera pole etykiety (numer bloku długość pola etykiety zależy od stosowanych adresów i pole słowa 4-bitowe) Np. bloki są 16 - bajtowe a stosowane adresy są 32 - bitowe wtedy pole etykiety ma długość 28 - bitów. W celu odnalezienia informacji 28 najstarszych bitów jest porównywanych z polem etykiety w pamięci podręcznej (jak znajdzie to jest ładowany do procesora jak nie to wyszukiwany w RAM i jak znajdzie to ładuje cały blok do pamięci podręcznej)
Odwzorowanie bezpośrednie
Nie występuje konieczność porównywania wielu etykiet równocześnie. Adres dzielony jest na 3 pola: pole etykiety (16-bitów najstarszych), pole obszaru(12-bitów) i pole słowa (4-bity najmłodsze). Najpierw porównywane jest pole etykiety jeżeli się taka znajdzie to porównywane jest pole obszaru jeżeli się takie znajdzie to jest pobierana do procesora jeżeli na którymś etapie nie jest taka sama to odpowiednie bajty są pobierane z RAM.
4. Na czym polega różnica w sterowaniu mikroprogramowym a układowym procesora?
Sterowanie mikroprogramowe
Sterowanie za pomocą wewnętrznego procesora wbudowanego w główny procesor. Wewnętrzny procesor zawiera własny wskaźnik instrukcji i wykonuje mikroprogram zapisany w ROM. Sterowanie mikroprogramowe pozwala na stosunkowo łatwe tworzenie nowych procesorów o bardziej rozbudowanej liście rozkazów, łatwiej jest także usuwać błędy projektowe na etapie prototypowym.
Sterownie układowe
Stanowi złożony układ cyfrowy zawierający bramki, przerzutniki i inne podzespoły. Istotnym elementem takiego sterowania jest licznik sekwencji, który jest zwiększany o 1 w kolejnych fazach wykonywania rozkazów. Sterowanie układowe pozwala na nieco szybsze wykonywane rozkazów. Trudna modyfikacja na etapie projektowania. Może być stosowany ze złożonymi formatami rozkazów.
[podsumowując różnica polega na technicznej realizacji układów. Mikroprogramowe nadaje się do procesorów RISC (zredukowana lista rozkazów) a układowe do CISC. Mikroprogramowe łatwo modyfikować natomiast modyfikacja układowego jest trudna. Układowe pozwala na szybsze wykonywanie rozkazów]
5. Omówić przyczyny utrudniające realizację przetwarzania potokowego w procesorach.
Zasoby komputera muszą być odpowiednio dzielone pomiędzy rozkazy znajdujące się w potoku
Zależności pomiędzy danymi
Instrukcje skoku
6. W jaki sposób we współczesnych procesorach przewiduje się zachowanie instrukcji skokowych?
Statyczne przewidywanie rozgałęzień - nie zależą od historii wykonania rozkazu. Przyjmuje się jedno z założeń: rozgałęzienie zawsze nie nastąpi , rozgałęzienie zawsze nastąpi , nastąpi albo nie
Jeżeli przewidywanie było nie trafne to potok trzeba wypełniać od nowa.
Strategia dynamiczna - oparta na historii wykonanych rozkazów skoków warunkowych. Na podstawie bitów odzwierciedlających najnowszą historię rozkazu procesor podejmuje decyzję.
Tablica historii skoków - rejestruje wyniki działania rozkazów skokowych w celu przewidywania ich zachowania w przyszłości. Zawartość tablicy może być wykorzystana po zdekodowaniu adresu rozkazu skokowego. Przydatna w przypadku pętli.
BTB (bufor adresów rozgałęzień) - w procesorze Pentium. Przechowuje historię 256 skoków warunkowych i na jego podstawie przewiduje się zachowanie instrukcji skoku.
2 bufory typu FIFO - do których pobierane są rozkazy wykonywane w każdej gałęzi rozwidlenia. W zależności od wyniku skoku wybierany jest 1 lub 2 bufor.
Technika zwielokrotnienia strumieni - polega na powieleniu początkowych części potoku i umożliwieniu pobrania obu sekwencji rozkazów za pomocą dwóch strumieni.
Bufor pętli - jest podobny do pamięci podręcznej ale znacznie mniejszy. Zawiera n ostatnio pobranych rozkazów, pobierane z wyprzedzeniem.
7. Omówić podstawowe zasady działania układów DMA.
W przypadku przesyłania znacznej ilości danych z urządzenia zewnętrznego do pamięci RAM wskazane jest wykorzystanie techniki bezpośredniego do pamięci DMA. Moduł DMA otrzymuje od procesora następujące informacje:
Rodzaj operacji
Adres urządzenia we/wy
Adres pamięci RAM przewidziany do zapisania lub odczytania
Liczbę bajtów, które mają być odczytane lub zapisane
Na podstawie otrzymanych danych DMA uruchamia przesyłanie danych, natomiast procesor kontynuuje inne prace. Po zakończeniu DMA wysyła sygnał przerwania do procesora.
8. Wyjaśnić koncepcję metody predykatowej.
Predykatowe wykonywanie instrukcji pozwala na całkowite wyeliminowanie rozgałęzień w programie. Wymaga to jednak stosowania innej techniki programowania. Stosowanie if - konwersji tzn. przekształcenie instrukcji if - then - else na kod bez rozgałęzień przy użyciu wartości boolowskich (predykatów) ( porównywanie ich wartości logicznych).
[ze skryptu wynika, że to są wszystkie jump'y warunkowe]
Miłej nauki
Lina
lina_m@o2.pl 17/06/03
17
Tekst zawierający
makrowołanie
makrogenerator
Tekst
wynikowy
makrodefinicja