- •Содержание
- •1. Введение
- •2. Представление информации в эвм
- •2.1. Системы счисления
- •2.1.1. Основные понятия
- •2.1.2. Системы счисления, используемые в вычислительной технике
- •2.1.3. Перевод чисел из одной системы счисления в другую
- •2.2. Типы данных
- •2.2.1. Типы данных, используемых в эвм
- •2.2.2. Константы
- •2.2.3. Логические величины
- •2.2.4. Символьные величины
- •2.2.5. Целые числа
- •2.2.6. Вещественные числа
- •2.3. Форматы команд
- •3. Основы построения эвм
- •3.1. Немного истории
- •3.2. Особенности архитектуры современной вычислительной машины
- •3.2.1. Основные понятия
- •3.2.2. Структурная организация машины
- •3.3. Вариант структуры микроЭвм
- •3.3.1. Общая структура машины
- •3.3.2. Процессор
- •3.3.3. Оперативная память
- •3.3.4. Системная память
- •3.3.5. Система адресации
- •3.3.6. Виртуальная память
- •3.3.7. Таймер
- •3.3.8. Внешние устройства
- •3.3.9. Принципы обмена информацией с внешними устройствами
- •Некоторые вопросы программного обеспечения
- •4.1. О программном обеспечении
- •4.2. Процесс компиляции
- •4.3. Компиляция с языка Ассемблера
- •5. Особенности архитектуры эвм типа ibm-рс
- •5.1. Введение
- •5.2. Исторический обзор процессоров клона 80х86
- •5.3. Классификация процессоров Intel 80х86
- •5.4. Особенности периферийных устройств ibm-pc
- •5.5. Характеристики компьютера
- •5.6. Сегментная адресация
- •5.7. Особенности распределения адресного пространства в компьютерах ibm-pc
- •5.7.1. Стандартная оперативная память (Conventional memory)
- •5.7.2. Область верхней памяти (Upper Memory Area ‑ uma)
- •5.7.3. Область высшей памяти (High Memory Area ‑ hma)
- •5.7.4. Расширенная память (eXtended Memory Specification — xms)
- •5.7.5. Дополнительная память (Expanded Memory Specification — ems)
- •5.8. Обмен информацией с периферийными устройствами
- •5.8.1. Порты ввода/вывода
- •5.8.2. Использование адресного пространства памяти
- •5.8.3. Прямой доступ к памяти
- •5.9. Прерывания
- •5.10. Начальный запуск эвм
- •5.11. Регистры процессора
- •5.11.1. Регистры общего назначения
- •5.11.2. Указатель инструкций
- •5.11.3. Регистр флагов и управляющие регистры
- •5.11.4. Регистры сегментов и селекторов
- •5.11.5. Системные адресные регистры
- •5.11.6. Регистры отладки
- •5.11.7. Регистры тестирования и модельно-специфические регистры
- •6. Debug — средство непосредственной коррекции и отладки загрузочного кода программ
- •6.1. Введение
- •6.1.1. Команды без аргумента
- •Input I порт
- •6.1.2. Команды обращения к ячейкам
- •15D0:010c bfffff mov di,ffff
- •15D0:010f 57 push di
- •6.1.3. Команды запуска программы
- •6.1.4. Команды просмотра и модификации регистров
- •7. Методы адресации
- •7.1. Введение
- •7.2. Регистровый метод адресации
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •7.3. Непосредственный метод адресации
- •7.4. Прямая адресация
- •7.5. Косвенная регистровая адресация
- •159B:0100 not word ptr [bx]
- •159B:0102 e000 loopnz 0104
- •7.6. Адресация по базе
- •7.7. Косвенная регистровая адресация с индексированием
- •159B:0102 0e push cs
- •7.8. Адресация по базе с индексированием
- •7.9. Относительная адресация
- •7.10. Косвенная регистровая адресация с масштабированием
- •7.11. Адресация по базе с индексированием и масштабированием
- •8. Синтаксис ассемблера
- •8.1. Директивы определения данных
- •8.1.1. Определение переменных
- •Cимвольные строки
- •Числовые данные
- •Примеры:
- •8.2. Выражения
- •8.3. Непосредственные операнды
- •8.4. Структуры
- •8.5. Сегменты
- •8.6. Модели памяти и упрощенные директивы определения сегментов
- •8.7. Упрощенные директивы описания сегментов
- •8.8. Создание программы на ассемблере
- •8.9. Получение выполняемого файла
- •9. Система команд
- •9.1. Классификация команд по операндам
- •9.2. Классификация команд по действию
- •9.2.1. Команды пересылки данных
- •9.2.2. Арифметические команды
- •8.2.3. Команды манипуляции битами
- •9.2.4. Управление центральным процессором
- •9.2.4. Команды передачи управления
- •Iret, iretd
- •9.3. Краткий список команд с используемыми операндами
- •9.3.1. Условные обозначения:
- •9.3.2. Инструкции пересылки данных
- •9.3.3. Арифметические, логические и инструкции сдвига
- •9.3.4. Инструкции обработки строк
- •9.3.5. Инструкции передачи управления
- •9.3.6. Инструкции управления процессором
- •Литература
2.1.3. Перевод чисел из одной системы счисления в другую
Под задачей перевода понимается задача нахождения цифр числа Х, заданного в системе счисления с основанием P, в системе счисления с основанием Q.
Перевод чисел из одной системы в другую основан на том, что значение числа не зависит от формы его представления. Число пять пальцев можно записать по разному, но количество пальцев останется равным пяти.
Пусть есть одна система с основанием Р, а другая с основанием Q. Число Х можно представить по формуле полинома (2.2):
X=Am Pm +A m-1Pm-1 +...+A 1P1+A0 P 0+A-1 P-1 +...A-n P-n , (2.4)
Х=Bk Qk +B k-1Qk-1 +...+B 1Q1+B0 Q 0 +B-1 Q-1 +...B-j Q-j. (2.5)
Итак, мы имеем два уравнения со многими неизвестными, т.е. они не имеют аналитического решения.
Однако если мы знаем, как представить каждую базисную цифру системы Р в системе Q и умеем пользоваться арифметикой системы Q, то вычислить значение числа не сложно по формуле (2.4).
Перевод чисел из произвольной системы в десятичную
Удобно переводить числа из произвольной системы в десятичную по формуле полинома (2.4).
В этом случае используется разложение числа Х по степеням основания, в котором базовые значения цифр и степени основания представляют в десятичной системе и выполняют все действия в этой же системе.
Пример.
1. Перевести число 11001.1(2) из двоичной системы в десятичную.
11001.1(2)=124 +123 +022 +021 +120 +12-1 =16+8+1+1/2=25.5(10).
2. Перевести число 123(8) из восьмеричной системы в десятичную.
123(8)= 182 +281+30 =64+16+3=83(10).
3. Перевести число 20А.0С(2) из двоичной системы в десятичную.
20A.0C(16)=2162 +0161 +A160 +016-1 +C16-2 =
=2256+016+101+01/16+121/256=522.046875(10).
Перевод чисел из десятичной системы в произвольную
При переводе из десятичной системы в произвольную можно воспользоваться полиномом (2.4), но нужно пользоваться арифметикой той системы, из которой мы переводим число. А это затруднительно, т.к. мы, как правило, не знаем не только таблицы умножения в системах, отличных от десятичной, но и таблицу сложения и вычитания!
Целые числа и правильные дроби переводятся по разным правилам.
Перевод целых чисел
Пусть задано Х — целое число в системе P. Требуется найти цифры этого числа в системе счисления с основанием (10).
Алгоритм перевода целых чисел основан на делении целого числа на основание системы:
Исходное число X=Am Pm +A m-1Pm-1 +...+A 1P1+A0 P 0 делим на основание Р:
X/P= Am Pm-1 +A m-1Pm-2 +...+A 1P0+ A0 /P.
Разделяем результат на целую и дробную части:
Целая [X/P]= Am Pm-1 +A m-1Pm-2 +...+A 1P0.
Дробная {X/P}= A0 /P.
Т.к. любая базовая цифра меньше основания системы, то A0/P >=0.
Находим А0:
А0= {X/P} P= остатку от деления.
Целую часть снова делим на основание и получаем A1:
[X/P]/P= Am Pm-2 +A m-1Pm-3 +...+A0+A 1P-1.
Повторяем п.4, пока целая часть не станет равной 0.
На каждой итерации остаток от деления представляет собой коэффициент полинома Ai.
Записываем остатки и последнее частное в порядке, ОБРАТНОМ их получению в НОВОЙ системе счисления.
Пример.
1. Перевести число 13 из десятичной системы в двоичную.
13/2= 6, остаток 1 A0;
6/2= 3, остаток 0 A1;
3/2= 1, остаток 1 A2;
1/ 2=0, остаток 1 A3.
Запишем результат:
13(10)=1101(2).
2. Перевести число 13 из десятичной системы в восьмеричную.
13/8= 1, остаток 5 A0;
1/8= 0, остаток 1 A1.
Запишем результат:
13(10)= 15(8).
3. Перевести число 13 из десятичной системы в шестнадцатеричную
13/16= 0, остаток 13 A0.
Запишем результат:
13(10)= 13(16).
Особый случай возникает, если между основаниями систем существует соотношение:
P= Qn . (2.6)
В этом случае каждую базисную цифру системы Р можно представить n-разрядным числом в системе Q.
Для двоичной и восьмеричной системы справедливо:
23 =8.
Каждой восьмеричной цифре соответствует двоичный код из 3-х цифр. Такой код называется ТРИАДОЙ. Запишем триады всех восьмеричных цифр:
0 – 000, 4 – 100,
1 – 001, 5 – 101,
2 – 010, 6 – 110,
3 – 011, 7 – 111.
Пример.
Перевести число 13 из восьмеричной системы в двоичную.
13(8)= 001 011(2).
Перевести число 10100101100101 из двоичной системы в восьмеричную.
10 100 101 100 101(2)= 24545(8).
Перевести число 13 шестнадцатеричной системы в двоичную.
13(16)= 0001 0011(2).
Перевести число 10100101100101 из двоичной системы в шестнадцатеричную.
10 1001 0110 0101(2)= 2965(16).
Перевод правильных дробей
Пусть X(p) — правильная дробь в системе счисления с основанием P=10. Требуется найти цифры этого числа в системе счисления с основанием Q.
Воспользуемся полиномом (2.4), но будем использовать только дробную часть.
Х=0 Q 0 +B-1 Q-1 +B-2 Q-2 +...B-j Q-j.
Значение X представляет собой дробную часть, т.е. X= {X}.
Умножим Х на основание системы Q:
ХQ=0 Q 1 +B-1 Q0 +B-2 Q-1 +...B-j Q-j+1 =[X]+ {X} .
Подчеркнутая часть представляет собой целое число (возможно 0), т.к. все базисные числа целые, а Q0= 1. Следовательно, целая часть, полученная после умножения, есть первая цифра искомого числа. Далее выделяем дробную часть и снова умножаем ее на основание системы.
Процесс умножения заканчивается в двух случаях:
когда на каком-то шаге получится дробная часть, равная 0. В этом случае дробь переводится в новую систему ТОЧНО;
дроби в новой системе счисления соответствует БЕСКОНЕЧНАЯ дробь. В этом случае процесс заканчивают получением наперед заданного случае количества цифр. Часто выделяется период бесконечной дроби.
Пример.
Перевести число 0.25 из десятичной системы в двоичную.
0.25 0.50
2 2
0.50 1.00
0. 0 1, т.е. число 0.25(10)= 0.01(2).
Перевести число 0.25 из десятичной системы в восьмеричную.
0.25
8
2.0
0.2, т.е. число 0.25(10)= 0.2(8)
Перевести число 0.3 из десятичной системы в шестнадцатеричную.
0.3 0.8 0.8
16 16 16
4.8 12.8 12.8
0. 4 С С ….., т.е. число 0.3(10)= 0.ССС…..(16)