- •Лекции по предмету:
- •Системы счисления
- •Перевод целого числа
- •Перевод дробной части числа
- •Перевод числа из 8-ой и 16-ой сс в 2-ую сс
- •Арифметические операции в 2-ой сс
- •Обратный код
- •Дополнительный код:
- •Правило сложения в дополнительном коде:
- •Представление чисел в эвм
- •Представление чисел с фиксированной точкой
- •Прямой код
- •Представление чисел с плавающей точкой.
- •Понятие об архитектуре эвм
- •Структура эвм:
- •Устройство управления
- •Арифметико – логическое устройство (алу)
- •Классификация памяти. Операции с памятью.
- •Устройства ввода/вывода
- •Программная модель микропроцессора Intel 80/86
- •Адресация памяти
- •Адресация памяти в командах Ассемблера
- •Общий принцип косвенной адресации в процессоре 8086
- •Организация программы на языке ассемблер
Представление чисел в эвм
Все числа можно разделить на две категории:
Числа с фиксированной точкой
Числа с плавающей точкой
Представление чисел с фиксированной точкой
Числа с фиксированной точкой - положение 10-ой точки не изменяется. На практике так представляются целые числа. Для них ‘.’ Справа от наименьшего разряда.
Представление беззнаковых чисел соответствует обычной записи числа в двоичной СС. Диапазон зависит от количества разрядов:
(n- количество разрядов)
Знаковые числа представлены в ЭВМ в 3 видах:
В прямом коде
В обратном коде
В дополнительном коде
Для обозначения знака числа в этом коде используется специальный знак-разряд : 0 – для положительных и 1 – для отрицательных.
Знаковый разряд – всегда старший разряд числа.
11001010
Знак Значимая часть
Прямой код
Число представляется в виде абсолютного значения и кода знака
Недостаток прямого кода: 0 – представляется двумя способами
0 – положительный ноль – 0 0 ….
0 – отрицательный ноль = 1 0 0…
Пример
Записать числа 13 и -13 в прямом коде, использую 8 разрядов
|x|=1101
X=13 -> 0 0001101
X=-13 -> 1 0001101
Обратный код
Обратный код положительного числа – содержит 0 в знаковом разряде и модуль числа в остальных разрядах(совпадает с прямым кодом)
Для отрицательного числа – знаковый разряд содержит 1, а остальные разряды содержат инверсию модуля числа.(инвертированные биты)
[x]обр = |x| , x>=0 или 2^(n-1)-|x|,x<=0
Недостаток обратного кода: наличие двух нулей
[+0] = 0 000…
[-0] = 1 111…
Пример:
Запись числа 13 в обратном коде
|x|=1101
X=13
X=13 -> 0 0001101
X=-13 -> 1 1110010
Правило сложения в обратном коде: Коды слагаемых суммируются, включая знаковый разряд, с циклическим переносом, т.е. перенос из старшего разряда прибавляется к младшему. Результат верен, если не произошло переполнение. Переполнение происходит тогда, когда перенос в знаковый разряд не равен переносу из знакового разряда.
Дополнительный код:
Положительные числа совпадают с его прямым кодом.
Для отрицательного числа знаковый разряд содержит единицу, а остальные разряды содержат дополнение модуля числа, до 2^(n-1) или содержат код, который получается из обратного кода с прибавлением единицы в младший разряд.
[x]доп = |x|, x>=0 или 2^(n-1),x<0
Диапазон:
0 = 0 00000…
Пример: -13 в дополнительном коде:
-13 -> 1 1110011
Правило сложения в дополнительном коде:
Коды слагаемых суммируются включая знаковый разряд. Перенос из знакового разряда отбрасывается. Результат верен, если не произошло переполнение. Признаком переполнения является несовпадение переносов из знакового разряда и в знаковый разряд.
Результатом сложения является либо положительное число в прямом коде, либо отрицательное число в обратном коде.
Пример:
-13 -> 1 1110011
10 -> 0 0001010
Складываем:
11111101 = -3
11110011 = -13
00001110 = 14
Складываем: 0 0000001
В некоторых случаях при выполнении арифметических операций нежелательно получить переполнение. В этих случаях прибегают к расширению разрядности операндов. Компиляторы с языком высокого уровня выполняют расширение автоматически. В программах на ассемблере расширение нужно выполнять вручную. Для без знаковых чисел при расширении разрядности разряды расширения заполняются нулями.
Пример:
X=255 = 11111111
Unsigned : 0….0 11111111
Для знаковых чисел разряды расширения заполняются копией старшего разряда расширяемого числа
Signed: 1….1 11111111 = -128
Полезные приёмы при работе с целыми числами: 1 приём - умножение целого числа на const при помощи сдвигов.
Сдвиг, как знаковых, так и без знаковых чисел, влево на n разрядов приводит к умножению числа на 2^n. Если переменную V необходимо умножить на const C , то эту константу можно представить как сумму степеней двоек. И умножение заменить суммой сдвигов числа V. Такое действие будет гораздо быстрее, чем умножение.
Пример:
V = V*25
C = 25 = 16 + 8 +1 = 2^4 + 2^3 + 2^0
V+25=V*(16 + 8 + 1) = V*2^4 + V*2^3 + V*2^0 = (V<<4) + (V<<2) + V
2 приём – деление целого числа на 2^n при помощи сдвигов.
Сдвиг как без знаковых, так и знаковых чисел вправо на n разрядов, приводит к делению числа на 2^n.
Для без знаковых чисел для деления используется логический сдвиг при котором освобождающиеся разряды заполняются нулями.
10010011 делим на 4 (сдвигаем на 2 разряда) получаем: 00100100
Для сдвигов вправо знаковых чисел используется арифметический сдвиг, при котором освобождающиеся разряды заполняются копией знакового разряда.
Если знаковое: 10010011 делим на 4 = 11100100
Недостаток деления посредством сдвигов : нельзя const разделить на степени двойки.
