Часть 3. Условные переходы




Задание 1. Выполнение арифметических действий с целыми числами.

Вычислить значение выражения a+b/c.

1. Для хранения чисел a, b, c в 16-ричной системе счисления используем регистры cl, al, bl соответственно, разрядность входных значение 8 бит.

2. Результат программы будет храниться в регистре.

3. Последовательность выполнения работы:

1) Представим числа в 16-ричной системе счисления:

· 510 = 516

· 610 = 616

· 2810 = 1C16

2) Произведем деление b/c, при этом целая часть записывается в al, а остаток от деления в ah

3) Складываем значение из регистра Cl и Al


 

 

4. Текст программы:

1) Mov eax,0; обнуляем все регистры

2) Mov ebx,0

3) Mov ecx,0

4) Mov edx,0

5) Mov al,06h; вносим все нужные значения

6) Mov bl,01Ch

7) Mov cl,5h

8) Div bl; делим число из регистра al на число из bl. В al целая часть, в ah остаток

9) add cl,al; складываем число cl с целой частью от деления

5. Результат работы программы на прописном наборе входных данных

№ строки Al Ah Bl Cl
1-4        
5-7        
         
         

 

Результат 5 – совпадает с вычислениями вручную.

 

Часть 2. Вычисления с плавающей точкой.

Вычислить значение выражения a + b / c.

Выполнение:

 

1) Значения 2,31,26 будут храниться в 16-ричной системе счисления, разрядность входных значений 16. Для решения задачи необходим ввод значений с плавающей точкой, которые будут записаны в формате IEEE 754.

Приведём значения тестового набора к формату IEEE754. Рассмотрим число 2 (для других чисел алгоритм аналогичный). Для этого переведем число в двоичное представление: 210 = 102. Сдвинем число на 1 разряд вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа: Мантисса М=1.00. Экспонента exp2 = 1. Первый бит отводится для обозначения знака числа. Поскольку число положительное, то первый бит равен 0
Следующие 8 бит (с 2-го по 9-й) отведены под экспоненту.
Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта +127. Таким образом, наша экспонента: 1 + 127 = 128
Переведем экспоненту в двоичное представление.
128 = 100000002
Оставшиеся 23 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1 ≤ M < 2. Для экономии, единицу не записывают, а записывают только остаток от мантиссы: 00000000000000000000000
В результате число 2 представленное в IEEE 754 c одинарной точностью равно 01000000000000000000000000000000.
Переведем в шестнадцатеричное представление.
Получаем число:
0100 0000 0000 0000 0000 0000 0000 0000 2 = 4000000016

 

 

2) Аналогично проделаем данные действия с числами 31, 26.

Получим: 31 - 41F8000016 ; 26 – 41D0000016

3) Входные значения хранятся в переменных a,b,c, результат в х.

4) Текст программы.

1) fld dword [a]; берем переменные из стека

2) fld dword [b]

3) fld dword [c]

4) fdiv

5) fadd

6) fst dword [x]; вносим результат вычислений в переменную х

 

7) ret

8) section.data

9) a dd 40000000h

10) b dd 41F80000h

11) c dd 41D00000h

12) x dd 0

5) Результат работы программы с входными значениями

№ строки a b c x
1-3        
        3.1923076923076

Результат 3.1923076923076– совпадает с вычислениями вручную.

Часть 3. Условные переходы

Вычислить наибольшее расстояние между тремя точками a, b и c на числовой оси.

 

Выполнение:

1. Вводим значение точек a, b и c в 3 регистра ah, al, bh. Результат будет находиться в dh.

2. Поочередно сравниваем каждый регистр и наибольший из двух копируем в ch.

3. Поочередно сравниваем каждый регистр и наименьший из двух копируем в cl.

4. Далее находим разницу между наибольшим и наименьшим, копируем в dh.

5. Блок-схема(см. следующую страницу)

 

 

 

 
 

 


 


1. Трассировочная таблица для 1 набора входных данных

№ строки ah al bh ch cl dh
1-4            
5-11            
             
13-12            
             
24-27            
             
             
             

 

 

Результат 1 – совпадает с вычислениями вручную для 1 набора входных данных. Для второго набора результат 9 тоже совпадает.

Результат работы.

Результатом данной работы является изучение команд языка Ассемблер и архитектуры сопроцессора x86, 3 написанные программы: целочисленные вычисления, вычисления с плавающей точкой и условные переходы.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-12-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: