Язык ассемблера. Рабочие регистры и команды.

Язык ассемблера. Рабочие регистры и команды.

Xalion

В прошлой статье мы рассказали про язык нижнего уровня для процессора — язык ассемблера. Под разные процессоры создаются свои диалекты, потому
что архитектуры отличаются разрядностью, доступными регистрами
и способами использования системных вызовов ОС.

Системных вызовов мы касались в вводной статье про ОС.

Сегодня начнём изучение диалекта ассемблера NASM. Он работает на макОС, линукс и виндовс. Для виндовс, чаще пишут на его диалекте от майкрософт — MASM.

Поддержка операционками разных диалектов ассемблера


Среда разработки

Мы будем писать код в онлайн редакторе nasm по двум причинам:

  • Алгоритм компиляции и линковки на разных ОС отличается. Получится по три картинки на один фрагмент кода.
  • Для ассемблера нет оффлайновой приятной среды разработки.

В планах канала изучить терминал и его функционал, поэтому мы вспомним ассемблер в статьях про терминал.


Регистры

В языке ассемблера есть восемь специальных регистров для результатов команд: EAX, EBX, ECX, EDX, ESP EBP, ESI и EDI. В них можно записывать любые данные, но эти регистры перезаписываются командами. Объём регистров зависит от разрядности процессора. Мы будем писать код для 32хразрядных процессоров.

Сегодня пройдем первые четыре, в следующей статье — оставшиеся четыре.

EAX — буферный регистр
Хранит промежуточные данные при вычислениях. Его перезаписывают команда умножения и деления.
Он состоит из одного 16-битного регистра AX, он делится на два 8-битных куска: AH и AL.

EBX — хранилище адресов оперативки.
В регистре EBX обычно хранят адреса данных из оперативной памяти, но можно хранить любые другие данные. Состоит из 16-битного регистра BX, он делится на два 8-битных регистра BH и BL.

ECX — счётчик для циклов.
Цикл выполнил функцию или строчку один раз, из ECX вычитается единица. Если в ЕCX остаётся ноль — цикл закончен и программа идёт дальше.
Состоит из 16-битного регистра CX, он делится на два 8-битных регистра CH и CL.

EDX — для остатка от деления.
В языке ассемблера при делении, результат записывается в EAX, а остаток в EDX.
Если деление без остатка — в EDX ноль перезаписывается на ноль.
Состоит из 16-битного регистра DX, он делится на два 8-битных регистра DH и DL.


Команды

Для простейших операциий в ассемблере, нужно знать команды присвоения, арифметические команды, циклы и команды условных переходов.
Циклы и условные переходы, пройдем в следующих статьях про ассемблер.
В ассемблере не используются математические знаки, используются слова-сокращения на английском.

MOV — присвоение

Она работает с числами, регистрами и адресами памяти. Эта команда связанна с темой типов адресации в памяти.

ADD — сложение

После слова ADD, ставится первое слагаемое — туда запишется ответ. На второе место можно написать регистр, адрес или число.
Второе слагаемое — регистр: значение первого регитстра + значение второго
Второе слагаемое — адрес: значение первого + значение ячейки по адресу.
Второе слагаемое — число: значение первого + число.

SUB — вычитание

После слова SUB, ставится уменьшаемое — туда запишется ответ. На место вычитаемого можно написать регистр, адрес или число.

Вычитаемое — регистр: значение уменьшаемого – значение вычитаемого.
Вычитаемое — адрес: значение уменьшаемого – значение из ячейки по адресу.
Вычитаемое — число: значение уменьшаемого – число.

MUL — произведение

После слова MUL стоит только регистр и только один. Он умножается на значение из EAX и записывает его туда же, в EAX.

DIV — деление

После слова DIV стоит только регистр и только один. Он делит значение EAX на себя и записывает его туда же. Если есть остаток, он записывается в регистр остатка EDX.


В следующей статье разберём оставшиеся четыре регистра и их команды.

Report Page