Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Деление в цифровых процессорах

Автор:   •  Сентябрь 12, 2023  •  Лабораторная работа  •  2,727 Слов (11 Страниц)  •  77 Просмотры

Страница 1 из 11

Министерство науки и высшего образования

Пензенский государственный университет

Кафедра “Вычислительная техника”

Отчет

по лабораторной работе №9

по курсу “Арифметические и логические основы вычислительной техники”

на тему “Деление в цифровых процессорах”

Вариант № 2

Выполнили

студенты группы 22ВВП2:

Байков А.В

Гавин В.Н

Дулатов Д.В

Принял

Калиниченко Е.И

                                                 

   

Пенза 2023

Лабораторное задание:

Написать на языке ассемблера программу вычисления выражения

Y=(2*В+А)*С/(B-200).

Процессор имеет разрядность – 16 бит. Исходные данные (значения переменных заданного выражения - целые, 16-битовые со знаком) располагаются в оперативной памяти, результат вычисления также поместить в оперативную память.

Деление переменных при вычислении выражения осуществлено с помощью операций сложения, вычитания, сдвига.

Умножение и деление на константы осуществлено с помощью операций сдвига, сложения и вычитания.

Общий алгоритм вычисления выражения приведен на блок-схеме:

[pic 1]

Переполнение возможно при умножении A на 3 и деление на ноль, если   (3 * А) = 0

Остальные переполнения были разобраны в 8-й лабораторной работе

Переполнение при делении, когда частное выходит за пределы 16 бит невозможно

Размерность 16-разрядного процессоре составляет [-32768; 32767]

Максимальное число, которое может получится:

А = 10922

B = 32767

С = 0

((((10922 / 4) + 32767) / 2) - ((0 / 4) & 127)) * 10922) / (3 * 10922) =

= ((17748 - 0) * 10922) / (32766) = 193851848 / 32766 = 5916

Листинг:

data segment

        a dw ?

        b dw ?

        c dw ?

        y1 dw ?

        y2 dw ?

        сhast dw ?

        ost dw ?

        good db ?

        overflow db ?

        del dw ?

        del_neg dw ?

        mask dw 8000h ;маска для определения знака=1000 0000 0000 0000

data ends

code segment

assume cs: code, ds:data, ss: nothing

start:

mov ax, data

mov ds,ax

mov good, 0 ;флаг нормального завершения

mov overflow, 0 ;флаг аварийного завершения

; вычисление 1/4*a

mov ax, a

sar ax, 1

sar ax, 1

; вычисление 1/4*a + b

add ax, b

; проверка на переполнение

jno l1

jmp overflowerror

l1:

; вычисление (1/4*a + b) / 2

sar ax, 1

; вычисление c / 4

calc_y:

mov bx, c

sar bx, 1

sar bx, 1

; вычисление (c / 4) & 127

and bx, 127

; вычисление ((1/4*a + b) / 2) - ((c / 4) & 127)

sub ax, bx

;умножение ((1/4*a + b) / 2) - ((c / 4) & 127)*a

mov bx, a

;проверка знаков

mov dx, mask

mov cx, dx

;определение знака 2*b+a

and dx, ax        ;выполняет логическое и между всеми битами операндов; если 1 и 1 = 1, значит, 2*b+a - отрицательное число

jz plus_sum

not ax ;инверсия и +1 (след. шаг), если число отрицательное

inc ax

mov dx, 1

plus_sum:

and cx, bx        ;определение знака с

jz plus_c

not bx        ;инверсия и +1 (след. шаг), если число отрицательное

inc bx

mov cx, 1

 

plus_c:                

xor dx, cx        ;1*1=0, 0*0=0, 1*0=1        

push dx        ;сохранение знака произведения в        стек

;выполнение умножения

xor dx, dx

mov cx, 15

;множимое 2*b+a в ax, множитель c в bx

mul_c:

rcr bx,1 ; начало цикла алгоритма умножения – сдвиг регистра множителя

jnc a_1 ; проверка выдвинутого разряда - если бит равен 0, то сдвиг

add dx, ax ; иначе сложение

a_1:

rcr dx, 1 ; сдвиг сумматора

...

Скачать:   txt (18.8 Kb)   pdf (413.9 Kb)   docx (299.9 Kb)  
Продолжить читать еще 10 страниц(ы) »
Доступно только на Essays.club