Глава 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!