Введение в Ассемблер

Введение в Ассемблер

1 Системы счисления

Память в компьютере состоит из чисел. В памяти компьютера эти числа не хранятся

в десятичном виде (с основанием 10). Поскольку это значительно упрощает

оборудование, компьютеры хранят всю информацию в двоичном (базовом 2) формате.

Сначала рассмотрим десятичную систему счисления.

1.1.1 Десятичный

Базовые 10 чисел состоят из 10 возможных цифр (0–9). Каждая цифра

числа имеет степень 10, связанную с ней, в зависимости от ее позиции в

числе. Например:

234 = 2 × 102 + 3 × 101 + 4 × 100

1.1.2 Двоичный

Числа с основанием 2 состоят из 2 возможных цифр (0 и 1). Каждая цифра

числа имеет

номер. (Один степень двойки, связанная с ним на основе его позиции в двоичной цифре, называется битом.) Например:

110012 = 1 × 24+ 1 × 23+ 0 × 22 + 0 × 21 + 1 × 20

= 16 + 8 + 1

= 25

Это показывает, как двоичное можно преобразовать в десятичное. В таблице 1.1 показано, как

первые несколько чисел представлены в двоичном формате.

На рисунке 1.1 показано, как отдельные двоичные цифры (т.е. биты).

Вот пример: ГЛАВА 1 ВВЕДЕНИЕ

Таблица данных
Стол 1.1: Десятичный от 0 до 15 в двоичном формате

Бинарное сложение Рисунок 1.1: Бинарное сложение (c означает нести)

110112

+ 100012

1011002

Если учесть следующую десятичную дробь разделение:

1234 ÷ 10 = 123 р 4

он может видеть, что это деление удаляет крайнюю правую десятичную цифру

числа и сдвигает остальные десятичные цифры на одну позицию вправо. При

делении на два выполняется аналогичная операция, но для двоичных цифр числа.

Рассмотрим следующее двоичное деление1:

11012 ÷ 102 = 1102 р 1

Этот факт можно использовать для преобразования десятичного числа в его эквивалентное

двоичное представление, как показано на рисунке 1.2. Этот метод находит в первую очередь

крайнюю правую цифру, эта цифра называетсянаименее значимый бит (лсб). Самая левая

цифра называетсясамый значительный бит (msb). Базовая единица памяти состоит из 8 бит и

называетсябайт.

1Нижний индекс 2 используется, чтобы показать, что число представлено в двоичном, а не десятичном виде.

Десятичное преобразование
Рисунок 1.2: Десятичное преобразование
Введение в Ассемблер-4
Рисунок 1.3:

 

 

 

 

 

 

1.1.3 Шестнадцатеричный

В шестнадцатеричных числах используется основание 16. Шестнадцатеричные (или шестнадцатеричный для краткости) жестяная банка

использоваться как сокращение для двоичных чисел. В шестнадцатеричной системе 16 возможных

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

дополнительных цифр после 9. По соглашению, для этих дополнительных цифр используются буквы.

16 шестнадцатеричных цифр – это 0-9, затем A, B, C, D, E и F. Цифра A эквивалентна 10 в десятичной

системе счисления, B – 11 и т. Д. Каждая цифра шестнадцатеричного числа имеет степень 16,

связанную с Это. Пример:

2BD16 = 2 × 162 + 11 × 161 + 13 × 160

= 512 + 176 + 13 =

701

Для преобразования из десятичного числа в шестнадцатеричный используйте ту же идею, что и для

двоичного преобразования, за исключением деления на 16. См. Пример на рисунке 1.3.

Причина, по которой шестнадцатеричный формат полезен, заключается в том, что существует очень простой способ конвертировать между шестнадцатеричным и двоичным. Двоичные числа быстро становятся большими и громоздкими. Hex обеспечивает гораздо более компактный способ представления двоичного кода. Чтобы преобразовать шестнадцатеричное число в двоичное, просто преобразуйте каждую шестнадцатеричную цифру в 4-битное двоичное число. Например, 24D16 преобразуется в 0010 0100 11012. Обратите внимание, что ведущие нули 4-х битов важны! Если ведущий ноль для средней цифры 24D16 не используется результат неверный. Преобразование из двоичного в шестнадцатеричное так же просто. Один делает процесс в обратном порядке. Перерабатывать каждый 4-битный сегмент двоичного файла в шестнадцатеричный. Начните с правого конца, а не с левого конца двоичного числа. Это гарантирует, что в процессе используются правильные 4-битные сегменты2.

