Представление информации
Программная модель микропроцессора 8086
Представление целых чисел. Для хранения данных и кодов команд исполняемой программы используется оперативная память. Вся доступная оперативная память разбита на ячейки размером 8 разрядов – байты(Byte). Разряды байта нумеруются справа налево от 0 до 7 (рис. 4). Порядковый номер байта называют его адресом. В микропроцессоре 8086 используются 20-разрядные адреса, поэтому максимальный объем оперативной памяти составляет 220 байтов.
Рис. 4. Представление байта.
Словом(Word) обозначают два соседних байта. Размер слова составляет 16 разрядов, которые нумеруются справа налево от 0 до 15 (рис. 5). Адресом слова считается адрес первого байта (с меньшим адресом).
А | А+1 |
15 8 | 7 0 |
Рис. 5. Представление слова.
Двойным словом(Double Word) обозначают четыре смежных байта или два смежных слова. Размер двойного слова составляет 32 разряда, которые нумеруются справа налево от 0 до 31 (рис. 6). Адресом двойного слова считается адрес первого байта с наименьшим адресом.
А | А+1 | А+2 | А+3 |
31 24 | 23 16 | 15 8 | 7 0 |
Рис. 6. Представление двойного слова.
В системе команд микропроцессора 8086 имеются команды для работы с байтами, словами и двойными словами. Слова и двойные слова можно обрабатывать и побайтно.
Целые беззнаковые числа в памяти могут храниться в зависимости от их размера в виде байта, слова или двойного слова. Например, если для числа 99 отведен байт, то содержимым ячейки будет двоичное число 01100011 (63h), а если отведено слово, то оно будет иметь вид 00000000 01100011 (0063h). Поскольку в ячейке из k разрядов можно записать 2k различных кодовых комбинаций, то в виде байта можно представить целые от 0 до 255, в виде слова – целые от 0 до 65535, в виде двойного слова – целые от 0 до 4 294 967 295.
Операции сложения и вычитания многозначных чисел начинаются с действий над младшими цифрами, а затем постепенно переходят к более старшим цифрам. Поскольку в первых моделях микропроцессоров многозначное число нельзя было считывать из памяти целиком, то в первую очередь необходимо было считать байт младших цифр, а для этого требовалось, чтобы такой байт хранился в памяти первым. Поэтому числа размером в слово и двойное слово хранятся в памяти в обратном порядке: старшие 8 битов размещаются во втором байте, младшие – в первом байте. Например, число 0062h хранится в памяти как показано на рис. 7.
A | A+1 |
Рис. 7. Хранение числа 0062h.
В последующих моделях микропроцессоров можно было сразу считать из памяти все число, однако для сохранения преемственности оставили такое «перевернутое» представление.
Целые знаковые числа также представляются в виде байта, слова и двойного слова. Знаковые числа записываются в дополнительном коде: неотрицательное число записывается как беззнаковое, а отрицательное число х представляется беззнаковым числом:
Число k определяет количество разрядов в ячейке. Правило формирования дополнительного кода следующее: во всех разрядах, кроме знакового, формируется дополнение до 9 к цифрам разрядов, а затем прибавляется единица в младший разряд. Например, дополнительный код числа +99 – байт 63h или слово 0063h, а дополнительный код числа -99 – байт 9Dh или слово FF9Dh.
В дополнительном коде самый левый бит играет роль знакового. Для неотрицательных чисел этот разряд равен 0, для отрицательных – 1. Знаковые числа размером в слово и двойное слово записываются в памяти также в обратном порядке. При этом знаковый бит оказывается во втором (правом) байте слова.
Представление двоично-десятичных чисел. Существует классы задач, для которых характерен ввод большого массива числовых данных с последующим применением к ним одной или двух арифметических операций и выводом большого количества результатов. В таких условиях переводы чисел из десятичной системы в двоичную и обратно занимают большую долю общих временных затрат.
В двоично-десятичном коде(Binary Coded Decimal, BCD-числа) каждая цифра десятичного числа заменяется на тетрады(четверки битов от 0000 до 1001), обозначающие эту цифру в двоичной системе. Например, число 193 будет представлено как 0001 1001 0011. Двоично-десятичные числа не требуют перевода из десятичной системы, т.к. двоично-десятичное представление есть последовательность цифр числа.
Существует два способа представления двоично-десятичных чисел: упакованное и неупакованное. При упакованном формате каждый байт содержит две соседние цифры числа (при нечетном количестве цифр старшая половина последнего байта будет содержать ноль). При неупакованном формате в каждом байте размещается только по одной цифре, причем в младшей половине. Например, число 193 в упакованном виде будет храниться как 0000 0001 1001 0011, а в упакованном как 0000 0001 0000 1001 0000 0011.
Недостаток такого представления заключается в том, что имеющиеся команды позволяют выполнять арифметические операции только над однозначными двоично-десятичными числами, а операции над многозначными числами приходиться реализовывать программным способом. Однако операции над многозначными двоичными числами реализуются, как правило, аппаратно, а потому выполняются быстрее.
Представление вещественных чисел. В микропроцессоре 8086 не существует команд, выполняющих арифметические операции над вещественными числами. Поэтому для работы с вещественными числами следует использовать арифметический сопроцессор 8087, либо самостоятельно разрабатывать подпрограммы выполнения арифметических операций на основе доступных команд.
Представление символьных данных. Символьные данные хранятся в памяти в двоичном виде. Каждому символу ставится в соответствие неотрицательное число, называемое кодом символа. Соответствие между символами и их кодами называется системой кодировки.
Общеупотребительной является кодировка ASCII(American Standard Code for Information Interchange – американский стандартный код обмена информации), в которой на каждый символ отводится по одному байту, и кодировка UNICODEс двумя байтами на символ. Кодировка ASCII позволяет закодировать 256 различных символов, а UNICODE – 65536. В кодировке ASCII не предусмотрены коды для букв русского алфавита, поэтому используются варианты этой системы кодировки, например, «альтернативная кодировка ГОСТ».