Przejdź do zawartości

Język niskiego poziomu: Różnice pomiędzy wersjami

Z Wikipedii, wolnej encyklopedii
[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
Uściślenie nazewnictwa
m Wycofanie edycji użytkownika 5.173.130.136 (dyskusja). Autor przywróconej wersji to PBbot.
Znaczniki: Wycofanie zmian Z urządzenia mobilnego Z wersji mobilnej (przeglądarkowej) Zaawansowana edycja mobilna
 
(Nie pokazano 36 wersji utworzonych przez 28 użytkowników)
Linia 1: Linia 1:
'''Język niskiego poziomu''' – [[język programowania]], w którym jednej operacji elementarnej odpowiada najczęściej jedna operacja elementarna rzeczywistego procesora<ref>Kott, Ryszard K., i Krzysztof Walczak. ''Programowanie w języku Fortran 77''. Wydawnictwa Naukowo-Techniczne, 1991, str. 14</ref>. W języku niskiego poziomu używa się stosunkowo prostych wyrażeń symbolicznych, które odpowiadają zestawowi [[Język maszynowy|rozkazów maszynowych]].
'''Język niskiego poziomu''' – typ [[język programowania|języka programowania]], który w małym stopniu [[Abstrakcja (programowanie)|abstrahuje]] od konstrukcji [[procesor|jednostki centralnej]] komputera. Innymi słowy, język ten wykazuje duże podobieństwo do [[Język maszynowy|kodu maszynowego]], zaś [[kompilacja (informatyka)|kompilacja]] jest w miarę nieskomplikowana.


Miernikiem „poziomu” danego języka programowania jest jego powiązanie ze [[Sprzęt komputerowy|sprzętem komputerowym]] (ang. ''hardware''). Przykładowo, w [[Asemblerowy język wysokiego poziomu|językach asemblerowych]] (które są językami niskiego poziomu) operuje się bezpośrednio na [[Rejestr procesora|rejestrach procesora]] i pośrednio także na [[Pamięć komputerowa|komórkach pamięci]], brak w nich natomiast abstrakcji programistycznych takich jak pętle czy złożone [[Struktura danych|struktury danych]]. Istnieje szereg języków, które, mimo że należą do klasy [[Język wysokiego poziomu|języków wysokopoziomych]], posiadają taką budowę i składnię często pozwalającą przewidzieć, jaki będzie odpowiednik programu w asemblerze, a tym samym generować z nich efektywny kod maszynowy. Do takich języków należy m.in. język [[C (język programowania)|C]]. Inne języki wysokopoziomowe, takie jak np. [[Java]] wraz z innymi [[Obiektowy język programowania|językami obiektowymi]], wprowadzają szereg abstrakcji programistycznych często tak oddalonych od sprzętu komputerowego (reprezentowanego przez instrukcje procesora, rejestry, adresy), że ten staje się dla programisty niewidoczny.
Występuje pewna względność ocen: [[C (język programowania)|język C]] może być oceniany jako język wysokiego poziomu przez programujących w [[asembler]]ze, lecz jako język niskiego poziomu przez używających [[Java|Javy]]. Pewnym obiektywnym miernikiem wysokości poziomu języka może być to, jak bardzo jest on niezależny od tego, jak działa komputer. W asemblerze operujemy bezpośrednio na rejestrach komputera, w C piszemy programy za pomocą pewnych instrukcji, natomiast Java i inne języki obiektowe pozwalają nam posługiwać się zdarzeniami występującymi między obiektami. W języku tym praktycznie nie widzimy w żaden sposób budowy [[komputer]]a.


Określenie „język niskiego poziomu” może być rozumiane również jako skala oceny [[Subiektywizm|subiektywnej]] danego języka programowania względem innego, np. [[C (język programowania)|C]] może być oceniany jako język niskiego poziomu przez osoby programujące w języku [[Java]].
Najbardziej typowym przykładem języka niskiego poziomu jest [[asembler|język asemblera]].

== Kod maszynowy ==
[[Plik:Digital pdp8-e2.jpg|thumb|300px|Przedni panel minikomputera PDP-8/E. Rząd przełączników (u dołu) wykorzystywany jest do przełączania w języku maszynowym programu]]
[[Język maszynowy|Kod maszynowy]] jest jedynym językiem, który komputer może przetwarzać i wykonywać bezpośrednio, bez konieczności wcześniejszej transformacji kodu. Obecnie programiści praktycznie w ogóle nie piszą programów w kodzie maszynowym, gdyż wymaga on zwracania uwagi na liczne szczegóły, które w językach wysokopoziomowych są obsługiwane automatycznie. Ponadto wymagane jest zapamiętywanie bądź wyszukiwanie kodów liczbowych dla każdej instrukcji, a modyfikacja kodu jest bardzo trudna.

Rzeczywisty ''kod maszynowy'' jest strumieniem surowych, zwykle [[Kod binarny|binarnych]] danych. [[Programista]], piszący w „kodzie maszynowym” zazwyczaj dokonuje kodowania danych oraz instrukcji w nieco bardziej czytelnej formie, np. w systemie [[Dziesiętny system liczbowy|dziesiętnym]], [[Ósemkowy system liczbowy|ósemkowym]], lub [[Szesnastkowy system liczbowy|heksadecymalnym]], który jest tłumaczony na wewnętrzny format przez stosowny program (ang. ''loader'') lub też wprowadzany do pamięci komputera za pomocą panelu przedniego.

Pomimo iż niewiele programów napisanych jest w języku maszynowym, programiści często opanowują jego czytanie poprzez pracę ze zrzutami pamięci lub poprzez debuggowanie za pomocą przedniego panelu<ref>{{Cytuj | url=http://whatis.techtarget.com/definition/machine-code-machine-language | tytuł=What is machine code (machine language)? - Definition from WhatIs.com<!-- Tytuł wygenerowany przez bota --> | opublikowany=whatis.techtarget.com | język=en | data dostępu=2017-11-24}}</ref>.

Przykład: funkcja zaprezentowana w heksadecymalnej postaci 32-bitowego [[x86]] kodu maszynowego, obliczająca ''n''-ty wyraz [[Ciąg Fibonacciego|ciągu Fibonacciego]]:
<pre>
8B542408 83FA0077 06B80000 0000C383
FA027706 B8010000 00C353BB 01000000
C9010000 008D0419 83FA0376 078BD98B
B84AEBF1 5BC3
</pre>


== Zobacz też ==
== Zobacz też ==
* [[Język wysokiego poziomu]]
* [[język wysokiego poziomu]]
* [[Asemblerowy język wysokiego poziomu]]
* [[asemblerowy język wysokiego poziomu]]

== Przypisy ==
{{Przypisy}}


{{Języki programowania}}
{{Języki programowania}}


{{Kontrola autorytatywna}}
[[Kategoria:Klasyfikacja języków programowania]]


[[Kategoria:Klasyfikacja języków programowania]]
[[ar:لغة البرمجة منخفضة المستوى]]
[[ca:Llenguatge de programació de baix nivell]]
[[cs:Nižší programovací jazyk]]
[[el:Γλώσσα προγραμματισμού χαμηλού επιπέδου]]
[[en:Low-level programming language]]
[[es:Lenguaje de bajo nivel]]
[[fa:زبان برنامه‌نویسی سطح پایین]]
[[fr:Langage de bas niveau]]
[[ko:저급 프로그래밍 언어]]
[[hr:Programski jezik niske razine]]
[[it:Linguaggio di programmazione a basso livello]]
[[lv:Zema līmeņa programmēšanas valoda]]
[[hu:Alacsony szintű programozási nyelv]]
[[mk:Прости програмски јазици]]
[[mn:Доод түвшний програмчлалын хэл]]
[[ja:低水準言語]]
[[mhr:Изи кӱкшытан программлымаш йылме]]
[[pt:Linguagem de programação de baixo nível]]
[[ru:Низкоуровневый язык программирования]]
[[sl:Nizkonivojski jezik]]
[[sh:Programski jezik niske razine]]
[[sv:Lågnivåspråk]]
[[th:ภาษาระดับต่ำ]]
[[tr:Düşük seviye programlama dili]]
[[vi:Ngôn ngữ lập trình bậc thấp]]
[[zh:低级语言]]

Aktualna wersja na dzień 23:09, 9 lut 2023

Język niskiego poziomujęzyk programowania, w którym jednej operacji elementarnej odpowiada najczęściej jedna operacja elementarna rzeczywistego procesora[1]. W języku niskiego poziomu używa się stosunkowo prostych wyrażeń symbolicznych, które odpowiadają zestawowi rozkazów maszynowych.

Miernikiem „poziomu” danego języka programowania jest jego powiązanie ze sprzętem komputerowym (ang. hardware). Przykładowo, w językach asemblerowych (które są językami niskiego poziomu) operuje się bezpośrednio na rejestrach procesora i pośrednio także na komórkach pamięci, brak w nich natomiast abstrakcji programistycznych takich jak pętle czy złożone struktury danych. Istnieje szereg języków, które, mimo że należą do klasy języków wysokopoziomych, posiadają taką budowę i składnię często pozwalającą przewidzieć, jaki będzie odpowiednik programu w asemblerze, a tym samym generować z nich efektywny kod maszynowy. Do takich języków należy m.in. język C. Inne języki wysokopoziomowe, takie jak np. Java wraz z innymi językami obiektowymi, wprowadzają szereg abstrakcji programistycznych często tak oddalonych od sprzętu komputerowego (reprezentowanego przez instrukcje procesora, rejestry, adresy), że ten staje się dla programisty niewidoczny.

Określenie „język niskiego poziomu” może być rozumiane również jako skala oceny subiektywnej danego języka programowania względem innego, np. C może być oceniany jako język niskiego poziomu przez osoby programujące w języku Java.

Kod maszynowy

[edytuj | edytuj kod]
Przedni panel minikomputera PDP-8/E. Rząd przełączników (u dołu) wykorzystywany jest do przełączania w języku maszynowym programu

Kod maszynowy jest jedynym językiem, który komputer może przetwarzać i wykonywać bezpośrednio, bez konieczności wcześniejszej transformacji kodu. Obecnie programiści praktycznie w ogóle nie piszą programów w kodzie maszynowym, gdyż wymaga on zwracania uwagi na liczne szczegóły, które w językach wysokopoziomowych są obsługiwane automatycznie. Ponadto wymagane jest zapamiętywanie bądź wyszukiwanie kodów liczbowych dla każdej instrukcji, a modyfikacja kodu jest bardzo trudna.

Rzeczywisty kod maszynowy jest strumieniem surowych, zwykle binarnych danych. Programista, piszący w „kodzie maszynowym” zazwyczaj dokonuje kodowania danych oraz instrukcji w nieco bardziej czytelnej formie, np. w systemie dziesiętnym, ósemkowym, lub heksadecymalnym, który jest tłumaczony na wewnętrzny format przez stosowny program (ang. loader) lub też wprowadzany do pamięci komputera za pomocą panelu przedniego.

Pomimo iż niewiele programów napisanych jest w języku maszynowym, programiści często opanowują jego czytanie poprzez pracę ze zrzutami pamięci lub poprzez debuggowanie za pomocą przedniego panelu[2].

Przykład: funkcja zaprezentowana w heksadecymalnej postaci 32-bitowego x86 kodu maszynowego, obliczająca n-ty wyraz ciągu Fibonacciego:

8B542408 83FA0077 06B80000 0000C383
FA027706 B8010000 00C353BB 01000000
C9010000 008D0419 83FA0376 078BD98B
B84AEBF1 5BC3

Zobacz też

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]
  1. Kott, Ryszard K., i Krzysztof Walczak. Programowanie w języku Fortran 77. Wydawnictwa Naukowo-Techniczne, 1991, str. 14
  2. What is machine code (machine language)? - Definition from WhatIs.com [online], whatis.techtarget.com [dostęp 2017-11-24] (ang.).