Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Интересное:
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Дисциплины:
2022-10-04 | 28 |
5.00
из
|
Заказать работу |
Целые числа
В языках программирования высокого уровня есть специальные типы данных, позволяющие хранить символы и строки. В языке ассемблера таких типов данных нет. Вместо них для представления одного символа используется байт, а для представления строки — группа последовательных байтов. Каждое значение байта соответствует одному из символов 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!