| natofp Temat założony przez niniejszego użytkownika | Kod maszynowy i procesor » 2017-03-17 13:41:22 Witam,
 Zacznę od tego, że nie wiedziałem, gdzie umieścić ten temat, więc jeśli trzeba to proszę o przeniesienie gondola odpowiedniego działu.
 
 Moje pytanie dotyczy działania kompilacji i kodu maszynowego. Otóż dowiedziałem się, że w procesie kompilacji kod źródłowy jest tłumaczony na kod wynikowy(maszynowy). Ten z kolei jest listą zadań do wykonania dla procesora. Na różnych komputerach mamy przecież różne procesory, a mimo to niektóre programy sa przenośne. Jak to możliwe? Proszę o poprawienie mnie jeśli jestem w błędzie lub dokładne wytłumaczenie tego zjawiska. Z góry dziękuję.
 
 Pozdrawiam
 | 
|  | 
| Rashmistrz | » 2017-03-17 14:35:12 Tu znajdziesz dużo informacji na temat kompilacjii, jak i może również to czego szukasz:Gynvael's Code: Proces Kompilacji C/C++ | Na różnych komputerach mamy przecież różne procesory, a mimo to niektóre programy są przenośne. Jak to możliwe? | 
 Kompilatory są dla różnych procesorów i systemów.  To one się tym zajmują kompilując ten sam kod. Niestety niektóre rzeczy, biblioteki czy tam API/ABI  nie są dostępne dla każdego systemu i procesora. Ale np. taka Java wykminiła sobie sposób i używa maszyny wirtualnej. Ale taki sposóbb wymaga implementacji maszyny dla każdego procesora. | 
|  | 
| pekfos | » 2017-03-17 17:55:34 | Na różnych komputerach mamy przecież różne procesory, a mimo to niektóre programy sa przenośne. Jak to możliwe? | 
 Jeśli procesor ma taką samą architekturę i zestaw instrukcji, to na nim kod maszynowy programu też zadziała. Jak pobierasz program, to masz link do pobrania dla np. "x86", a nie "Intel Core i5-6400". | 
|  | 
| natofp Temat założony przez niniejszego użytkownika | » 2017-03-18 09:43:29 W takim razie mam kolejne pytanie. Z tego co napisałeś wynika że procesory o tej samej architekturze mają często ten sam zestaw instrukcji? Jak wygląda to w praktyce? | 
|  | 
| j23 | » 2017-03-18 11:19:13 W praktyce wygląda to tak, że zestaw instrukcji jest taki sam, choć oczywiście mogą dojść instrukcje rozszerzające możliwości CPU (dawniej 3DNow!, MMX, SSE1/2/3/4/5). | 
|  | 
| mateczek | » 2017-03-18 12:54:52 kompilator buduje program na konkretną architekturę i pod konkretny system operacyjny. Tak skompilowany program pracuje na konkretnym procesorze i woła funkcje konkretnego systemu operacyjnego, np w celu uzyskania dostępu do pliku. Ten sam kod źródłowy wygeneruje inny plik wynikowy w zależności na jaki procesor i na jaki OS zostanie skompilowany.  | 
|  | 
| natofp Temat założony przez niniejszego użytkownika | » 2017-03-18 14:40:36 Ostatnie pytanie. Czyli jak przenosimy program  na inny komputer musimy go tam ponownie skompilować? | 
|  | 
| jankowalski25 | » 2017-03-18 14:55:05 Zależy, jak zdefiniujesz "inny komputer". Jeśli korzysta z innego procesora (czyli przejście w stylu "Intel->MIPS", a nie "Intel(x86)->AMD(x86)") lub z innego systemu operacyjnego (przejście w stylu "Windows->GNU/Linux", a nie "Windows 95->Windows 98"), to prawie na pewno będzie potrzebna ponowna kompilacja. Jest kilka wyjątków, ale początkujących raczej nie dotyczą. | 
|  | 
| « 1 »  2 |