Видове инструкции на асемблерен език: пълно ръководство

Последна актуализация: Май 7 2025
Автор: TecnoDigital
  • Асемблерен език организира инструкциите си по предназначение: трансфер, изчисление, управление на потока и други.
  • Всяка инструкция се състои от опкод и операнди, с различни формати в зависимост от архитектурата.
  • Има няколко режима на адресиране за достъп до данни, като например незабавен, директен и индиректен.

асемблер Машинен език и формат на инструкциите

Асемблерен език е един от основните стълбове на разработката на софтуер от самото начало на компютърните науки. Въпреки че езиците за програмиране от високо ниво доминират днес, асемблерът остава широко използван и актуален в среди, където хардуерният контрол, оптимизацията или ограниченията на ресурсите са приоритет.

В тази статия ще се задълбочим във видовете инструкции на асемблерен език, като анализираме тяхната структура, предназначение, режими на адресиране и как са организирани в различните архитектури. Ще намерите също примери, формати и подробен преглед, който ще ви позволи да разберете напълно логиката зад тези инструкции, които работят в тясно сътрудничество с хардуера.

Какво е инструкция на асемблерен език?

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

Тези инструкции са силно зависими от архитектурата на процесора, така че всеки тип процесор (независимо дали е x86, ARM, MIPS и други) има свой собствен набор от инструкции със специфичен синтаксис и възможности.

Структура на инструкция

Инструкциите обикновено се състоят от две части:

  • Код на операцията (опкод): Показва действието, което трябва да се изпълни, като например добавяне, преместване на данни, сравняване и др.

Операндите предоставят информацията, необходима за извършване на операцията, и могат да се съхраняват в регистри, памет или да бъдат константи. Не всички инструкции изискват операнди и в някои случаи те могат да бъдат имплицитно включени в инструкцията или да се съхраняват в предварително дефинирани регистри.

Видове инструкции на асемблерен език

В зависимост от функционалността, която изпълняват в рамките на програмата, инструкциите на асемблерен език могат да бъдат класифицирани в няколко групи. Най-подходящите от тях са описани подробно по-долу:

1. Инструкции за прехвърляне на данни

Тези инструкции позволяват копирането на данни от едно място на друго, без да се променя съдържанието им в източника. Те са от съществено значение за преместването на информация между регистри, памет и периферни устройства.

  Redux JS: Пълното ръководство за разбиране и овладяване на Redux

Някои от най-често срещаните инструкции в тази група са:

  • MOV: Копира съдържанието на един операнд в друг. Например, MOV AX, BX копирайте съдържанието на BX в AX.
  • MOVS / MOVSB ​​​​/ MOVSW: Премества низове от адрес на източник (SI) към адрес на местоназначение (DI), автоматизирайки процеса на прехвърляне.
  • LODS / LODSB / LODSW: Зарежда стойност от адреса, посочен от регистъра SI, в акумулатора (AL или AX).
  • ПРОЧЕТЕТЕ: Зарежда ефективен адрес вместо стойността. Полезно за получаване на адреса на променлива или структура.

2. Инструкции за батерията

Стекът е LIFO (последен влязъл, първи излязъл) структура, използвана за временно съхраняване на данни, предаване на параметри или запазване на контекста на изпълнение.

  • БУТАНЕ: Запазва стойност в стека, като намалява SP показалеца.
  • POP: Извлича най-скорошната стойност, съхранена в стека, като увеличава SP.
  • НАТИСКАНЕ / ИЗКЛЮЧВАНЕ НА ПЪЛНА ... Те съхраняват и извличат състоянието на флаговете на процесора в стека.

3. Аритметични и логически инструкции

Те позволяват извършването на изчисления и операции с битове. Тези инструкции са от съществено значение за манипулирането на числови данни и вземането на решения в хода на програмата.

Сред най-използваните откриваме:

  • ДОБАВИ / ПОДПИСА: Събиране и изваждане.
  • МУЛ / ИМУЛ: Двоични умножения.
  • DIV / IDIV: Деление (цяло число или със знак).
  • И / ИЛИ / XOR / НЕ: Побитови логически операции.
  • ШЛ / ШР / РОЛ / РОР: Битови премествания и завъртания.

4. Инструкции за управление на потока

Те ви позволяват да променяте последователността на изпълнение на програмата , въвеждайки скокове или условни и безусловни извиквания на други инструкции.

  • JMP: Безусловно прескача към друг адрес в програмата.
  • ОБАЖДАНЕ / ВРЪЩАНЕ: Извикване на подпрограма и връщане.
  • JE/JNE/JG/JL/JZ/JNZ: Условни преходи, те се изпълняват, ако са изпълнени определени условия (след сравнение).

