Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Как сложить два числа в Ассемблере
Лучшие книги по Ассемблеру
Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее... |
Складывать числа в ассемблере не так уж и сложно. В подавляющем большинстве случаев это делается с помощью команды 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.
На этом пока всё. Подключайтесь к группе Основы программирования в Телеграм, или к другим каналам (ссылки ниже), чтобы ничего не пропустить.
Подписаться на канал в РУТуб
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |