Глава 3. Сравнение целых чисел с учётом способа кодирования.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА № 34
ОТЧЁТ
ПРЕПОДАВАТЕЛЬ
старший преподаватель | К. А. Жиданов | |||
должность, уч. степень, звание | подпись, дата | инициалы, фамилия |
ОТЧЁТ О ЛАБОРАТОРНОЙ РАБОТЕ №1 |
по курсу: ИНФОРМАТИКА И ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ |
РАБОТУ ВЫПОЛНИЛА
СТУДЕНТКА ГР. № | 3043 | Ульянкина Н.В. | |||
подпись, дата | инициалы, фамилия |
Санкт-Петербург, 2020
Оглавление
Цель работы 3
Глава 1. Арифметические вычисления в целых числах по заданной формуле 3-5
Глава 2. Арифметические вычисления в числах с плавающей точкой по заданной формуле 5-7
Глава 3. Сравнение целых чисел с учётом способа кодирования 7-9
Результат работы 9
Цель работы.
Целью данной работы является изучение архитектуры сопроцессора х86: формата чисел, арифметических операций, регистров, базовых принципов написания программ.
Глава 1. Арифметические вычисления в целых числах по заданной формуле.
I. Выбрала индивидуальный вариант задания в соответствии со списком. Нужно вычислить значение выражения a - b /с.
|
|
II. Возьму первый набор чисел [{20, 18, 29}], где а=20, b=18, c=29 и выполню вычисления вручную: 20-18/29=20. Так как работа идёт с целыми числами, то при делении 18 на 29 мы получим ноль. Следующим действием из 20 вычтем ноль и получим 20.
III. Переведу используемые числа в 16-тиричную систему с учётом разрядности способа кодирования. Разрядность входных данных равна 8, код- дополнительный.
a) 2010= 001416
b) 1810= 001216
c) 2910=001D16
· Замечание: в дополнительном коде положительные числа имеют тот же вид, что и в прямом коде.
IV. Для начала обнулю регистры ECX и EDX. Присвою восьмибитным регистрам: AL значение 0012h (запишется в регистр EAX), СL значение 001Dh (запишется в регистр ECX), DL значение 0014h (запишется в регистр EDX). Далее идёт деление a/b, частное (результат) которого запишется в регистр EAX. Вычту значение в регистре EАX из значения в регистре EDX. Результат будет храниться в регистре EDX.
V. Текст программы:
1) mov ecx, 0; обнуляем значение в регистре есх
2) mov edx, 0; обнуляем значение в регистре edx
3) mov al, 0012h; вводим числа а=20, b=18, c=29
4) mov cl, 001Dh
5) mov dl, 0014h
6) div cl;делим b/c
7) sub dl,al;вычитаем а-b/с
8) ret
VI. Занесу результаты работы программы в трассировочную таблицу:
|
|
№ строки | EAX | ECX | EDX |
1 | - | 0 | - |
2 | - | 0 | 0 |
3 | 0012 | 0 | 0 |
4 | 0012 | 001D | 0 |
5 | 0012 | 001D | 0014 |
6 | 0 | 001D | 0014 |
7 | 0 | 001D | 0014 |
8 | 0 | 001D | 0014 |
Результат 001416=2010 совпадает с вычислением вручную.
VII. Проделаем всё то же самое для второго набора чисел [{-30,2,26}].
a) Выполню вычисления вручную: -30-2/26=-30, так как работаем с целыми числами.
b) Переведу используемые числа в 16-тиричную систему с учётом разрядности способа кодирования. Разрядность входных данных равна 8, код- дополнительный.
-3010=ffe216
210=000216
2610=001a16
c) Текст программы тот же, что и для первого набора чисел.
d) Результаты работы программы занесу в трассировочную таблицу:
№ строки | EAX | ECX | EDX |
1 | - | 0 | - |
2 | - | 0 | 0 |
3 | 0002 | 0 | 0 |
4 | 0002 | 001a | 0 |
5 | 0002 | 001a | ffe2 |
6 | 0 | 001a | ffe2 |
7 | 0 | 001a | ffe2 |
8 | 0 | 001a | ffe2 |
Результат ffe216=-3010 совпадает с вычислениями вручную.
Глава 2. Арифметические вычисления в числах с плавающей точкой по заданной формуле.
I. Выбрала индивидуальный вариант задания в соответствии со списком. Нужно вычислить значение выражения a-b /с.
|
|
II. Возьму первый набор чисел [{20, 18, 29}], где а=20, b=18, c=29 и выполню вычисления с помощью калькулятора (вручную): 20-18/29=19,3793103.
III. Переведу используемые числа в формат IEEE 754, так как мы работаем с числами с плавающей точкой. Покажу на примере перевод числа 20:
a) Первый бит отводится для обозначения знака числа. Так как 20- положительное число, то первый знак будет 0.
b) Следующие 8 бит (со 2-ого по 9-й) отведены под экспоненту. Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта и прибавить 127. Так получаем, 127+4=131
c) Переведём экспоненту в двоичный код: 13110=100000112
d) Оставшиеся 23 бита отводятся для мантиссы. У двоичной мантиссы первый бит всегда равен 1, но записывают только остаток мантиссы без единицы:01000000000000000000000002
e) В результате получаем: 010000011010000000000000000000002
f) Чтобы перевести в 16-тиричную систему, поделим на группы по 4 разряда:0100 0001 1010 0000 0000 0000 0000 00002. Получим 41а0000016
По такому же принципу перевела: 1810=4190000016 и 2910=41е8000016
IV. Для начала я обнулю ячейки памяти [c], [q] и [n]. В ячейки загружу числа в формате IEEE 754: в [а]- 4190000016, [b]- 41е8000016. Далее идёт деление a/b, результат которого запишется в [c]. Следующим действием я заменю операцию вычитания сложением. Для этого в [e] загружаю -110=bf80000016. Умножу содержимое ячейки [с] на содержимое [е], и результат запишется в [q]. Загружу в [d] 41а0000016. Далее совершу операцию сложения содержимого ячейки [q] и содержимого [d], результат которой запишется в [n].
|
|
V. Текст программы:
1) fld dword [a];загрузим в ячейки числа а и b
2) fld dword [b]
3) fdiv;делим а/b
4) fst dword [c];запишем результат в ячейку [с]
5) fld dword [e];загрузим в ячейку [е] число -110
6) fmul;умножаем значения [e] и [c]
7) fst dword [q];запишем результат в [q]
8) fld dword [d];загрузим в ячейку [d] число
9) fadd;складываем значения [q] и [d]
10) fst dword [n];запишем результат в [n]
11) ret
12) SECTION .data
13) a dd 0x41900000
14) b dd 0x41e80000
15) c dd 0x00000000
16) d dd 0x41a00000
17) q dd 0x00000000
18) e dd 0xbf800000
19) n dd 0x00000000
20) ret
VI. Занесу результаты работы программы в трассировочную таблицу
(в десятичной системе счисления).
№ строки | a | b | c | d | e | q | n |
1 | 18 | - | 0 | - | - | 0 | 0 |
2 | 18 | 29 | 0 | - | - | 0 | 0 |
3-4 | 18 | 29 | 0,62..6 | - | - | 0 | 0 |
5 | 18 | 29 | 0,62..6 | - | -1 | 0 | 0 |
6-7 | 18 | 29 | 0,62..6 | - | -1 | -0,62..6 | 0 |
8 | 18 | 29 | 0,62..6 | 20 | -1 | -0,62..6 | 0 |
9-10 | 18 | 29 | 0,62..6 | 20 | -1 | -0,62..6 | 19,37..3 |
Результат 19,3793103 совпадает с вычислениями вручную.
· Для второго набора чисел [{-30,2,26}] программа тоже выполняется верно.
Глава 3. Сравнение целых чисел с учётом способа кодирования.
I. Выбрала индивидуальный вариант задания в соответствии со списком. Нужно найти максимальное из трёх чисел a, b и c.
II. Возьму первый набор чисел [{22,3,6}], где a=22, b=3 и c=6.
III. Переведу используемые числа в 16-тиричную систему с учётом разрядности способа кодирования.
2210=001616
310=000316
610=000616
IV. Для начала обнулим регистры EAX, EBX, ECX. Далее присваиваем регистрам: al значение 0016h (запишется в EAX), bl значение 0003h (запишется в EBX), cl значение 0006h (запишется в ECX). Далее сравниваем числа а и b:
· если a >b, то перейдём на метку pig. В ней сравним а и с: если а >c, то перейдём на метку kaef и присвоим регистру DL значение регистра AL, а если а<c, то присвоим регистру DL значение CL.
· если a <b, то совершим переход на метку Livny. В ней сравним b и с: если b >c, то перейдём на метку carai и присвоим регистру DL значение BL, а если b <c, то регистру DL присвоим
значение CL.
V. Текст программы:
1) mov eax,0
2) mov ebx,0
3) mov ecx,0
4) mov al,0016h
5) mov bl,0003h
6) mov cl,0006h
7) cmp al,bl
8) jg pig
9) jmp Livny
10) pig: cmp al,cl
11) jg kaef
12) mov dl,cl
13) ret
14) Livny:cmp bl,cl
15) jg carai
16) mov dl,cl
17) ret
18) kaef: mov dl,al
19) ret
20) carai: mov dl,bl
21) ret
VI. Блок-схема:
VII. Результаты программы занесу в трассировочную таблицу:
№ строки | EAX | EBX | ECX | EDX |
1-3 | 0 | 0 | 0 | - |
4-6 | 0016h | 0003h | 0006h | - |
7-19 | 0016h | 0003h | 0006h | 0016h |
Таким образом, a >b, a>c.
VIII. Для второго набора чисел [{-23,4,27}} программа так же работает верно. (-2310=ffe916, 410=000416, 2710=001В16) Покажу результат программы в трассировочной таблице:
№ строки | EAX | EBX | ECX | EDX |
1-3 | 0 | 0 | 0 | - |
4-6 | ffe9h | 0004h | 001Вh | - |
7-16 | ffe9h | 0004h | 001Вh | 001Bh |
Таким образом, c >b, c> a.
Результат работы.
Изучила архитектуру сопроцессора х86: формат чисел, арифметические операции, регистры, базовые принципы написания программ.
Дата добавления: 2020-11-15; просмотров: 38; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!