test

test

Xalion

Сегодня начнем изучения диалекта ассемблера nasm. Он работает под маки, линукс и виндовс. Но чаще всего под виндовс пишут на его диалекте – masm от майкрософт.

Мы будем писать код в онлайн редакторе nasm для 32-битных систем по двум причинам. Для ассемблера нету красивых и функциональных IDE, как для языков верхнего уровня. Компиляция и линковка происходит через терминал на mac os и linux, и командную строку на виндовс.

Позже мы разберемся с терминалом и снова вернемся к ассемблеру. Тогда мы будем писать под 64 битные системы.

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

EAX – буферный регистр, он хранит промежуточные данные при вычислениях. Его перезаписывают команда умножения и деления.

Он состоит одного 16-битного регистра AX. Регистр AX делится на два 8-битных регистра AH и AL

В регистр eax помещается число до 4 294 967 296
2³² = 4 294 967 296

ECX – счётчик для циклов. После каждой итерации команда цикла loop вычитает из ECX единицу и проверяет: если ECX = 0, то цикл закончен, иначе цикл продолжается.

Он состоит из 16-битного регистра CX. Регистр CX делится на два 8-битных регистра CH и CL.

пикча

EDX – хранит остаток от деления. При делении чисел, они могут не разделиться целым числом. В таком случае остаток хранится в этом регистре, а целая часть в регистре EAX.

Он состоит из 16-битного регистра DX. Регистр DX делится на два 8-битных регистра DH и DL.

пикча

Чтобы занести данные в регистр используется команда mov.
Она работает с числами, регистрами и адресами памяти.

Чтобы складывать данные используется команда add. Первый операнд должен быть регистром, второй может быть регистром или числом.

Такие же пикчи как для мув.

Чтобы вычитать данные используется команда sub. Первый операнд – регистр, второй число или регистр.

Такие же пикчи как для мув.

Чтобы умножать данные используется команда mul. Первый операнд – регистр или число. Эта команда умножает регистр eax на переданный операнд. Результат сохраняется в eax.

Такие же пикчи.

Чтобы делить данные деления используется команда div. Первый операнд – регистр или число. Эта команда работает так же, как и mul. Отличие в остатке.
Если число не делится на цело, то остаток сохраняется в регистре edx.

Такие же пикчи.


Report Page