Пример: 110 0000 6 0 0101 1010 5 А 0111 7 11102 E16 4-битное число называется полубайтом. Два полубайка составляют клев. Таким образом, каждая шестнадцатеричная цифра соответствует байтом, и поэтому байт может быть представлен 2-значное шестнадцатеричное число. Значение байта варьируется от 0 до 11111111 в двоичном формате, 0 в FF в шестнадцатеричном формате и от 0 до 255 в десятичном.

Компьютерная организация

Базовая единица памяти – байт. Компьютер с 32 мегабайтами

единицы килобайт ( 210 = памяти может содержать примерно 32 миллиона байтов информации. Каждый байт в

1, 024 байты), мегабайты память помечена уникальный номер, известный как его адрес как на Рисунке 1.4.

Ассемблер
Рисунок 1.4: объем памяти Адреса

 

 

Часто память используется большими кусками, чем отдельные байты. В

архитектуре ПК этим большим разделам памяти даны имена, как показано в

таблице 1.2.

Все данные в памяти числовые. Персонажи сохраняются с помощьюкод символа

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

символов известен какASCII (Американский стандартный код для обмена информацией).

Новый, более полный код, заменяющий ASCII, – это Unicode. Одно ключевое различие

между двумя кодами заключается в том, что ASCII использует

2Если неясно, почему начальная точка имеет значение, попробуйте преобразовать пример,

начиная с левого.

Таблица 1.2: Единицы памяти1
Таблица 1.2: Единицы памяти

 

 

 

один байт для кодирования символа, но Unicode использует два байта (или слово) на

персонаж. Например, ASCII отображает байт 4116 (6510) к персонажу

столица А; Unicode отображает слово 004116. Поскольку ASCII использует байт,

он ограничен 256 различными символами.3. Unicode расширяет ASCII val-

Используется для слов и позволяет отображать гораздо больше символов.

Это важно для представления символов всех языков мира.

введение в Ассемблер78

1.2.2 ЦП

Центральный процессор (ЦП) – это физическое устройство, выполняющее

инструкции. Инструкции, которые выполняет ЦП, обычно очень просты. Инструкции

могут требовать, чтобы данные, с которыми они работают, находились в специальных

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

в регистрах намного быстрее, чем к данным в памяти. Однако количество регистров в ЦП

ограничено, поэтому программист должен позаботиться о том, чтобы в регистрах

сохранялись только текущие данные.

Инструкции, которые выполняет тип ЦП, составляют машинный язык. Машинные

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

Инструкции на машинном языке кодируются как необработанные числа, а не в удобных

текстовых форматах. ЦП должен иметь возможность очень быстро расшифровывать

назначение инструкции, чтобы работать эффективно. Машинный язык разработан с

учетом этой цели, чтобы люди не могли его легко расшифровать. Программы,

написанные на других языках, должны быть преобразованы в собственный машинный

язык ЦП для запуска на компьютере. Акомпилятор ˇˇˇˇˇˇˇэто программа, которая переводит

программы, написанные на языке программирования, на машинный язык определенной

компьютерной архитектуры. В общем, у каждого типа ЦП есть свой уникальный

машинный язык. Это одна из причин, почему программы, написанные для Mac, не могут

работать на ПК типа IBM.

Компьютеры используют Часы для синхронизации выполнения инструкций. ГГцозначает гигагерц

Тактовые импульсы с фиксированной частотой (известной как Тактовая частота). Когда ты или один миллиард циклов на

купите компьютер 1,5 ГГц, 1,5 ГГц – это частота этих часов. Часывторой. ЦП с тактовой частотой 1,5 ГГц

не отслеживает минуты и секунды. Он просто бьет с постояннойимеет 1,5 миллиарда тактовых импульсов

темп. Электроника процессора использует биения для выполнения своих операций.в секунду.

правильно, например, как удары метронома помогают играть музыку в

правильном ритме. Количество ударов (или как их обычно называютциклы)

Требуемые инструкции зависят от поколения и модели ЦП. Количество

циклов зависит от предшествующих инструкций, а также других факторов.

1.2.3 Семейство процессоров 80×86

ПК типа IBM содержат процессор из семейства Intel 80×86 (или его клон).

Все процессоры этого семейства имеют некоторые общие особенности,

