Представление данных в ПК (2ч) — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Представление данных в ПК (2ч)

2022-10-04 28
Представление данных в ПК (2ч) 0.00 из 5.00 0 оценок
Заказать работу

Целые числа

 

 

 

В языках программирования высокого уровня есть специальные типы данных, позволяющие хранить символы и строки. В языке ассемблера таких типов данных нет. Вместо них для представления одного символа используется байт, а для представления строки — группа последовательных байтов. Каждое значение байта соответствует одному из символов ASCII-таблицы (AmericanStandardCodeforInformationInterchange). Первые 128 символов — управляющие символы, латинские буквы, цифры — одинаковы для всех компьютеров и операционных систем.

Символы с кодами от 128 до 256 и выше стали «жертвами» различных стандартов и кодировок. Обычно они содержат национальные символы, например, у нас это будут символы русского алфавита и, возможно, некоторые символы псевдографики, в Чехии — символы чешского алфавита и т.д. Следует отметить, что для русского языка используются кодировки СР 866 (в DOS) и СР 1251 (Windows).

ЭВМ поддерживает работу с числами, длинойв:

- байт (1Б);

- слово (2Б);

- двойное слово (4Б);

 

 

 

Выделяются 2 типа целых чисел:

- беззнаковые (неотрицательные);

- числа со знаком.

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

- беззнаковое целое от 0 до 255 (28 – 1),

- целое со знаком по модулю от 0 до 127 (27 – 1).

а) Беззнаковые числа представляются в двоичной системе, занимая все разряды ЯП.

Например, для десятичного числа 98=62h = 01100010Bтребуется 1Б, можно использовать слово 0062h (2Б). Слово в памяти располагается в польской инверсной записи, а в регистрах – в естественном порядке байтов.

Польская инверсная запись или LEM (littleendingmethod) отличается тем, что младший байт располагается раньше старшего.

Pr BX

BH        BL                                       x             x+1

00h 62h

 

62h 00h


Для двойного слова – аналогично.

Например, число 12345678h в оперативной памяти по адресу y располагается следующим образом:

y   y+1 y+2 y+3  
  78 56 34 12 ОП

 

Б) Целые числа со знаком представляются в дополнительном коде, т.е.

ì

Х доп.= í

î

Х, Х≥0
2к-|X|, X<0,

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

Например, -9810 = 9Eh (1 Б)= FF9Eh (слово 2Б).

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

- все цифры, кроме младшей заменяются инверсией, т.е. для 16-ричной системы счисления (15 – {цифра});

- младшая (последняя) цифра - это дополнение, т.е. (16 – {цифра});

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

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

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

Pr AX

AH        AL                                       x                x+1

FF 9E

 

9E FF

 

Двоично-десятичные числа (BCD)

BCD(BinaryCodedDecimal) образуются следующим образом: каждая десятичная цифра представляется тетрадой, т.е. используются цифры от 0 до 9, а цифры от A доF - не используются.

Имеется 2 разновидности BCD-формата:

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

Например,

980610Þ хххх1001хххх1000хххх0000хххх0110 (4 Б);

хххх=0011 – при вводе с клавиатуры;

хххх=0000 – если неупакованный.

б) упакованный формат – в каждом байте хранятся две цифры.

Например,

980610Þ 10011000 00000110 (2 Б).

Отрицательные числа в BCD представляются в дополнительном коде.

Алгоритм образования дополнительного кода для BCD:

- все цифры, кроме младшей заменяются инверсией, т.е. (9 – {цифра});

- младшая (последняя) цифра заменяется дополнением, т.е. (10 – {цифра});

- правые нули не инвертируются и младшими не считаются.

Знак хранится и обрабатывается в отдельном байте.

Например, для упакованного BCD формата:

561 Þ 00000101 01100001 (2 Б)

для отрицательного числа

[-567]доп = 10000000 1001 0100 0011 1001
  1Б - знак 0   5 6  1

В памяти числа хранятся в LEM (польской инверсной записи).

Символьные данные

Символьные данные хранятся в ПЭВМ в двоично-кодированном виде

Наиболее часто используются ASCII коды (AmericanStandardCodeforInformationInterchange), в которых каждый символ кодируется байтом, что позволяет закодировать 256 символов.ожолее часто используютсявести в 10-чную систему счисленияго.

Основные особенности ASCII кодов:

- код пробела меньше кода любого графически представляемого символа;

- коды цифр упорядочены по возрастанию и идут без пропусков

код(i) = код(‘0’)+i, гдеi =1, 2,…,9;

- коды заглавных латинских букв упорядочены по алфавиту без пропусков

код(‘A’) <код({Буква})<код(‘Z’), где {Буква}=B, C, D,…,Y;

- то же верно для малых латинских букв;

- коды от 128 до 255 являются национальными;

В настоящее время для кириллицы используются несколько альтернативныхкодировок: КОИ-8,CP1251,ISO

Не во всех кодировках буквы упорядочены без пропусков.

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

Например: строка ‘Ав_с»’будет представлена в памяти по адресу z:

z z+1 z+2 z+3  
код(‘A’) код(‘в’) код(‘_’) код(‘с’) ОП

Вещественные данные

Исходно они обрабатывались сопроцессором (вспомогательным процессором)Intel 8087, который предназначен для выполнения арифметических операций с данными разных типов.

