Что такое Ассемблер?

  Евгений Павлов  | 

  Обновл. 29 Янв 2023  | 

 79012

 ǀ   17 

Ассемблер — это транслятор (переводчик), который переводит код, написанный на языке ассемблера, в машинный язык.

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

Процессор понимает только инструкции машинного языка, которые являются последовательностью бит: 1 или 0. Однако машинный язык слишком сложен и непонятен для использования в разработке программного обеспечения. Поэтому для определенного семейства процессоров был разработан низкоуровневый язык, который представляет собой набор инструкций для написания программ в более понятной форме. Этот язык назвали языком ассемблера (или просто «ассемблер»).

Преимущества языка ассемблера

Использование языка ассемблера позволяет понять:

   как программы взаимодействуют с операционной системой, процессором и BIOS-м;

   как данные представлены в памяти и на других устройствах;

   как процессор получает доступ к инструкциям и как он их выполняет;

   как инструкции получают доступ к данным и как эти данные обрабатываются;

   как программа получает доступ к внешним устройствам.

Другие преимущества использования языка ассемблера:

   для работы требует мало памяти;

   его инструкции выполняются очень быстро;

   упрощает сложные аппаратные задачи.

Основные характеристики аппаратного обеспечения ПК


Основное аппаратное обеспечение ПК состоит из процессора, памяти и регистров. Регистры — это компоненты процессора, содержащие данные и их адреса в памяти. Чтобы выполнить программу, система копирует её с внешнего устройства в оперативную память. Затем процессор выполняет инструкции программы.

Данные в компьютере хранятся в битах: 1 (ВКЛ) или 0 (ВЫКЛ).

Процессор поддерживает следующие размеры данных:

   word — 2-байтовый элемент данных;

   doubleword — 4-байтовый (32-битный) элемент данных;

   quadword — 8-байтовый (64-битный) элемент данных;

   paragraph — 16-байтовая (128-битная) область;

   kilobyte — 1024 байт;

   megabyte — 1 048 576 байт.

Двоичная система счисления

Каждая система счисления использует позиционные обозначения разрядов чисел (их значений). Каждое следующее позиционное значение состоит из предыдущего позиционного значения, умноженного на 2 (именно на 2, так как это бинарная система, которая состоит из двух чисел). Если битом является 1, то позиционное значение умножается на 2, а если 0 — позиционное значение остается 0. В бинарной системе счисления отсчет ведется справа налево, а не слева направо (как в десятичной системе).

Например, в следующей таблице показаны позиционные значения 8-битного двоичного числа 11111101:

Бит 1 1 1 1 1 1 0 1
Позиционное значение 128 64 32 16 8 4 2 1
Номер бита 7 6 5 4 3 2 1 0

Значение бинарного числа равно сумме позиционных значений всех бит:

1 + 4 + 8 + 16 + 32 + 64 + 128 = 253

Двоичное 11111101 = десятичное 253.

Примечание: Детально о конвертации чисел из двоичной системы в десятичную и наоборот, а также о сложении двоичных чисел, читайте в материалах урока №44.

Шестнадцатеричная система счисления


Шестнадцатеричная система счисления состоит из 16 символов: 0-9 и A-F. Символы A-F используются для представления шестнадцатеричных цифр, соответствующих десятичным значениям с 10 по 15.

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

Десятичное представление Двоичное представление Шестнадцатеричное представление
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

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

Пример: Бинарное число 1000 (8) 1100 (C) 1101 (D) 0001 (1) эквивалентно шестнадцатеричному 8CD1.

Чтобы конвертировать шестнадцатеричное число в двоичное, просто запишите каждую шестнадцатеричную цифру в её 4-значный двоичный эквивалент.

Пример: Шестнадцатеричное число FAD8 эквивалентно двоичному 1111 (F) 1010 (A) 1101 (D) 1000 (8).