включая базовый машинный язык. Однако новые члены значительно

расширяют возможности.

8088 8086: Эти процессоры с точки зрения программирования идентичны. Они были

процессорами, которые использовались в самых ранних ПК. Они предоставляют

несколько 16-битных регистров: AX, BX, CX, DX, SI, DI, BP, SP, CS, DS, SS, ES, IP, FLAGS.

Они поддерживают только до одного мегабайта памяти и работают только в

реальный режим. В этом режиме программа может обращаться к любому адресу

памяти, даже к памяти других программ! Это очень затрудняет отладку и

безопасность! Также программная память должна быть разделена насегменты.

Каждый сегмент не может быть больше 64К.

80286: Этот процессор использовался в ПК класса AT. Добавлены новые инструкции

к базовому машинному языку 8088/86. Однако его главная новая функция –16-

битный защищенный режим. В этом режиме он может получить доступ к 16

мегабайтам и защитить программы от доступа к памяти друг друга. Однако

программы по-прежнему разделены на сегменты, размер которых не может

превышать 64К.

80386: Этот процессор значительно улучшил 80286. Во-первых, он расширяет многие из

регистры для хранения 32-бит (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP) и

добавляет два новых 16-битных регистра FS и GS. Он также добавляет новый

32-битный защищенный режим. В этом режиме он может получить доступ до

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

сегмент может иметь размер до 4 гигабайт!

80486 / Pentium / Pentium Pro: Эти члены семейства 80×86 добавляют

очень мало новых функций. В основном они ускоряют выполнение

инструкций.

Pentium MMX: Этот процессор добавляет MMX (MultiMedia eXentions)

инструкции к Pentium. Эти инструкции могут ускорить обычные

графические операции.

Pentium II: Это процессор Pentium Pro с инструкциями MMX.

добавлен. (Pentium III, по сути, просто более быстрый Pentium II.)

8086 16-битные регистры

Исходный процессор 8086 имел четыре 16-битных регистра общего

назначения: AX, BX, CX и DX. Каждый из этих регистров можно разложить

на два 8-битных регистра. Например, регистр AX можно разложить на

регистры AH и AL, как показано на рисунке 1.5. Регистр AH содержит 8

старших (или старших) битов AX, а AL содержит 8 младших битов AX. Часто

AH и AL используются как независимые однобайтовые регистры; однако

важно понимать, что они не независимы от AX. Изменение значения AX

изменит AH и AL инаоборот. Регистры общего назначения используются во

многих арифметических и перемещаемых данных.

Есть два 16-битных индексных регистра: SI и DI. Они часто используются

как указатели, но могут использоваться для многих из тех же целей, что и

общие регистры. Однако их нельзя разложить на 8-битные регистры.

16-битные регистры BP и SP используются для указания данных в стеке

машинного языка. Об этом мы поговорим позже.

16-битные регистры CS, DS, SS и ES сегментные регистры. Они обозначают,

какая память используется для разных частей программы. CS означает сегмент

кода, DS – сегмент данных, SS – сегмент стека и ES – дополнительный сегмент. ES

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

регистрах представлена в разделах 1.2.6 и 1.2.7.

Регистр указателя инструкции (IP) используется с регистром CS для

отслеживания адреса следующей инструкции, которая должна быть выполнена

ЦП. Обычно, когда инструкция выполняется, IP продвигается, чтобы указать на

следующую инструкцию в памяти.

Регистр FLAGS хранит важную информацию о результатах предыдущей

инструкции. Эти результаты сохраняются в регистре как отдельные биты.

Например, бит Z равен 1, если результат предыдущей инструкции был равен нулю,

или 0, если не равен нулю. Не все инструкции изменяют биты в FLAGS, обратитесь к

таблице в приложении, чтобы увидеть, как отдельные инструкции влияют на

регистр FLAGS.

80386 32-битные регистры

Процессоры 80386 и более поздних версий имеют расширенные регистры. Например, 16-битный

регистр AX расширяется до 32-битного. Для обеспечения обратной совместимости AX по-прежнему

относится к 16-битному регистру, а EAX используется для обозначения расширенного

32-битный регистр. AX – это младшие 16 битов EAX, так же как AL – младшие 8

битов AX (и EAX). Нет возможности напрямую получить доступ к старшим 16

битам EAX.

Сегментные регистры в 80386 по-прежнему 16-битные. Также есть два

