Език за програмиране от ниско ниво

от Уикипедия, свободната енциклопедия

Езикът за програмиране на ниско ниво е език за програмиране, при който има малка или съвсем липсва абстракция от архитектурата на набора от инструкции на компютъра – команди или функции в езиковата карта, които са структурно подобни на инструкциите на процесора. Обикновено това е в сила или за машинен код, или за асемблерен език. Поради ниската степен (оттук и думата) на абстракция между разговорния и машинния език, езиците на ниско ниво понякога се описват като „близки до хардуера“. Програмите, написани на езици от ниско ниво, обикновено са относително непреносими, защото са оптимизирани за определен тип компютърна архитектура.[1]

Езиците от ниско ниво могат да се преобразуват в машинен код без компилатор или интерпретатор – езиците за програмиране от второ поколение използват по-прост процесор, наречен асемблер – и полученият код се изпълнява директно от процесора. Програма, написана на език от ниско ниво, може да бъде накарана да работи много бързо, с малко потребление на ресурси памет. Еквивалентна програма на език от високо ниво може да бъде по-малко ефективна и да използва повече памет. Езиците от ниско ниво са прости, но се считат трудни за използване, поради множество технически подробности, които програмистът трябва да запомни. За сравнение, езикът за програмиране от високо ниво изолира семантиката на изпълнение на компютърната архитектура от спецификацията на програмата, което опростява разработката.[1]

Машинен код[редактиране | редактиране на кода]

Преден панел на миникомпютър PDP-8/E. Редицата превключватели в долната част може да се използва за превключване към програма на машинен език.

Машинният код е единственият език, който компютърът може да обработва директно без предварителна трансформация. Понастоящем програмистите почти никога не пишат програми директно в машинен код, защото това изисква внимание към множество детайли, които езикът от високо ниво обработва автоматично.[1] Освен това изисква запаметяване или търсене на цифрови кодове за всяка инструкция и е изключително трудно да се модифицира.

Истинският машинен код е поток от необработени, обикновено двоични данни. Програмист, кодиращ в „машинен код“, обикновено кодира инструкции и данни в по-разбираем вид като десетична, осмична или шестнадесетична форма, която се превежда във вътрешен формат от програма, наречена зареждаща програма (loader), или се превключва в паметта на компютъра от предния панел.[1]

Въпреки че малко програми са написани на машинни езици, програмистите често успяват да ги разчитат, като работят с основни дъмпове (core dumps) или като отстраняват грешките чрез предния панел.

Пример за функция в шестнадесетично представяне на 32-битов x86 машинен код за изчисляване на n- то число на Фибоначи :

8B542408 83FA0077 06B80000 0000C383
FA027706 B8010000 00C353BB 01000000
B9010000 008D0419 83FA0376 078BD989
C14AEBF1 5BC3

Програмиране на ниско ниво при езици от високо ниво[редактиране | редактиране на кода]

В края на 60-те години езици на високо ниво като PL/S, BLISS, BCPL, разширен ALGOL (за големи системи на Burroughs) и C включват известна степен на достъп до функции за програмиране на ниско ниво. Един метод за това е вграденото асемблиране, в което асемблерен код е вграден в език от високо ниво, който поддържа тази функция. Някои от тези езици също позволяват зависещи от архитектурата директиви за оптимизация на компилатора, за да коригират начина, по който компилаторът използва архитектурата на целевия процесор.

Източници[редактиране | редактиране на кода]

  1. а б в г 3.1: Structure of low-level programs // Workforce LibreTexts. Посетен на 2023-04-03. (на английски)
  Тази страница частично или изцяло представлява превод на страницата Low-level programming language в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​