Чтение онлайн

на главную - закладки

Жанры

Ассемблер для процессоров Intel Pentium

Магда Юрий

Шрифт:
 


Рис. 3.4. Расположение байтов двойного слова


Вкратце напомню, как интерпретируются числовые данные в компьютере. Комбинируя двоичные цифры (биты), можно представить любое числовое значение. Значение двоичного числа определяется относительной позицией каждого бита и наличием единичных битов. Рассмотрим восьмибитовое число (байт), представленное следующим образом:

10100101

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



Значение этого числа в десятичной системе равно 165. Таким образом, любое двоичное число, имеющее и разрядов, можно представить в виде



Здесь k может принимать одно из двух значений: 0 или 1. Разрядность и двоичного числа определяется архитектурой системы и обычно кратна восьми. Сразу замечу, что мы рассматриваем двоичное представление целых чисел, являющееся базисом для понимания вычислительных операций с любыми другими типами чисел, такими, например, как вещественные числа или, в терминологии ассемблера, «числа с плавающей точкой».

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

В следующем примере находится двоичное представление числа -61. Положительное число 61 представляется как 00111101, а процесс преобразования показан далее:



Несколько слов об операции сложения. Она выполняется по простым правилам:

0 + 0 = 0 1+0=1

0 + 1 = 1

1 + 1 = 0 + 1 (бит переноса)

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



Рис. 3.5. Схема сложения двоичных чисел с переносом


Проверить результат преобразования положительного числа в отрицательное очень просто: достаточно сложить оба числа, при этом результат должен быть нулевым. Например, если сложить числа 61 и -61, должен получиться 0:



Результат получился нулевым, что свидетельствует о корректности преобразования. Перенос из самого старшего разряда при этом теряется.

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

Приведу простой пример. Пусть требуется из числа 5 вычесть 2. Эту операцию можно представить как 5 + (-2). Число 5 представляется в двоичной форме как 00000101, а число -2 – как 11111110. Результат вычисляется следующим образом:



Здесь я хочу сделать важное замечание. Процессор ничего не «знает» о знаковых и беззнаковых числах, он просто складывает биты операндов, поэтому вся ответственность за интерпретацию результатов ложится на прикладные программы. Операции умножения и деления алгоритмически более сложны, но в их основе также лежат операции сложения и вычитания.

Представление двоичных чисел в виде последовательности нулей и единиц часто бывает не очень удобным из-за своей громоздкости и не очень хорошей читабельности. Во многих случаях используется так называемое шестнадцатеричное представление чисел. Такая система счисления включает символы от 0 до F и, поскольку таких символов 16, называется шестнадцатеричной. Шестнадцатеричный формат нашел широкое применение в языке ассемблера. В ассемблерных листингах программ в шестнадцатеричном формате показаны все адреса, машинные коды команд и содержимое констант. Отладочная информация также выдается в шестнадцатеричном формате.

В табл. 3.1 приведены десятичные, двоичные и шестнадцатеричные значения чисел от 0 до 15.

Если немного поработать с шестнадцатеричным форматом, то можно быстро к нему привыкнуть.


Таблица 3.1. Соответствие между десятичными, двоичными и шестнадцатеричными числами



Для того чтобы различать форматы чисел, в языке ассемблера приняты специальные обозначения: В, b – двоичные числа; H, h – шестнадцатеричные числа. Приведу несколько примеров чисел в разных форматах:

56 = 00111000b = 38h

– 13= 11110101 = F5h

Сложение и вычитание чисел в шестнадцатеричном формате осуществляется по тем же правилам, что и двоичных или десятичных чисел: операция выполняется для каждого разряда с учетом переноса из младшего разряда или заема из старшего. Рассмотрим несколько примеров.

Пусть требуется сложить два числа в шестнадцатеричном формате: 3Fh и 27h:

При сложении младших разрядов, равных F и 7, результирующее значение равно 22 (в десятичной системе), то есть младший разряд будет равен 22 – 16 = 6, при этом происходит перенос в старший разряд. При сложении старших разрядов результирующее значение вычисляется как 3 + 2 + бит переноса, то есть окончательный результат равен 66L

В следующем примере необходимо вычесть шестнадцатеричное значение 7Eh из AAh:



При вычитании младших разрядов, равных А (10 в десятичной системе) и Е (14 в десятичной системе), необходим заем из старших разрядов. Тогда значение младшего разряда будет равно 16 + 10 – 14 = 12 или в шестнадцатеричной форме – С. Результат вычитания старших разрядов будет равен 9-7 = 2. Окончательный результат вычитания равен 2CL

Двоичные числа используются не только в вычислениях, но и для другой функции – с их помощью можно выводить информацию в символьном представлении на экран дисплея или периферийное устройство печати. Для стандартного представления таких символов используется код ASCII (American National Standard Code for Information Interchange – Американский национальный стандартный код для обмена информацией).

Поделиться:
Популярные книги

ЖЛ 9

Шелег Дмитрий Витальевич
9. Живой лёд
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
ЖЛ 9

Тринадцатый VII

NikL
7. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VII

Система Возвышения. (цикл 1-8) - Николай Раздоров

Раздоров Николай
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров

Прапорщик. Назад в СССР. Книга 7

Гаусс Максим
7. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 7

Старшеклассник без клана. Апелляция кибер аутсайдера

Афанасьев Семен
1. Старшеклассник без клана. Апелляция аутсайдера
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Старшеклассник без клана. Апелляция кибер аутсайдера

Лейб-хирург

Дроздов Анатолий Федорович
2. Зауряд-врач
Фантастика:
альтернативная история
7.34
рейтинг книги
Лейб-хирург

Гранит науки. Том 3

Зот Бакалавр
3. Героями не становятся, ими умирают
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Гранит науки. Том 3

Искатель 7

Шиленко Сергей
7. Валинор
Фантастика:
рпг
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Искатель 7

Локки 9. Потомок бога

Решетов Евгений Валерьевич
9. Локки
Фантастика:
фэнтези
попаданцы
героическая фантастика
боевая фантастика
5.00
рейтинг книги
Локки 9. Потомок бога

Барон переписывает правила

Ренгач Евгений
10. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Барон переписывает правила

Инженер Петра Великого 5

Гросов Виктор
5. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
фэнтези
4.75
рейтинг книги
Инженер Петра Великого 5

Я — Легион

Злобин Михаил
3. О чем молчат могилы
Фантастика:
боевая фантастика
7.88
рейтинг книги
Я — Легион

Лекарь

Щепетнов Евгений Владимирович
1. Истринский цикл
Фантастика:
фэнтези
8.24
рейтинг книги
Лекарь

Двойник короля 17

Скабер Артемий
17. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 17