новых сегментных регистра: FS и GS. Их имена ничего не значат. Это

дополнительные временные сегментные регистры (например, ES).

Одно из определений термина слово относится к размеру регистров

данных ЦП. Для семейства 80×86 этот термин теперь немного сбивает с толку. В

таблице 1.2 видно, чтослово определяется как 2 байта (или 16 бит). Это

значение было придано, когда впервые был выпущен 8086. Когда был

разработан 80386, было решено оставить определениеслово без изменений,

хотя размер регистра изменился.

Реальный режим

В реальном режиме объем памяти ограничен всего одним мегабайтом (220 байтов). Действительный

предел диапазон адресов от (в шестнадцатеричном формате) от 00000 до FFFFF. Эти адреса требуют

BIOS 20-битное число.

Очевидно, что 20-битное число не впишется ни в одно из

потребовались некоторые из 1M 16-битные регистры 8086. Intel решила эту проблему, используя два 16-битных значения

устройства, такие как видео определить адрес. Первое 16-битное значение называетсяселектор. Селектор

для своего кода и для жестких

экран. значения должны храниться в сегментных регистрах. Второе 16-битное значение называетсяo

ff установить. Физический адрес, на который ссылается 32-битный селектор: o ff установить

пара вычисляется по формуле

16 *

16 * селектор + o ff установить

Умножить на 16 в шестнадцатеричном формате легко, просто добавьте 0 справа от числа. Например,

физические адреса, на которые ссылается 047C: 0048, задаются следующим образом:

047C0

+ 0048

04808

Фактически, значение селектора – это номер абзаца (см. Таблицу 1.2).

У реальных сегментированных адресов есть недостатки:

Одно значение селектора может ссылаться только на 64 КБ памяти (верхний

предел установленного 16-битного значения). Что делать, если в программе более

64 КБ кода? Одно значение в CS не может использоваться для всего выполнения

программы. Программа должна быть разбита на разделы (называемые

сегменты) размером менее 64 КБ. Когда выполнение переходит от одного

сегмента к другому, значение CS должно быть изменено. Подобные

проблемы возникают с большими объемами данных и регистром DS. Это

может быть очень неудобно!

Каждый байт в памяти не имеет уникального сегментированного адреса. На

физический адрес 04808 можно ссылаться как на 047C: 0048, 047D: 0038, 047E:

0028 или 047B: 0058. Это может усложнить сравнение сегментированных

адресов.

16-битный защищенный режим

В 16-битном защищенном режиме 80286 значения селектора интерпретируются совершенно иначе, чем в реальном режиме. В реальном режиме значение селектора – это номер абзаца физической памяти. В защищенном режиме значением селектора являетсяпоказатель в таблица дескрипторов. В обоих режимах программы разделены на сегменты. В реальном режиме эти сегменты занимают фиксированные позиции в физической памяти, а значение селектора обозначает номер абзаца в начале сегмента. В защищенном режиме сегменты не занимают фиксированных позиций в физической памяти. На самом деле, они вовсе не обязательно должны быть в памяти! В защищенном режиме используется метод, называемый виртуальная память. Основная идея системы виртуальной памяти состоит в том, чтобы хранить в памяти только те данные и код, которые программы в настоящее время используют. Остальные данные и код временно хранятся на диске до тех пор, пока они снова не понадобятся. В 16-битном защищенном режиме сегменты перемещаются между памятью и диском по мере необходимости. Когда сегмент возвращается в память с диска, весьма вероятно, что он будет помещен в другую область памяти, в которой он находился до перемещения на диск. Все это прозрачно делает операционная система. Чтобы виртуальная память работала, программу не нужно писать по-другому.

В защищенном режиме каждому сегменту назначается запись в таблице

дескрипторов. В этой записи содержится вся необходимая системе информация о

сегменте. Эта информация включает: находится ли она в памяти в данный момент;

если в памяти, то где это; права доступа (например, только для чтения). Индекс

записи сегмента – это значение селектора, которое хранится в регистрах сегмента.

Одним из больших недостатков 16-битного защищенного режима является то, что устройства по-прежнему не работают. Один хорошо известный ПК

16-битные величины. Вследствие этого размеры сегментов по-прежнему ограниченыобозреватель назвал 286

максимум 64К. Это делает проблематичным использование больших массивов!

CPU «мозг мертв».

32-битный защищенный режим