А именно, операнд может быть:

- целое 16-ти разрядное со знаком (2Б);

- короткое целое(32 разряда) (4Б);

- длинное целое (64 разряда) (8Б);

- упакованное BCD-формата (10Б);

- короткое вещественное (4Б);

- длинное вещественное (8Б)

- временные вещественные (10Б).

В упакованном BCD- формате 10-тичное число занимает 10 байтов (20 тетрад). Причем, старший байт отводится целиком под знак числа, а меняется только старший бит.

0 – положительное число;

1 – отрицательное число.

Например: числа в сопроцессоре представлены в виде:

00 00 00 00 00 12 34 56 78 90  - положительное число,

80 99 99 99 99 87 65 43 21 00  - отрицательное число.

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

Вещественные числа с плавающей точкой представляются в экспоненциальной форме

       А=М*2Р,

где М – мантисса числа,

 р – двоичный порядок числа.

Порядок определяет положение дробной точки в числе. Для упрощения арифметики используется смещенный порядок (характеристика) числа р*. Нулевой порядок смещается на 12710=(27-1).Тогда: p=р*-127

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

Т.к. эта цифра всегда равна 1, то ее наличие подразумевается, и в памяти ее не хранят.

Для вещественных чисел используют 3 формата:

- короткое вещественное (4Б)

31 30                                    23 22                                      0
  характеристика мантисса
знак 8 бит  

 

- длинное вещественное (8Б)

63 62                                    52 51                                      0
  характеристика мантисса
знак 11 бит  

 

- временное вещественное

79 78                                    64 63                                      0
  характеристика мантисса
знак 15 бит  

В сопроцессоре есть восемь регистров по 10 байт. Набор этих регистров обычно используется в режиме стека, но можно обращаться к регистру по адресу от ST(0) до ST(7).


     4Пересылка данных и форматы команд (2ч)

Самая первая команда - это команда пересылки данных MOV. Эта команда пересылает данные, а именно байт, слово, двойное слово, четверное слово из источника в назначение. Данная команда является эталоном для всех команд, принимающих два операнда: все остальные команды, работающие с двумя операндами, имеют такой же синтаксис. Команда MOV - самая распространённая, и в большинстве программ до 40% команд являются командами MOV.

Синтаксис команды MOV: mov<назначение>, <источник>

Фактически команда присваивает регистру или памяти некоторое значение, которое можно взять из памяти, регистра или непосредственного значения (просто цифра). Если назначением является регистр, то источником может быть память, регистр или непосредственно значение; если назначение - память, то источником может быть только регистр или непосредственное значение (перемещение из памяти в память недопустимо). Размерность источника и назначения должны быть равными. Примеры присваивания значения регистру:

mov edx, ebx

mov rax, r10

mov eax, r12d

mov ah, dh

mov ex, r14w

mov ecx, 789056h

mov ax, 12h

moval, 890h;неправильно

movdx, rbx; неправильно

 

Для работы с памятью надо указать адрес и заключить его в квадратные скобки. Адрес должен быть совместим с текущим режимом работы процессора: например, в режиме реальных адресов необходимо указывать 16-битный адрес, а в 64-битном режиме - 64-разрядный адрес. Примеры использования команды MOV для работы с ячейками памяти:

 

moveax, dword [0000509Ah]

mov rbx, qword [00A056Flh]

mov dword [0F81562Dh], r9d

mov qword [0F8156F6h], 0DF899564FFh

MOV AX, 0x1234

 

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


Наиболее часто используемые операторы размера - byte, word, dword, qword. Разумеется, в защищённом режиме вместе с командой МОV не получится использовать 8-байтовый операнд, и в режиме реальных адресов не получится использовать 4-байтовый операнд (4-байтовые регистры использовать можно). Некоторые другие команды могут работать с любыми операндами вне зависимости от текущего режима процессора: например, команды математического сопроцессора могут работать с 10-байтовым операндом (tbyte, tword) как в защищённом, так и в 64-битном режиме. Вместо квадратных скобок можно указать директиву PTR перед адресом.

 

moveax, dwordptr 0000509Ah

mov rbx, qword ptr 00A056F1h

mov qword ptr 0F81562Dh, r9d

movqwordptr 0F8156F6h, 09564FFh

 

Перемещение из памяти в память недопустимо. Иногда размер можно не указывать: например, когда мы переносим значение из памяти в регистр, размер регистра уже показывает размерность операнда. Также можно использовать регистр для адресации памяти.

 

Листинг Использование регистра для адресации памяти

movеах, [еах]

movrbx, ptrebx

mov [rax], r9d

mov ptredx, 09564FFh

Свободно работать можно только с регистрами общего назначения, а работа с остальными регистрами возможна только совместно с регистрами общего назначения (отсюда и их название). Т. е. перемещать, присваивать и получать значения можно только через регистры общего назначения. Все остальные регистры (не считая регистров математического сопроцессора) будем называть привилегированными регистрами, потому в защищённом режиме доступ к ним можно получить только из привилегированного участка кода. Фактически с привилегированными регистрами может работать только эта команда. Есть также набор специфических для каждого типа машины регистров - регистров MSR. К ним нельзя обратиться с помощью команды MOV, для этого предназначены команды RDMSR (чтение), WRMSR (запись).

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

 


Поделиться с друзьями:

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

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

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.007 с.