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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  Какво е HTML и за какво се използва?

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

  • 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. Инструкции с плаваща запетая

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

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

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

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

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

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 процесор.

  Vibe кодиране: какво е, как работи и неговите ограничения

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

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

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

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

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

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

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

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

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

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