Цель работы: ознакомление с выполнением арифметических операций в
компьютере и их моделирование.
Короткие теоретические сведения
Из курса ЭВМ мы знаем, что числа в компьютере представляются в различных кодированиях:
Прямой код;
Обратный код;
Дополнительный код.
Прямой код - совпадает с представлением числа (используется в основном для положительных чисел ).
Создания прямого кода:
Знак числа: - 0 отвечает «+»
- 1 отвечает «-»
Порядок совпадает с самым числом:
310 = 00112
Обратный код - используется для кодирования отрицательных чисел.
Создания обратного кода:
Знак числа: - 0 отвечает «+»
- 1 отвечает «-»
Значащая часть числа инвертируется:
310 = 11002
Дополнительный код - используется для кодирования отрицательных чисел.
Правила записи дополнительного кода совпадают с правилами для обратного кода. Данные коды отличаются методом применения:
- при действии происходит 11002 + 1.
Также есть модифицированный код. Его содержание лежит в том, что под мантиссу отведено два бита. С помощью этого мы можем контролировать переполнение:
11. 00112 - -310;
00. 00112 - 310;
01. 00112 - переполнение;
10. 00112 - Переполнение.
Моделирование сложения в обратном коде
Алгоритм:
+ -
+ -
0 1 10 00 11
Текст программы:
Ввести Р1 'Вводим первое число
Ввести Р2 'Вводим второе число
Печать Р1 'Печатаем первое число
Печать Р2 'Печатаем второе число
'Если первое число отрицательное - инвертируем его
Если Р1(6:5) = 3 Операция Р1(4:0) = Р1(4:0)~
'Если второе число отрицательное-инвертируем его
Если Р2(6:5) = 3 Операция Р2(4:0) = Р2(4:0)~
Печать Р1 'Печатаем первое число
Печать Р2 'Печатаем второе число
Операция Р3 = Р1
Операция Р3 + Р2 ' складываем числа
' если есть 1 за разрядной сеткой,
' то +1 к числу
Если Р3(7) = 1 Операция Р3 + 1
' Проверка на переполнение
Если Р3(6:5) = 1 Идти_К 1
Если Р3(6:5) = 2 Идти_К 1
' если результат отрицательный инвертируем
Если Р3(6:5) = 3 Операция Р3(4:0) = Р3(4:0)~
Печать Р3 ' Печать ответа
Идти_К 2
1 Печать "Переполнение"
2 Конец
Пример работы программы:
Складываем 12 и 15 = 27
╔═════════════════════════════════ Результаты ═════════════════════════════════╗
║ 2-й код 16-й код 10-й код ║
║Р001 00001100 0C 00000000012 ☺
║Р002 00001111 0F 00000000015 ▓
║Р001 00001100 0C 00000000012 ▓
║Р002 00001111 0F 00000000015 ↓
║Р003 00011011 1B 00000000027 ☺
╚══════════════════════════════════════════════════════════════════════════════╝
Складываем -12 и 15 = 3
╔═════════════════════════════════ Результаты ═════════════════════════════════╗
║ 2-й код 16-й код 10-й код ║
║Р001 01101100 6C 00000000108 ☺
║Р002 00001111 0F 00000000015 ▓
║Р001 01110011 73 00000000115 ▓
║Р002 00001111 0F 00000000015 ↓
║Р003 10000011 83 00000000131 ☺
╚══════════════════════════════════════════════════════════════════════════════╝
Складываем -12 и -15 = -27
╔═════════════════════════════════ Результаты ═════════════════════════════════╗
║ 2-й код 16-й код 10-й код ║
║Р001 01101100 6C 00000000108 ☺
║Р002 01101111 6F 00000000111 ▓
║Р001 01110011 73 00000000115 ▓
║Р002 01110000 70 00000000112 ↓
║Р003 11111011 E4 00000000228 ☺
╚══════════════════════════════════════════════════════════════════════════════╝
Складываем 28 и 4 состоится переполнение
╔═════════════════════════════════ Результаты ═════════════════════════════════╗
║ 2-й код 16-й код 10-й код ║
║Р001 00011100 1C 00000000028 ☺
║Р002 00000100 04 00000000004 ▓
║Р001 00011100 1C 00000000028 ▓
║Р002 00000100 04 00000000004 ↓
║Переполнение ☺
╚══════════════════════════════════════════════════════════════════════════════╝
Моделирование сложения в дополнительном коде