В 80386 введен 32-битный защищенный режим. Есть два основных различия между

386 32-битными и 286 16-битными защищенными режимами:

1. Наборы O ff расширяются до 32-битных. Это позволяет устанавливать диапазон до 4

миллиардов. Таким образом, сегменты могут иметь размер до 4 гигабайт.

Сегменты можно разделить на более мелкие блоки размером 4K, которые называются страниц.

Система виртуальной памяти теперь работает со страницами, а не с сегментами. Это

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

16-битном режиме 286 либо весь сегмент находится в памяти, либо нет ни одного. Это

нецелесообразно с сегментами большего размера, которые допускаются в 32-битном режиме.

В Windows 3.x, стандартный режим относится к 286 16-битному защищенному режиму и

расширенный режим относится к 32-битному режиму. Windows 9X,

Windows NT / 2000 / XP, OS / 2 и

Linux работают в выгружаемом 32-битном защищенном режиме.

Прерывания

Иногда обычный поток программы должен быть прерван для обработки событий,

требующих быстрого реагирования. Аппаратное обеспечение компьютера обеспечивает

механизм, называемыйпрерывает для обработки этих событий. Например, когда мышь

перемещается, оборудование мыши прерывает текущую программу, чтобы обработать

движение мыши (чтобы переместить курсор мыши,так далее.) Прерывания вызывают

передачу управления в обработчик прерывания. Обработчики прерываний – это

процедуры, обрабатывающие прерывания. Каждому типу прерывания присваивается

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

содержащие сегментированные адреса обработчиков прерываний. Номер прерывания,

по сути, является индексом в этой таблице.

Внешние прерывания возникают извне CPU. (Примером этого типа является мышь.)

Многие устройства ввода-вывода вызывают прерывания (например, клавиатура, таймер,

дисководы, CD-ROM и звуковые карты). Внутренние прерывания возникают изнутри ЦП либо

из-за ошибки, либо из-за инструкции прерывания. Прерывания по ошибке также называются

ловушки. ˇˇˇˇˇˇˇПрерывания, сгенерированные из инструкции прерывания, называются

программные прерывания. DOS использует эти типы прерываний для реализации своего API

(интерфейса прикладного программирования). Более современные операционные системы

(такие как Windows и UNIX) используют интерфейс на основе C.4

Однако они могут использовать интерфейс более низкого уровня на уровне ядра.

Язык ассемблера

Ассемблера язык

Язык ассемблера- Машинный язык.

Каждый тип ЦП понимает свой машинный язык. Инструкции на машинном

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

уникальный числовой код, который называется еекод операции или код операции

для краткости. Инструкции процессора 80×86 различаются по размеру. Код операции

всегда находится в начале инструкции. Многие инструкции также включают данные (

например, константы или адреса), используемые инструкцией.

Машинный язык очень сложно программировать напрямую. Расшифровка

значений команд с числовым кодом утомительна для людей. Например,

инструкция, которая говорит, что нужно сложить регистры EAX и EBX вместе и

сохранить результат обратно в EAX, кодируется следующими шестнадцатеричными

кодами: C3

Вряд ли это очевидно. К счастью, программа под названиемассемблер может сделать эту

утомительную работу для программиста.

Программа на ассемблере хранится в виде текста (как и программа на языке

более высокого уровня). Каждая инструкция по сборке представляет собой ровно

одну машинную инструкцию. Например, описанная выше инструкция сложения

будет представлена на языке ассемблера как:

добавить eax, ebx

Здесь смысл инструкции много понятнее, чем в машинном коде. Слово

Добавить это мнемонический для инструкции по сложению. Общая форма

инструкции по сборке:

мнемонический операнд (ы)

An ассемблер это программа, которая читает текстовый файл с инструкциями сборки и преобразует сборку в машинный код. Компиляторы – это программы, которые делают аналогичные преобразования для языков программирования высокого уровня. Ассемблер намного проще компилятора. Каждое выражение на ассемблере

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

Еще одно важное отличие ассемблера от языков высокого уровня компилятор!

состоит в том, что, поскольку каждый тип ЦП имеет свой собственный машинный язык,

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

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

уровня.

В примерах в этой книге для краткости используется Netwide Assembler или

NASM. Он находится в свободном доступе в Интернете (см. Предисловие к URL-

адресу). Более распространенными ассемблерами являются Ассемблер Microsoft

