Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
риклад оформлення звіту практичної роботи №4
Практична робота № 4
Внутрішнє представлення дійсних чисел в IBM PC
Мета роботи:
Отримати практичні навики переведення дійсних чисел з десяткової системи числення в двійкову. Оволодіти навиками представлення дійсних чисел засобами мови Асемблер.
Варіант № = 45.
До заданих двох базових чисел X= ± 60 (ціла частина) і Y=4567 (дробова частина) , потрібно додати і відняти № свого варіанту (для цілої і дробової частини окремо).
Числа варіанту.
№ п\п |
Базове число |
Ціла частина |
Дробова частина |
Числа варіанту |
1 |
60.4567 |
60+45 =105 |
4567+45=4612 |
105.4612 |
2 |
60.4567 |
60-45 =15 |
4567-45=4522 |
15.4522 |
3 |
-60.4567 |
-60+45 =-15 |
-4567+45=-4522 |
-15.4522 |
4 |
-60.4567 |
-60-45 =-105 |
-4567-45=-4612 |
-105.4612 |
Переведення десяткових чисел в двійкову систему числення
Переведемо окремо цілу і дробову частини числа.
105d = 110 1001b
Тепер переведемо в двійкову систему числення правильний десятковий дріб 0.46126. Для перевірки представлення в 32-х бітовому форматі нам достатньо 24-х біт в мантисі (зробимо із запасом - 26 біт) :
0.4612 = 0.0111 0110 0001 0001 0011 0100 00 b
№ біта |
Біт |
Мантиса (Dec) |
Множник |
0 |
4612 |
2 |
|
1 |
0 |
9224 |
|
2 |
1 |
8448 |
|
3 |
1 |
6896 |
|
4 |
1 |
3792 |
|
5 |
0 |
7584 |
|
6 |
1 |
5168 |
|
7 |
1 |
0336 |
|
8 |
0 |
0672 |
|
9 |
0 |
1344 |
|
10 |
0 |
2688 |
|
11 |
0 |
5376 |
|
12 |
1 |
0752 |
|
13 |
0 |
1504 |
|
14 |
0 |
3008 |
|
IS |
0 |
6016 |
|
16 |
1 |
2032 |
|
17 |
0 |
4064 |
|
18 |
0 |
8128 |
|
19 |
1 |
6256 |
|
20 |
1 |
2512 |
|
21 |
0 |
5024 |
|
22 |
1 |
0048 |
|
23 |
0 |
0096 |
|
24 |
0 |
0192 |
|
25 |
0 |
0384 |
|
26 |
0 |
0768 |
Таким чином: 105.4612 d = 110 1001.0111 0110 0001 0001 0011 0100 00b
Числа 2,3,4 формуються аналогічно.
Отримані дані зведемо в таблицю.
Таблиця двійкового нормалізованого представлення дійсних чисел.
Десяткове дійсне число |
Двійкове дійсне число |
Нормалізоване двійкове дійсне число |
105.4612 |
110 1001.01110110000100010011010000 |
1.1010010111011000010001001101 * 26 |
… |
… |
… |
Внутрішнє представлення дійсних чисел.
Відповідає типу даних float мови програмування С++ .
105.4612 = 1.1010010111011000010001001101 * 26
Характеристика = 7F + 6 =85 h = 1000 0101 b.
0 |
10000101 |
101001011101100001000100110 1000 … 0 0 |
Тепер розпишемо по тетрадах, а потім в НЕХ-коді:
0100 |
0010 |
1101 |
0010 |
1110 |
1100 |
0010 |
0010 |
4 |
2 |
D |
2 |
E |
C |
2 |
2 |
Відповідає типу даних double мови програмування С++ .
105.4612 = 1.1010010111011000010001001101 * 26
Характеристика = 3FF + 6 = 405 h = 100 0000 0101 b.
0 |
100 0000 0101 |
1010 0101 1101 1000 0100 0100 1101 … 0 0 |
Тепер розпишемо по тетрадах, а потім в НЕХ-коді:
0100 |
0000 |
0101 |
1010 |
0101 |
1101 |
1000 |
0100 |
0100 |
1101 |
||||||
4 |
0 |
5 |
A |
5 |
D |
8 |
4 |
4 |
D |
… |
Отримати усі розряди мантиси мі не зможемо, оскільки немає інформації. Таким чином, число 105.4612 представлено нами з втратою точності. Для виходу з ситуації, необхідно точніше перевести мантису числа 0.4612 в двійкову систему числення (множити на число 2 не 26 разів, а, наприклад, 56).
Відповідає типу даних long double мови програмування С++ .
У мантиси числа немає прихованого розряду.
105.4612 = 1.1010010111011000010001001101 * 26
Характеристика = 3FFF + 6 = 4005 h = 100 0000 0000 0101 b.
0 |
100 0000 0000 0101 |
1 |
1010 0101 1101 1000 0100 0100 1101 … 0 0 |
Тепер розпишемо по тетрадах, а потім в НЕХ-коді:
0100 |
0000 |
0000 |
0101 |
1101 |
0010 |
1110 |
1100 |
0010 |
0010 |
0110 |
1000 |
... |
|||
4 |
0 |
0 |
5 |
D |
2 |
E |
C |
2 |
2 |
6 |
8 |
Знову отримати усі розряди мантиси ми не зможемо, оскільки немає інформації. Але і того, що є, цілком достатньо.
Текст програми.
TITLE Модуль Int.asm
.386
.model flat,stdcall
ExitProcess PROTO :DWORD
;--------------------------------------------
.data
; float (DWord)
f DWORD 105.4612
DWORD 105
DWORD 105.
;---------------------------double (QWord)
d QWORD 105.4612
;---------------------------long double (TWord)
t TBYTE 105.4612
;----------------------------------------------
.code
main proc
INVOKE ExitProcess,0
main endp
end main
Лістинг програми.
TITLE Модуль Int.asm
.386
.model flat,stdcall
ExitProcess PROTO :DWORD
;--------------------------------------------
00000000 .data
; float (DWord)
00000000 42D2EC22 f DWORD 105.4612
00000004 00000069 DWORD 105
00000008 42D20000 DWORD 105.
;---------------------------double (QWord)
0000000C d QWORD 105.4612
405A5D844D013A93
;---------------------------long double (TWord)
00000014 t TBYTE 105.4612
4005D2EC226809D49518
;---------------------------------------------
00000000 .code
00000000 main proc
INVOKE ExitProcess,0
00000007 main endp
end main
Аналіз цього файлу показує, що машинний формат дійсних чисел нами був отриманий правильно.
PAGE 3
FILENAME \p DATE \@ "M/d/yyyy" 11/3/2012