Машинен език: Разлика между версии

Изтрито е съдържание Добавено е съдържание
м Премахнати редакции на 94.26.6.55 (б.), към версия на Ket
м замяна с n-тире; козметични промени
Ред 4:
[[Машинна инструкция|Инструкциите]] са последователности от [[бит (информатика)|битове]] с различни модели на ползване на паметта, които съответстват на различните команди.
 
Всеки модел процесор или клас/семейство процесори има свой собствен [[набор от инструкции]] на машинен език, въпреки че има доста голямо застъпване между тях<ref>{{Цитат уеб| уеб_адрес= http://fmi.wikidot.com/karh4| заглавие= Лекциите на ФМИ: Инструкции - формати, операции, групи инструкции и формати на данните|достъп_дата = 8 август 2016|фамилно_име= |първо_име= |дата= |труд= |издател= |език= |цитат= }}</ref>. Често последващите или производни модели процесори включват основния набор на предшестващите модели, допълнен с други инструкции. Ако процесорът "А" разбира пълния език на процесора "Б", то казваме, че "А" е съвместим с "Б". "Б" може и да не е съвместим с "А", тъй като "А" може да използва някои команди, които "Б" не може. Случва се следващ модел да премахне или да промени коренно кода на някои инструкции (например необходими за други задачи), което се отразява на съвместимостта; но дори и напълно съвместими процесори могат да имат различия в работата на някои от инструкциите. Компютърните системи се различават и по други елементи, например организация на паметта, операционна система и периферни устройства. Тъй като изпълняваната програма зависи от тези фактори, различните системи като правило не изпълняват един и същ машинен код, макар че използват един и същ процесор.
 
Някои машинни езици отделят за всички свои команди един и същ брой битове, т.е. инструкциите имат еднаква дължина, но при други това не е така. Това силно зависи от конкретната архитектура и типа на инструкциите. Повечето от тях имат едно или повече полета [[opcode]], в които е дефиниран основният тип на инструкцията (аритметична, логическа, за предаване на управлението и др.) и конкретната операция (например събиране или сравнение) и други полета, определящи вида на [[операнд]]ите, метода на адресиране или самата действителна стойност.<ref>{{cite web|url=http://programmedlessons.org/AssemblyTutorial/Chapter-11/ass11_2.html|title=Immediate Operand|author=Bradley Kjell; kjell at ieee dot org|publisher=}}</ref>
 
Не всички машини или инструкции имат изрично посочени операнди, а те варират според различните модели на паметта в инструкциите. При първите процесори е използван моделът с „един акумулатор“ (или регистър) (Accumulator architecture) и операнд и резултат се комбинират в един регистър за повечето аритметични инструкции (т.е. инструкцията е еднооперандна, като вторият операнд е премълчан). Други процесорни архитектури (например [[8086]] и семейството [[x86]]) използват модел с „разширен акумулатор“ (Register - Memory architecture) с малък брой регистри с къси имена на единия вход. Моделът с „вътрешен стек“ (Stack architecture) използва стек вместо регистър, с който процесорът работи непрекъснато. Инструкциите отново са еднооперандни, подобно на акумулаторния модел, но тук могат да бъдат запаметени повече променливи. Всяка променлива, както и междинните резултати, се запомнят във върха на стека. Специалните инструкции също често нямат изрично посочени операнди. При генерирането на машинен код е съществено да се различават експлицитните и имплицитните операнди.
 
== Програми ==
Ред 18:
[[Асемблер]]ните езици използват сложни команди, за да се позовават на машинните команди. Тази по-четлива интерпретация на машинния език се нарича асемблерен език и се състои от числа и прости думи, докато машинният код е съставен само от числа, обикновено представени в [[двоична бройна система|двоична]] или [[шестнадесетична бройна система]].
 
Например на процесора Zilog Z80 машинния код <code>00000101</code> казва на процесора да намали с единица [[процесорен регистър|процесорния регистър]] <code>B</code>. На асемблерен език това би изглеждало така <code>DEC B</code>.
== Специални ли са машинните езици? ==