Главная / Ассемблер / Примеры (исходники) /

Как сложить два числа в Ассемблере


Лучшие книги по Ассемблеру Лучшие книги по Ассемблеру

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

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

Итак, первое, что нам надо помнить - это размер числа. Если мы складываем два числа, то размер результата может быть больше, чем размер регистра, в который помещается результат.

Второе - мы можем складывать и отрицательные числа. Следовательно, и результат может быть отрицательным.

И да - сложение положительного и отрицательного чисел - это, по сути, вычитание одного числа из другого. Хотя для вычитания в ассемблере есть команда SUB.

Команда ADD существует с незапамятных времён - ещё с процессора 8086. Поэтому она поддерживается и всеми последующими процессорами Интел и совместимыми.

Простейший пример использования:

MOV  AL, 3
ADD  AL, 2    ; AL = 3 + 2 = 5

Здесь мы сначала записали число 3 в регистр AL, а затем применили команду ADD для сложения числа в AL с числом 2. Результат записывается в нашем случае в AL. И там после выполнения команды будет число 5.

Но складывать можно не только значение в регистре с числом. Но и, например, значения двух регистров:

MOV  BX, 7
MOV  AX, 2
ADD  AX, BX   ; AX = 7 + 2 = 9

Также вместо регистров можно использовать память:

MOV  [110h], 3
ADD  [110h], 2  ; По адресу [110h] теперь хранится 5
MOV  AL, 1
ADD  AL, [110h] ; AL = 6

При работе с памятью, конечно, надо понимать, что находится по данному адресу и к каким последствиям может привести прямое обращение к памяти и изменение её содержимого. В данном примере на это мы внимания не обращаем. Это просто пример.

Складывать можно не только константы, регистры и память, но и переменные:

ADD  BL, MyVar
ADD  MyVar, 3

Не знаю, во всех ли ассемблерах это будет работать. Но в эмуляторе точно работает. Причём оба варианта. То есть можно записывать результат как в регистр, так и в переменную.

Есть ещё такая тема, как сложение с переносом. Но в этой статье рассматривать её не будет. Больше сведений об этом можно найти здесь.

И есть ещё такая вещь, как BCD-значения. Инструкции для работы с такими значениями: AAA, AAD, AAS, AAM.

На этом пока всё. Подключайтесь к группе Основы программирования в Телеграм, или к другим каналам (ссылки ниже), чтобы ничего не пропустить.



Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su