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

Переменные и директивы в ассемблере

Переменные в ассемблере имеют другие типы данных, чем в языках программирования высокого уровня. Эти типы данных ранее назывались директивами. Тип данных должен быть указан в соответствии с соответствующим битовым значением. Например, определение 8-битной переменной hello, содержащей значение 10, будет выглядеть так: hello BYTE 10h. Первый операнд — это имя переменной, второй — директива, а третий — значение. Примечание: суффикс h означает, что значение находится в шестнадцатеричной форме.

Вот краткая таблица, иллюстрирующая имена типов переменных и соответствующие им значения в ассемблере:

DirectiveUsed ForBYTE8-битные целые числа без знакаSBYTE8-битные целые числа со знакомWORD16-битные целые числа без знакаSWORD16-битные целые числа со знакомDWORD32-битные целые числа без знакаSDWORD32-битные целые числа со знакомFWORD48-битные целые числаQWORD64-битные целые числаTBYTE80-битные целые числа

Инструкции по передаче данных

Когда дело доходит до инструкций по передаче данных, на ум сразу же приходит инструкция MOV, поэтому давайте рассмотрим, что она делает.

Инструкция MOV копирует данные из источника в пункт назначения или, другими словами, перемещает данные из одного места в другое. Примечание: эту инструкцию нельзя использовать для прямого перемещения данных с одного адреса памяти на другой. Для этого необходимо пройти регистрацию.

Инструкция MOVZX похожа на MOV с добавлением неиспользуемых битовых значений, расширяющихся до нуля. Это означает, что значение, такое как 10h, будет равно 00000010h после передачи данных с помощью MOVZX.

Инструкция MOVSX также очень полезна, поскольку ее можно рассматривать как противоположность MOVZX. Это связано с тем, что он добавляет 1 к любому значению, старший бит которого установлен больше 7. Например, F056h станет 1111F056h при передаче данных инструкции MOVSX.

Итак, давайте посмотрим на инструкцию MOV в действии! Чтобы переместить переменную hello из регистра EAX в регистр EBX, мы должны запустить: mov ebx eax. Просто, верно?

Заключительные примечания

Есть некоторые другие инструкции по передаче данных, которые мы не рассмотрели в этом посте, такие как LAHF и SAHF, но они требуют знания флагов состояния, что они собой представляют и как они работают. Поэтому вышеупомянутые темы будут освещены в следующем посте вместе с другими полезными инструкциями по сборке.

Ну вот и все на сегодня, надеюсь, этот обзор был вам полезен. Большое спасибо за прочтение моей статьи! Пожалуйста, не забудьте подписаться на меня в Twitter и Github, связаться со мной в LinkedIn и подписаться на мой канал YouTube.