programowanie na poziomie sprzętowym, x86 + powtórka ask
Post on 22-Jan-2016
35 Views
Preview:
DESCRIPTION
TRANSCRIPT
Progr. na poziomie sprzętowym - powtórka 1/67
Programowanie na poziomie
sprzętowym, x86 + powtórka ASK
dr inż. Mariusz Kapruziakmkapruziak@wi.ps.plpok. 107, tel. 449 55 44
Progr. na poziomie sprzętowym - powtórka 2/67
Procesor, Mikroprocesor, Mikrokontroler
PROCESOR
Procesory strukturalne
Procesory proceduralne
mikroprocesormikrokontrolerASIC/ASSP FPGA\CPLD
Progr. na poziomie sprzętowym - powtórka 3/67
Software 1965 - 1985
Progr. na poziomie sprzętowym - powtórka 4/67
Technika mikroprocesorowa - zakres kursu
Wykład 1. Powtórka ASK + x86
Wykład 2. Tryb chroniony, MMU, rodzaje jąder OS
Wykład 3. Sterowniki i obsługa sprzętu w MS Windows (WDM)
Wykład 4. Sterowniki i obsługa sprzętu w UNIX/LINUX
Wykład 5. Linux embedded, kompilacja jądra, pisanie aplikacji i sterowników
Wykład 6. WIN-CE - programowanie
Wykład 7. uCLinuxPropozycja 8. Aplikacje Real Time dla Linux
Propozycja 9. Embedded Graphics
1. Architektura von Neumanna 5/671 2 3 4 5
Architektura von Neumana i jej znaczenie
John von Neumann
1. specjalizowana funkcja składana jest z sekwencyjnie wykonywanych uniwersalnych operacji (program)
2. program i dane są logicznie rozdzielone
3. program i dane zndajdują się fizycznie w tej samej pamięci
4. pamięć zawierajaca zarówno program jak i dane łączy się z procesorem jedną wspólną szyną
Komputer von Neumanna: maszyna automatyczna do wykonywania operacji pobiarania instrukcji i wykonywania instrukcji na przemian
(fetch-execute mechine)
P.E. Ceruzzi, A History of Modern Computing, MIT Press 2003
1. Architektura von Neumanna 6/671 2 3 4 5
Komputer
W. Stallings, Organizacja i architektura systemu komputerowego, WNT 2003
1. Architektura von Neumanna 7/671 2 3 4 5
System komputerowy zbudowany w oparciu o architekturę von Neumanna powinien:
●mieć skończoną i funkcjonalnie pełną listę rozkazów.
●mieć możliwość wprowadzenia programu do systemu komputerowego poprzez urządzenia zewnętrzne i jego przechowywanie w pamięci w sposób identyczny jak danych.
●dane i instrukcje w takim systemie powinny być jednakowo dostępne dla procesora.
●Informacja jest tam przetwarzana dzięki sekwencyjnemu odczytywaniu instrukcji z pamięci komputera i wykonywaniu tych instrukcji w procesorze. http://pl.wikipedia.org/wiki/Architektura_von_Neumanna
Von Neumann - wikipedia
1. Architektura von Neumanna 8/671 2 3 4 5
Organizacja komputera
R. Pełka, Mikrokontrolery, architektura, programowanie, zastosowania, WKŁ 2000
SZYNY:
DANYCH
ADRESOWA
STEROWANIA
1. Architektura von Neumanna 9/671 2 3 4 5
Architektura von Neumanna a organizacja komputera
1. Architektura von Neumanna 10/671 2 3 4 5
Architektura komputerów mainframe System/360 1
Ok. 304 instrukcji o zmiennej długości i czasie wykonania
3 różne możliwe długości instrukcji
16 trybów adresowania
System/360 Model 64, Źródło: wikipedia
1. Architektura von Neumanna 11/671 2 3 4 5
Architektura komputerów mainframe System/360 2
offset
23
EF
Base Reg.
1
+
Instrukcja...
12
Szyna adresowa
32 24
General Purpose Reg.
R0R1R2
R13R14R15
GPR
OP CODE par0 par0/1 par1/2 par2/3 par2/3
1B 1B 1B 1B 1B 1B
INSTRUKCJA:
ZMIENNA DŁUGOŚĆ
SEGMENT + OFFSET
Rozszerzenia: Commercial Instruction Set, Scientific Instruction Set
1. Architektura von Neumanna 12/671 2 3 4 5
Obsługa szyny adresowej: banki vs segmenty
offset
DSSSESFSGS
Rej. Segment.
CS
+
Instrukcja...
16
Szyna adresowa
16 20
Szyna adresowa
8
offset
Instrukcja...
7
STATUS.RP0
LSb
MSb1
Banki pamięci, przykład Microchip PIC
Segmenty pamięci, przykład 8086
segment: offset:
adres fizyczny:
STATUS.RP0: offset:
adres fizyczny:
1. Architektura von Neumanna 13/671 2 3 4 5
Architektura komputerów mainframe System/360 4
System operacyjny:
BOS/360 –Basic Operating System / 360
DOS/360 – Disk Operating System / 360
OS/360 MVT – Operating System
2. RISC 14/671 2 3 4 5
Chip, komputery generacja III
H. Grosch, 1955
Prawo Groscha – Zakup komputera większego i dwa razy droższego skutkuje cztery razy większą mocą obliczeniową.
J. Kilby, Texas Instruments.
R. Noice, Fairchild Semiconductor.
Pierwszy patent na układ scalony zawierający więcej niż jeden element w środku
P.E. Ceruzzi, A History of Modern Computing, MIT Press 2003
2. RISC 15/671 2 3 4 5
Przesłanki do powastania RISC – pamięć RAM
RAM – Random Access MemorySuper Nova, Data General (założone przez inżynierów/buntowników z DEC),
połowa 1971
Data General Super Nova, 256 bitów
1970, Intel 1103, RAM 1024 bit
P.E. Ceruzzi, A History of Modern Computing, MIT Press 2003
2. RISC 16/671 2 3 4 5
Przesłanki do powastania RISC – statystyki wykorzystania instrukcji
Statystyki wykorzystania instrukcji dla procesorów o architekturze 8086
2. RISC 17/671 2 3 4 5
Przesłanki do powastania RISC - POTOK
2. RISC 18/671 2 3 4 5
Powstanie i krótka historia powszechnych architektur RISC
1975 - IBM 801, 32 32-bit GPR
1980 – Berkeley RISC I/II, projekt badawczy: wielozadaniowość
1981 – Stanford MIPS, projekt badawczy: eliminacja konfliktów na rejestrach przez kompilator, wiele jednostek funkcjonalnych
SPARC – otwarta architektura RISC
1986 – ARM, Advanced RISC Machine, projekt badawczy: nisko-mocowość, wysokie częstotliwości
1991 – PowerPC, IBM/Motorola/Apple, projekt badawczy: równoległość wykonania
2. RISC 19/671 2 3 4 5
SPARCScalable Processor ARChitecture
Skoncentrowano się na efektywnej metodzie przekazywania parametrów do procedur. Zaproponowano koncepcje okien rejestrów.
Przykładowe procesory: Sun microSPARC-IISun superSPARCFujitsu turboSPARCFujitsu SPARCliteHAL Computer Sys. SPARC 64
2. RISC 20/671 2 3 4 5
MIPSMicroprocessor without Interlocking Pipeline Stages
Potok wykorzystywany do aktywowania na raz więcej niż jednej operacji. Ciężar zapewnienia poprawności wykonania spoczywa na kompilatorze.
MIPS I (1984, R2000, R3000)MIPS II (1990, R6000)MIPS III (1991, R4000, R4400)MIPS IV (1994, R5000, R7000, R8000, R10000)MIPS V ( 1996, R12000)
Architektura MIPS R4400
J. Silc, B. Robic, T Ungerer, Processor Architecture, Springer Verlag 1999
2. RISC 21/671 2 3 4 5
ARM
Advanced RISC Machine
Niskomocowa architektura, pracująca z dużymi częstotliwościami.www.arm.com
2. RISC 22/671 2 3 4 5
PowerPCPerformance Optimization With Enhanced RISC PC
1990 – IBM POWER ISAArchitektura przewidująca jasny podział względem funkcji. Wyraźnie oddzielone funkcje kontroli wykonania programu, ogliczeń stałoprzecinkowych, obliczeń zmiennoprzecinkowych itp. . Każdy z takich bloków mógł pracować równolegle.
1991 – IBM/Motorola/Apple PowerPC ISA Rozszerzona, 64-bitowe wersja architektury POWER.
2. RISC 23/671 2 3 4 5
RISC - podsumowanie
Proste instrukcje i możliwie niewiele trybów adresowania
Większość isntrukcji operuje tylko na rejestrach. Do odwołania do pamięci instrukcje load/store
Dość głęboki potok w układzie sterującym
Mikroprogram praktycznie nie stosowany
Duża część zadań pozostawiona kompilatorowi do zaplanowania
Rozbudowana hierarchia pamięci
3. x86 24/671 2 3 4 5
Architektura 8086 , 1978
AD15-AD0 - Multipleksowane adres(ALE=1)/dane(ALE=0).
A19/S6-A16/S3 (multipleksowane) - Starsze 4 bity adresu lub status S6-S3
S7 – S0 – sygnalizuje parametry działania procesora.
INTR, INTA - Przerwanie i potwierdzenie przerwania
WR, RD – Zapis/Odczyt dla szyny
ALE – gdy 1, szyna zawiera adres (nie daną).
DT/R (Data Transmit/Receive) – Szyna danych zawiera dane.
HOLD – prośba o DMA
3. x86 25/671 2 3 4 5
Rejestry 8086AX – Accumulator Register
BX – Base Address Register
CX – Count Register
DX – Data Register
BP – Base Pointer
SP – Stack Pointer
SI – Source Index Register
DI – Destination Index Register
IP – Instruction Pointer
FLAGS:OF – Overflow Flag
DF – Direction Flag
IF – Interrupt Enable Flag
TF – Trap Flag
SF – Sign Flag
ZF – Zero Flag
AF – Auxiliary Flag
PF – Parity Flag
CF – Carry Flag
3. x86 26/671 2 3 4 5
Format Instrukcji 8086
3. x86 27/671 2 3 4 5
Lista instrukcji 8086 – instrukcje transferu
3. x86 28/671 2 3 4 5
Lista instrukcji 8086 – instrukcje arytmetyczne
3. x86 29/671 2 3 4 5
Lista instrukcji 8086 – instrukcje logiczne
3. x86 30/671 2 3 4 5
Lista instrukcji 8086 – instrukcje skoku
3. x86 31/671 2 3 4 5
Lista instrukcji 8086 – tryby adresowania
Implied (implikowane) – argument związany jednoznacznie z nazwą instrukcji.
Register (rejestrowe) – argument dotyczy jednego z rejestrów procesora
Immediate (natychmiastowe) – wartość danej zawarta jest w kodzie instrukcji
Direct (bezpośrednie) – instrukcja zawiera adres do pamięci, pod którym znajduje się wartość argumentu
Register indirect (pośrednie rejestrowe) – instrukcja zawiera adres rejestru, który zawiera adres do pamięci, pod którym znajduje się wartość danej. Dotyczy to rejestrów SI, DI, BX oraz BP.
Indexed (indeksowe) – instrukcja zawiera stałą, która dodawana jest do rejestru bazowego (BX, BP) lub indeksowego (SI, DI), tworząc adres do pamięci, pod którym znajduje się wartość danej.
Based Indexed (bazowe indeksowe) – zawartość rejestru bazowego (BX, BP) jest dodawana do zawartości rejestru indeksowego (SI, DI), tworząc adres do pamieci, pod którym znajduje się wartość danej.
Based Indexed with displacement (bazowe indeksowe z przemieszczeniem) – stała jest dodawana do rejestru bazowego (BX, BP) oraz rejestru indeksowego (SI, DI), tworząc adres do pamięci, pod którym znajduje się wartość danej.
RET
MOV AX, BX
JMP 0x0100
JMP AX, licznik
ADD [DI], AX
ADD [DI+8], AX
NOT [BX+DI]
NOT [BX+DI+8]
3. x86 32/671 2 3 4 5
8086 – „płyta główna” 8284A – Generator zegara
8288 – Kontroler szyny
8286 – Transceiver szyny danych
8259 – Kontroler przerwań
3. x86 33/671 2 3 4 5
8086 – sygnały na szynie
3. x86 34/671 2 3 4 5
BIOS i start systemu
BIOS – Basic Input/Output System – oprogramowanie wbudowane w chip na płycie głównej komputera PC.
1. Wykonuje procedurę POST – Power-On Self Test, w celu inicjalizacji i testowania urządzeń
2. Ładuje system operacyjny (boot OS)
IPL Device – Initial Program Load Device – urządzenie umożliwiające załadowanie systemu operacyjnego
BAID – BIOS Aware IPL Device – urządzenie IPL, które do załadowania systemu potrzebuje odpowiedniego kodu obsługującego w BIOS.
3. x86 35/671 2 3 4 5
BIOS i start systemu
1. Procesor wykonuje instrukcje zaczynając od adresu F000:FFF0 (zazwyczaj jmp)
2. Instrukcje dotyczą procedury POST
3. Po zakończeniu POST wywoływane jest przerwanie 19h
4. Przerwanie 19h podejmuje próbę załadowania systemu operacyjnego zgodnie z tablicą IPL
5. Jeśli próba się nie powiedzie, wywoływane jest przerwanie 18h
6. Przerwanie 18h przekazuje sterowanie do przerwania 19h, jeśli IPL Table posiada kolejen wpisy, lub wyświetla komunikat o błędzie
3. x86 36/671 2 3 4 5
BIOS i start systemu z dyskietkiProcesor pracuje w trybie rzeczywistym x86
Załadowanie 512 bajtów do pamięci pod adresem 0000h:7C00h z dysku z lokalizacji:
head 0, cylinder 0, sector 1
http://www.howtodothings.com/computers/a1015-making-your-own-operating-system.html
Każda strona dyskietki FDD ma swoją głowicę (heads 0...1). Każda strona składa się z 80 cylindrów, każdy cylinder składa się z 18 sektorów. Każdy sektor składa się z 512 bajtów.
Łączny rozmiar dyskietki: 2 x 80 x 18 x 512 = 1,474,560
3. x86 37/671 2 3 4 5
BIOS i start systemu z dyskietkiLEA SI, msg
MOV AH, 0Eh
pisz:
MOV AL, [SI] CMP AL, 0 JZ done INT 10h. INC SI JMP piszdone:
MOV AH, 0
INT 16h
JMP done
new_line EQU 13, 10
msg DB ‘moj pierwszy system operacyjny!' DB new_line, ‘Nacisnij klawisz', 0
3. x86 38/671 2 3 4 5
DOS – szablon programu
.model small
.386
.data
tekst byte „czesc”, 0Ah, 0Dh, „$”
.stack 100h
.code
.startup
MOV dx, offset tekst
MOV ah, 09h
INT 21h
.exit
end
3. x86 39/671 2 3 4 5
Segmenty i modele pamięci.model small
.386
dane segment para
tekst byte „czesc”, 0Ah, 0Dh, „$”
dane ends
moj_stos segment stack para
word 10 dup (?)
moj_stos ends
program segment para ‘code’
assume cs:program, ds:dane
.startup
MOV dx, offset tekst
MOV ah, 09h
INT 21h
.exit
program ends
end
ASSUME segRegister:segLocation [...]
name SEGMENT [align][READONLY]...
.....
name ENDS
3. x86 40/671 2 3 4 5
Windows – szablon programu
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
Tytul_okna byte „moje okno”, 0
Tekst_w_oknie byte „czesc!”, 0
.code
start:
invoke MessageBox, NULL, ADDR Tekst_w_oknie, ADDR Tytul_okna, MB_OK
invoke ExitProcess, NULL
end start
3. x86 41/671 2 3 4 5
Mechanizm przerwań - podziałSytuacje wyjątkowe (exception interrupts) – zdarzenia o największym znaczeniu
dla działania programu. Nie można ich odłożyć na później. Na przykład błąd dzielenia przez zero (divide-by-zero exception) lub przerwanie niemaskowalne (non-maskable interrupt).
Maskowalne przerwania sprzętowe (event interrupts) – przerwania pochodzące od urządzeń peryferyjnych. Mogą być blokowane i mogą mieć różne priorytety. Na przykład przerwanie od układu Timera.
Przerwania programowe (software interrupts) – wywoływane są przez umieszczenie w programie instrukcji wywołania przerwania (umieszczane przez programistę). Wykorzystywane czasem do zapewnienia wsparcie sprzętowego dla priorytetów wykonania pewnych fragmentów kodu lub częściej do implementacji funkcji systemowych (np.. BIOS).
Pułapki (traps) – stosowane do śledzenia wykonania programu w fazie testowania (breakpoints).
3. x86 42/671 2 3 4 5
Mechanizm przerwań - PC
3. x86 43/671 2 3 4 5
Mechanizm przerwań – Intel 8259A
3. x86 44/671 2 3 4 5
1) Urządzenie zgłasza chęć przerwania na linii IRx
2) Sprawdzane jest zezwolenie na przerwanie i priorytety przerwań
3) Wystawiany jest sygnał na linii INT
4) Procesor odpowiada sygnałem na linii INTA
5) Procesor po raz drugi daje sygnał na INTA, na który kontroler wystawia na szynę danych numer przerwania
6) Numer przerwania jest dla procesora indeksem w tablicy adresów do funkcji obsługi
7) Jeśli kontroler pracuje w trybie automatycznym, sam odznacza wykonanie przerwania w rejestrze statusu przerwań, w innym przypadku program użytkownika musi to zrobić.
Mechanizm przerwań – Intel 8259A
3. x86 45/671 2 3 4 5
DMA - Direct Memory Access, zysk
1) Procesor odczytuje bajt z portu IO i zapamiętuje w akumulatorze
2) Procesor wpisuje wartość z akumulatora do pamięci
1) Bajt wystawiany jest przez urządzenie i wpisywany bezpośrednio do pamieci. Szyna adresowa i sterująca kontrolowana przez kontroler DMA.
3. x86 46/671 2 3 4 5
DMA na komputerze PC
1) Urządzenie per. gdy ma dane do wysłania wystawia sygnał na DREQx (DMA Request)
2) Układ DMA wystawia żądanie przejęcia szyny na linie HRQ (Hold Request)
3) Procesor/kontroler szyny odpowiada zezwoleniem na przejęcie szyny na HLDA (Hold Ack)
4) Układ DMA informuje urządzenie per. o przejęciu kontroli nad szyną na linii DACKx i rozpoczyna transmisję (IOR/IOW/MEMR/MEMW/EOP)
3. x86 47/671 2 3 4 5
Tryby pracy kontrolera DMA„I” (Idle) – tryb spoczynkowy, oczekuje na nadejście żądania transmisji DMA
„S” (Single) – pojedyncze przesłanie. Rejestr adresowy zmniejszany/zwiększany o jeden.
„B” (Block) – transmisja trwa nieprzerwanie aż do zewnętrznego sygnału EOP od urządzenia per. Każde przesłanie pomniejsza/powiększa rejestr adresowy o jeden.
„D” (Demand) – podobny do trybu „B”. Pozwala na przerwanie transmisji po określonej maksymalnej liczby cykli lub wystąpienia żądania transmisji DMA o wyższym priorytecie.
„C” (Cascade) – kontrolery połączone w kaskadę przekazują informację do urządzenia Master nie przejmując samodzielnie kontroli na szynie.
„V” (Verify) – tryb diagnostyczny. Wystawia do urządzenia właściwe sygnały ale nie przejmuje kontroli nad szyną.
3. x86 48/671 2 3 4 5
DMA – połączenie kaskadowe i podłączanie do szyny
5. Nowoczesne problemy 49/671 2 3 4 5
Metody przewidywania skoków
Metody statyczne (static prediction schemes) – możliwe do określenia na etapie kompilacji.
1. Schemat „always taken” / „always not-taken”
2. Schemat „forward not taken backward taken”
3. Schemat „delayed branch”
Metody dynamiczne (dynamic prediction schemes) – wykonywane sprzętowo wewnątrz procesora.
1. Schemat tabeli 1-bitowych wartości.
2. Schemat tabeli N-bitowych wartości.
3. Schematy dwupoziomowe historii skoków.
5. Nowoczesne problemy 50/671 2 3 4 5
1 1N
NS
N
Prawo Amdahla – forma oryginalna
NS Speed up – przyspieszenie przy wykorzystaniu N proc.
N Liczba procesorów
Część programu wymagająca sekwencyjnego wykonania
Tylko część programu można zrównoleglić. Pozostała część, ze względu na występujące w niej zależności, musi być wykonana sekwencyjnie.
5. Nowoczesne problemy 51/671 2 3 4 5
Architektury przewidujące równoległości poziomu instrukcji
Front-end
Określenie zależności
Określenie niezależności
Przypisanie do jednost.funkcjonalnych
Przypisanie do ścieżektransferu danych
Kod aplikacji
Wykonanie
Zadaniakompilatora
Zadaniaprocesora
Określenie zależności
Określenie niezależności
Przypisanie do jednost.funkcjonalnych
Przypisanie do ścieżektransferu danych
Zależnościprocesoryprzepływowe
Sekwencja
procesorysuperskalarne
NiezależnościEPIC
Niezależności
VLIW
Niezależności
TTA
arch
itek
tury
sta
tycz
ne
arch
itek
tury
dyn
amic
zne
5. Nowoczesne problemy 52/671 2 3 4 5
IS RO
EX
WB
Scoreboard
FU1
EXFUN
EXFU0
…IF
MEM
WAW RAW WARStrukt.
Eliminacja zależności w algorytmie scoreboarding
5. Nowoczesne problemy 53/671 2 3 4 5
R
F0
…
…R0 R1 R2 RM
Busy RO WBEX
FN
F1 …
DestSrc
Struktury wykorzystywane w algorytmie scoreboarding
5. Nowoczesne problemy 54/671 2 3 4 5
Pamięć podręczna
5. Nowoczesne problemy 55/671 2 3 4 5
Funkcje odwzorowania pamięci podręcznejOdwzorowanie skojarzeniowe
Odwzorowanie bezpośrednie
Odwzorowanie sekcyjno-skojarzeniowe
5. Nowoczesne problemy 56/671 2 3 4 5
Odwzorowanie skojarzeniowe
5. Nowoczesne problemy 57/671 2 3 4 5
Odwzorowanie skojarzeniowe - przykład
5. Nowoczesne problemy 58/671 2 3 4 5
Odwzorowanie bezpośrednie
5. Nowoczesne problemy 59/671 2 3 4 5
Odwzorowanie bezpośrednie – stałe przypisanie bloków
5. Nowoczesne problemy 60/671 2 3 4 5
Odwzorowanie bezpośrednie - przykład
5. Nowoczesne problemy 61/671 2 3 4 5
Odwzorowanie sekcyjno-skojarzeniowe
5. Nowoczesne problemy 62/671 2 3 4 5
Odwzorowanie sekcyjno-skojarzeniowe
5. Nowoczesne problemy 63/671 2 3 4 5
Pamięć podręczna – algorytmy zastępowania
LRU – Least-Recently Used – najmniej ostatnio używane
Należy zastąpić ten blok w seksji, który pozostawał w pamięci podręcznej najdłużej bez odwoływania się do niego.
FIFO – First In First Out – pierwszy wchodzi, pierwszy wychodzi
Należy zastąpić ten blok, który najdłużej pozostawał w pamięci podręcznej.
LFU – Least Frequently Used – najrzadziej używany
Należy zastąpić ten blok, którego dotyczyło najmniej odniesień.
5. Nowoczesne problemy 64/671 2 3 4 5
Pamięć L1/L2, jednolita/program-dane, ...
Zapis jednoczesny (Write Through)
Zapis opóźniony (Write Back)
5. Nowoczesne problemy 65/671 2 3 4 5
Pamięć wirtualna - wprowadzenie
STRONICOWANIE
PAMIĘĆ WIRTUALNA
Progr. na poziomie sprzętowym - powtórka 66/67
Polecana literatura
2) W. Stallings, Organizacja i architektura systemu komputerowego, WNT 2003
1) R. Pełka, Mikrokontrolery, architektura, programowanie, zastosowania, WKŁ 2000
3) J. Stokes, Inside the Machine, No Starch Press, 2007
4) P.E. Ceruzzi, A History of Modern Computing, The MIT Press 2003
5) H. Corporaal, Microprocessor Architectures: From VLIW to TTA, Wiley 1998
6) J. Silc, B. Robic, T Ungerer, Processor Architecture From Dataflow to Superscalar and Beyond, Springer Verlag 1999
7) E. Wróbel, Asembler, Helion 2004
8) G. Syck, Turbo Assembler Biblia użytkownika, LT&P 1996
9) P. Metzger, Anatomia PC, Helion 2001
10) Intel IA-32 Software Developers Manual, August 2007
Progr. na poziomie sprzętowym - powtórka 67/67
KONIEC
dr inż. Mariusz Kapruziakmkapruziak@wi.ps.plpok. 107, tel. 449 55 44
top related