Адресация данных в памяти

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

   Шаг №1: Извлечение инструкции из памяти.

   Шаг №2: Расшифровка или идентификация инструкции.

   Шаг №3: Выполнение инструкции.

Процессор может одновременно обращаться к одному или нескольким байтам памяти. Например, рассмотрим шестнадцатеричное значение 0824H, которое занимает 2 байта памяти. Байт старшего разряда или старший значащий байт – 08, младший байт – 24.

Процессор хранит данные в обратной последовательности байтов, т.е. байт младшего разряда сохраняется в нижнем адресе памяти (слева), а байт старшего разряда – в верхнем адресе памяти (справа). Таким образом, если процессор перенесет значение 0824H из регистра в память, то 24 будет в начале строки, а 08 – в конце, при этом читать данные процессор будет справа налево, а не слева направо (помним, что процессор работает в бинарной системе счисления):

Когда процессор переносит данные из памяти в регистр, то он опять меняет местами байты (т.е. 08 опять будет слева, а 24 – справа).

Есть 2 вида адресов памяти:

   абсолютный адрес — прямая ссылка на конкретное местоположение;

   сегментный адрес (или «смещение») — адрес сегмента памяти со значением смещения.

На следующем уроке мы рассмотрим установку среды разработки для языка ассемблера.


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (192 оценок, среднее: 4,67 из 5)
Загрузка...

Комментариев: 17

  1. Николай:

    Не понял, что значит буква H в числе 0824H (подглава "Адресация данных в памяти").
    Разобрался — буква H значит Hexadecimal, в переводе с английского "Шестнадцатеричное", то есть обозначает, что число находится в 16-ричной системе счисления, а не в 10-тичной, как обычно.

  2. bolon667:

    Спасибо за качественный урок, очень сильно помогли.

  3. Игорь:

    Хмм. Только сейчас заметил, что добавились уроки по Ассемблеру. Хотел поинтересоваться, будут ли уроки по Питону? Насколько я знаю, иногда С++ и Питон используют в связке. Как минимум один конкретный пример я знаю.

  4. andrey:

    Будет ли продолжение по урокам Assembler?

    1. Фото аватара Юрий:

      Точно ответить не могу. Может будет, а может и нет.

  5. korvell:

    С нетерпением жду следующего урока!
    Евгений Павлов, спасибо!

  6. Артем Захаров:

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

    1. Фото аватара Юрий:

      Услуга за услугу. Принято 🙂

    2. Евгений:

      Благодарю за приятные слова.

  7. Maxim Grekk:

    Очень счастлив, что наткнулся на данный ресурс! Сейчас изучаю плюсы по Шилдту и по этому сайту. Также в ВУЗе начинаем проходить ассемблер… И тут появляется эта статья! Просто огонь! Желаю успеха, счастья и печенек автору этого ресурса и автору этой статьи!

  8. Мгер:

    Очень рад, если будет такой же низкий порог входа как у курсов по с++.
    1. Как создавать приложение на ассемблере.
    2. Какие IDE или приложения есть для удобного программирования.
    3. Продолжение пункта 2, какие сложности могут возникнуть в использовании приложений.

    1. Евгений:

      1. Также как и любое другое.
      2. IDE для ASM практически нету. Я вот работал в VS Code и компилировал из командной строки. Возможно есть расширения под VS.
      3. Вопрос непонятен.

      1. Глеб:

        Есть, но оно только под винду, — что является существенным недостатком для тех, кто сидит на других ОС.

    2. Санёк:

      IDE можно использовать Visual Studio(2013 но знакомые и на 2017 делали). Могу скинуть настройки его под ассемблер. У меня лично всё работает.

    3. Глеб:

      Есть IDE под названием ASM Visual специально для программирования на низкоуровневом языке — Assembler. Единственный недостаток, он только под винду..(

    4. Сергей:

      Любой текстовый редактор. И терминал.

Добавить комментарий для Юрий Отменить ответ

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