(MASM) или Ассемблер Borland (TASM). Есть некоторые различия в синтаксисе

сборки для MASM / TASM и NASM.

Операнды инструкции

Команды машинного кода имеют различное количество и тип операндов;

однако, как правило, каждая инструкция будет иметь фиксированное количество

операндов (от 0 до 3). Операнды могут иметь следующие типы:

регистр: Эти операнды относятся непосредственно к содержимому регистра ЦП.

терр.

объем памяти: Они относятся к данным в памяти. Адрес данных может быть

константа жестко запрограммирована в инструкции или может быть вычислена с

использованием значений регистров. Адрес всегда отключается с начала сегмента.

немедленный: Это фиксированные значения, которые перечислены в самой инструкции.

Они хранятся в самой инструкции (в сегменте кода), а не в сегменте

данных.

подразумевается: Там операнды явно не показаны. Например, в-

Инструкция Crement добавляет единицу в регистр или память. Подразумевается

одно.

Основные инструкции

Самая основная инструкция – это MOV инструкция. Он перемещает данные из

одного места в другое (как оператор присваивания в языке высокого уровня).

Требуется два операнда:

mov dest, src

Данные, указанные src копируется в dest. Одно ограничение состоит в том, что оба

операнда не могут быть операндами памяти. Это указывает на еще одну причуду

сборки. Часто существуют несколько произвольные правила использования

различных инструкций. Операнды также должны быть одинакового размера.

Значение AX не может быть сохранено в BL.

Вот пример (точка с запятой начинается с комментария):

ЯЗЫК АССЕМБЛЕРА

mov

mov

eax, 3

bx, топор

; сохранить 3 в регистр EAX (3 – непосредственный операнд);

сохранить значение AX в регистре BX

В ДОБАВИТЬ инструкция используется для добавления целых чисел.

Добавить

Добавить

eax, 4

ал, ах

; eax = eax + 4

; al = al + ah

В SUB инструкция вычитает целые числа.

суб

суб

bx, 10

bx = bx – 10

ebx, edi; ebx = ebx – edi

В INC а также DEC инструкции увеличивают или уменьшают значения на единицу.

Поскольку это неявный операнд, машинный код дляINC а также DEC является

меньше чем для эквивалента ДОБАВИТЬ а также SUB инструкции.

Директивы

А директива это артефакт ассемблера, а не процессора. Обычно они

используются либо для того, чтобы указать ассемблеру что-то сделать, либо для

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

Обычно директивы используются:

определить константы

определить память для хранения данных в

группировать память в сегменты

условно включить исходный код

включить другие файлы

Код NASM проходит через препроцессор так же, как C. Он имеет многие

из тех же команд препроцессора, что и C. Однако директивы

препроцессора NASM начинаются с% вместо #, как в C.

Директива equ

В равно директива может использоваться для определения условное обозначение. Символы – это

именованные константы, которые можно использовать в программе сборки. Формат:

условное обозначение равно ценить

Значения символов могут нет будет изменено позже.

Введение в Ассемблер-13
Таблица 1.3: Буквы для RESX а также DX Директивы

 

 

 

 

 

 

Директива% defne

Эта директива похожа на C #определять директива. Чаще всего он используется для

определения макросов констант, как и в C.

% определить РАЗМЕР 100

mov eax, РАЗМЕР

Приведенный выше код определяет макрос с именем РАЗМЕР и показывает его использование в MOV

инструкция. Макросы более гибкие, чем символы, в двух отношениях. Макросы можно

переопределять, и они могут быть не просто постоянными числами.

Директивы данных

Директивы данных используются в сегментах данных для определения места для

памяти. Есть два способа зарезервировать память. Первый способ только определяет

место для данных; второй способ определяет комнату и начальное значение. В первом

методе используется один изВИЭИкс директивы. ВИкс заменяется буквой, определяющей

размер объекта (или объектов), который будет сохранен. В таблице 1.3 показаны

возможные значения.

Второй метод (который также определяет начальное значение) использует один из

DИкс директивы. ВИкс буквы такие же, как в ВИЭИкс директивы.

приведено несколько примеров:

Введение в Ассемблер-22

Двойные и одинарные кавычки обрабатываются одинаково. Последовательные

определения данных последовательно сохраняются в памяти. То есть слово L2 сохраняется в

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

 

Следующая сатья -ЯЗЫК АССЕМБЛЕРА и попробуем написать программу.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *