Ассемблер. Вступление

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

  Обновл. 24 Фев 2019  | 

 865

 ǀ   6 

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

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

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

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

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

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

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

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

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

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

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

   требует меньше памяти;

   быстрее выполняется;

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

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


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

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

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

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

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

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

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

   kilobyte: 1024 байт;

   megabyte: 1 048 576 байт.

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

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

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

Бит 1 1 1 1 1 1 0 1
Позиционное значение 128 64 32 16 8 4 0 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).

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

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

   извлечение инструкции из памяти;

   расшифровка или идентификация инструкции;

   выполнение инструкции.

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

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

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

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

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

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

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


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

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

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

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

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

    1. Юрий Юрий:

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

  2. Аватар Maxim Grekk:

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

  3. Аватар Мгер:

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

    1. Аватар Евгений:

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

    2. Аватар Санёк:

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

Добавить комментарий

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