5. Входно/изходни (I/O) инструкции

Те позволяват комуникацията между процесора и външни устройства. Тези инструкции позволяват четенето и записването на данни към/от портове (хардуер).

  • В: Чете данни от входен порт.
  • ВЪН: Изпраща данни към изходен порт.

6. Инструкции с плаваща запетая

Много процесори имат математически копроцесори (или специални инструкции), предназначени за работа с десетични (с плаваща запетая) числа. Тези инструкции позволяват операции като:

  • Събиране, изваждане, умножение и деление на реални числа.
  • Тригонометрични операции (синус, косинус, тангенс).
  • Логаритмични, експоненциални и коренови операции.
  Какви са задълженията на уеб администратора?

Тези инструкции обикновено отговарят на стандарта IEEE 754 за числена прецизност.

Режими на адресиране

Основна част от дизайна на инструкциите е как се идентифицира местоположението на операндите. Режимите на адресиране определят как процесорът осъществява достъп до данни.

1. Незабавно адресиране

Данните се включват директно в инструкцията. Бързо е, но не позволява промяна на стойности без промяна на инструкцията.

MOV AX, 5

2. Директно адресиране

Адресът на паметта, съдържащ данните, е посочен изрично.

MOV AX, 

3. Косвено адресиране

Ефективният адрес се получава от съдържанието на запис. Много гъвкав и се използва за структури и свързани списъци.

MOV AX, 

4. Индексирано адресиране

Адресът се изчислява чрез добавяне на база и индекс (например, за обхождане на масиви). Използват се специални регистри като SI, DI или регистри база + отместване.

MOV AX, 

Формати на инструкции: различни видове в зависимост от архитектурата

Структурата на инструкцията може да варира в зависимост от архитектурата. Често срещани формати включват:

4-посочен формат

Включва два операнда, местоположение на резултата и адрес на следващата инструкция. Вече е остарял поради своята сложност.

3-посочен формат

Той определя два операнда и адрес на местоназначение. Често срещан е в съвременните RISC архитектури.

2-посочен формат

Използвайте операнд източник и операнд местоназначение (местоназначението също може да допринесе със стойност). Популярно при x86 и други CISC архитектури.

Еднопосочен формат

Указва се само един операнд; другият се приема за акумулатор. Често срещано при по-стари процесори и прости системи.

0-адресен формат (базиран на стек)

Операциите използват стека за извличане и съхраняване на операнди и резултати. Много ефективно за машини, базирани на стек, като например някои програмируеми калкулатори.

Макро инструкции и псевдо-опкодове

За да подобрят производителността, много асемблери предлагат макро инструкции , които разширяват един ред в няколко действителни инструкции. Те са полезни за избягване на повтарящи се сложни модели или за създаване на структури от високо ниво, като цикли или условни оператори.

Лос псевдо-опкодове Те са инструкции, които асемблерът превежда вътрешно в реална поредица от инструкции. Например, NOP (без операция) може да се преведе като XCHG AX, AX на x86 процесор.

  Пълно ръководство за абонаменти за Visual Studio

Директиви на асемблера

Директивите ( наричани още псевдооперации ) не са инструкции в тесния смисъл на думата. Те служат за контрол на процеса на асемблиране, дефиниране на данни, секции от код, макроси, условия за компилация и др.

Често срещаните примери включват:

  • .данни / .код: Те показват секцията с данни или код.
  • .org: Задава адреса, от който ще започне сглобяването.
  • .equ: Дефинира символни константи.

Случаи на употреба на асемблерен език

Въпреки възхода на езиците за програмиране от високо ниво, асемблерен език остава ключов в няколко области:

  • Разработка на вградени системи и микроконтролери.
  • Програмиране на драйвери, буутлоудъри и BIOS.
  • Екстремна оптимизация в приложения като видеоигри или криптография.
  • Обратно инженерство, дебъгване и хакерство на ниско ниво.

Освен това, обучението по асемблерен език все още заема важно място в специалностите компютърни науки и електроника, тъй като предоставя задълбочено разбиране за това как работи процесорът, как се съхраняват и манипулират данните и как се изпълняват инструкциите на двоично ниво.

Разбирането на всички видове асемблерни инструкции, тяхната структура, функционалност и режими на адресиране осигурява солидна основа за всеки програмист, който иска да се задълбочи в програмирането на ниско ниво или да разбере как езиците за програмиране на високо ниво в крайна сметка се превеждат в машинен код. Въпреки че употребата му е станала по-специфична, той остава основен инструмент в множество критични области на разработването на софтуер и системи.

асемблерен език
Свързана статия:
Всичко за асемблерния език: какво представлява и как работи